NDk在As的流程

来源:互联网 发布:mac奶瓶粉底液 编辑:程序博客网 时间:2024/05/22 04:43
2.2AS之前:
1. 安装配置NDK
1). 解压NDK的zip包到非中文目录
2). 配置path : 解压后NDK的根目录----->ndk-build


2. 给AS配置关联NDK
1). local.properties中添加配置
     ndk.dir=F\:\\android-ndk32-r13(ndk地址)
2). gradle.properties中添加配置
android.useDeprecatedNdk=true  作用:兼容老版本
        3).在2.2后默认Cmake运行,前两个不要你弄了。

2.2AS版本之后:
         1:首先需要下载NDK,来到设置界面点击下载NDK,安装完NDK,还可以选择配置一些工具。
         2:CMake: 外部构建工具。如果你准备只使用 ndk-build 的话,可以不使用它。(Android Studio2.2默认采用CMake)LLDB: Android Studio上面调试本地代码的工具。
         3:在创建新的project时,界面上多了一个Include C++ Support的选项。
勾选它之后将会创建一个默认的C++与JAVA混编的Demo程序。然后一路 Next,直到 Finish 为止即可。
        



       #NDK开发流程
      1:在java中写native代码
      2:写c代码,生成头文件
      3:配置动态链接库的名称
      4:加载动态链接库
      5:使用



1. 编写native方法:
public class JNI {    {        System.loadLibrary("Hello");    }    public native String  sayHello();}



4. 定义对应的JNI
1). 在main下创建jni文件夹
2). 生成native方法对应的JNI函数声明头文件: 命令窗口中, 进入java文件夹
执行命令: javah com.example.administrator.my.JNI

生成头文件: com_example_administrator.my_JNI.h

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_example_administrator_my_JNI */#ifndef _Included_com_example_administrator_my_JNI#define _Included_com_example_administrator_my_JNI#ifdef __cplusplusextern "C" {#endif/* * Class:     com_example_administrator_my_JNI * Method:    sayHello * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_example_administrator_my_JNI_sayHello  (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif


3). 将生成的头文件转移到jni文件夹下

4). 在jni下定义对应的函数文件: Hello.c

string Java_com_example_administrator_my_JNI_sayHello(JNIEnv* env,jobject jobj){//jstring     (*NewStringUTF)(JNIEnv*, const char*);    char* text = "I am from c!!!";    return  (*env)->NewStringUTF(env,text);}





5. 指定编译的不同CPU

defaultConfig {

ndk{    moduleName "Hello" //so文件: lib+moduleName+.so    abiFilters "armeabi", "armeabi-v7a", "x86" //cpu的类型}

 }
6. 编译生成不同平台下的动态链接文件
1). 执行rebuild, 生成so文件
2). so文件目录: build\intermediates\ndk\debug\lib\.....
7. 调用native方法:
1). 在native方法所在的类中加载so文件
static {
        System.loadLibrary("Hello");
    }

2). 在Activity中调用native方法:

String result= new JNI().sayHello(); Log.e(TAG, "onCreate: "+result );
0 0