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方法:
4. 定义对应的JNI
1). 在main下创建jni文件夹
2). 生成native方法对应的JNI函数声明头文件: 命令窗口中, 进入java文件夹
执行命令: javah com.example.administrator.my.JNI
3). 将生成的头文件转移到jni文件夹下
5. 指定编译的不同CPU
}
6. 编译生成不同平台下的动态链接文件
1). 执行rebuild, 生成so文件
2). so文件目录: build\intermediates\ndk\debug\lib\.....
7. 调用native方法:
1). 在native方法所在的类中加载so文件
static {
System.loadLibrary("Hello");
}
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 __cplusplus extern "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 );