安卓NDK流程

  • 定义wrap类,声明native函数,加载库
package com.ndk.hello;

public class Classs {

    public native String say_hello();
    static
    {
        System.loadLibrary("HelloAndroidNDK");
    }
}
  • 在项目根目录创建jni文件夹,在此文件夹生成JNI头文件
javah -classpath ../bin/classes com.ndk.hello.Classs
  • 为生成的com_ndk_hello_Classs.h写实现文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_ndk_hello_Classs */

#ifndef _Included_com_ndk_hello_Classs
#define _Included_com_ndk_hello_Classs
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_ndk_hello_Classs
 * Method:    say_hello
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_ndk_hello_Classs_say_1hello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
#include "com_ndk_hello_Classs.h"

JNIEXPORT jstring JNICALL Java_com_ndk_hello_Classs_say_1hello(JNIEnv * env, jobject this)
{
    return (*env)->NewStringUTF(env,"Hello Java NDK!");
}
  • 在jni文件夹写Android.mk文件
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := HelloAndroidNDK
LOCAL_SRC_FILES := com_ndk_hello_Classs.c

include $(BUILD_SHARED_LIBRARY)
  • 在jni文件夹中交叉编译mk文件
$NDK/ndk-build
  • 将生成libs/armeabi/libHelloAndroidNDK.so文件
  • 编写安卓框架程序,调用native方法。
package com.ndk.hello;
import com.ndk.hello.Classs;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroidNDK extends Activity{
    @Override
    public void onCreate(Bundle s)
    {
        super.onCreate(s);

        Classs c = new Classs();

        String say = c.say_hello();
        TextView tv = new TextView(this);
        tv.setText(say);
        setContentView(tv);
    }
}
时间: 2025-01-04 23:33:05

安卓NDK流程的相关文章

安卓NDK 使用

> 环境搭建参考百度经验(未验证): 1.安卓项目中建好对应类,然后编译一下,在cmd窗口中cd到项目的bin\classes目录下,使用 javah –jni 全限类名 生成对应的头文件 2.在Eclipse中右键对应项目,Android Tool –>Add Native Support.. ,输入对应库的名字: 3.在自动生成的jni文件夹中拷入步骤1中生成的头文件 4.如果遇到include<jni.h> 为Unresolved inclusion,则在项目中右键,buil

windows安卓NDK编程

去年搞过一次NDK,当时觉得挺麻烦,以后就一直没再搞过,现在公司的项目需要使用NDK编程,今天又搞了一边,遇到了些问题,和大家分享一下 . 一. 安装Cygwin 1.下载Cygwin http://cygwin.com/setup-x86.exe   双击运行出现如下界面,点击下一步 选择install from internet ,点击下一步 选择默认位置 c:\cygwin ,点击下一步 依旧默认位置,继续点击下一步 默认选项Direct Connection 就可以,继续点击下一步 可以

安卓ndk 忽略 error: undefined reference to &#39;找不到符号

最近在搞天使之翼的mrp模拟器... 移到AndroidStudio了,现在想把原来的Android .mk那种方式的改成cmake的方式编译,但是编译时有一些符号找不到. undefined reference,这些其实是在一个叫mr_gc的文件里的,但是没有这个文件.所以决定直接忽略找不到的符号,但是搜到的是Android.mk的 最后在这个blog发现了 https://blog.csdn.net/suningning/article/details/74509894 通过设置这个参数 A

如何优雅地使用安卓NDK

在Android Studio上使用了一段时间的NDK,感觉官方的插件com.android.tools.build.gradle-experimental还是不够稳定,存在一定问题,不过谷歌也声明了这个插件是在实验性阶段.幸好官方在Android Studio上提供了另一种方式使用NDK,这篇博客就讲讲这种到目前为止我觉得非常赞的方法. 开发环境基础的安卓开发环境:Android Studio.SDK.JDK下载好NDK,自己手动下载或者用SDK工具下载都可以我使用的版本:Android St

[lua]安卓ndk如何编译lua库

这里说的lua库是标准lua库,不包含tolua,不包含cocos2dx的各种lua扩展,是干净的lua. 参考: http://stackoverflow.com/questions/12299659/compiling-lua-lib-for-android-success-but-strange-segfaults 将文件夹放到项目中,去掉main文件. luaconfig.h中找到 lua_getlocaledecpoint 的定义,将它改成 ('.') 编译通过. 为什么要这么改呢?因

安卓ndk参考资料

http://developer.samsung.com/technical-doc/view.do;jsessionid=xKa-L5xQDvdrSyc1sN71lHAXjcv2YUH7I92zjHfgBDPm2xFF3hlU!-1738093137?v=T000000090 https://developer.android.com/ndk/guides/ndk-build.html 怎么通过ndk编译c代码并且使用到java代码里面

网页打包安卓APP流程

搭建环境过程: 1. 安装JDK. 参见http://www.cnblogs.com/Li-Cheng/p/4334985.html. 注:实质上到该网址上下载好JDK安装包,安装后添加一个环境变量: JAVA_HOME,其值为:C:\Program Files\Java\jdk1.8.0_73(由于安装路径不同,从路径下复制即可),然后在PATH变量中添加一个: %JAVA_HOME%\bin; 一定要记得在Path中添加的所有路径都要以;隔开,不然可能会影响系统运行. 2. 安装Androi

安卓ndk开发——找不到so文件的解决方法

看下日志,报了一个错误,大致原因是找不到so文件.该错误是在模拟器中运行产生的,真机运行并不会出现. 经询问,该原因是我启动的模拟器是x86结构的,涉及到底层的东西需要使用arm结构的模拟器,所以不是程序出了问题,而是模拟器的问题,新建一个arm结构的模拟器就不会报该错误了.然而在windows下启动一个arm结构的模拟器需要花费很长时间,所以现实中涉及到这方面的东西,还是使用真机吧,当然还有另一种选择,使用linux进行开发吧,在linux下模拟器的启动速度大大加快了,由于自己电脑是windo

深入浅出安卓学习相关知识,如何从零学好移动开发

原文发表自我的个人主页,欢迎大家访问 http://purplesword.info/mobile-develop 由于近几年来互联网的飞速发展,安卓和iOS平台的大量普及推广,移动开发在当前是非常热门的一个方向. 有不少同学问我如何学习安卓,要学些什么,难不难学.之前一直没有想好应该怎么回答这个问题,只是简单的说安卓自身门槛不高,并不难学.因为我觉得准确回答一个类似这样的问题往往需要灵感.现在根据我的学习体验,做个大概的总结. 1.我为什么学安卓 我从刚开始接触安卓开发到现在也有两三年的时间了