Android Studio 2.2正式发布以后,已经对C/C++有了完善的支持,可以将C和C++编译成native library,打包到APK中。Java code可以通过JNI调用native library中的API。
Android Studio默认使用CMake编译native library,不过同样也支援ndk build。
环境准备
NDK Install
NDK的安装有两种方式:
- 通过Android Studio来下载;
- 从官网下载NDK的安装包,解压到你指定的位置;然后在"Project Structrue" -> "Android NDK Location"进行配置;
CMake & LLDB Install
在 "SDK Manager"->"SDK Tools"中选中CMake 和 LLDB进行下载;
- CMake: 外部构建工具;
- LLDB: Android Studio上调试本地代码的工具;
创建项目
创建支持native code的项目和普通的Android Studio项目基本一致,需要注意在"Config new project"时需要选中"Include C++ Support";
其他item按照普通项目创建就可以;
项目创建好以后,可以在"Android"视图看到"cpp"和"CMakeLists.txt"为native project所增加的;
添加新的Native API
在MainActivity.java中,新增一个API;
public native String stringFromJNI_Sample_1();
选中这个API名字,等红色的灯泡图标出现后,用弹出菜单的第一项来产生对应的C/C++ prototype;
这样,在native_lib.cpp中,会产生对应的代码
JNIEXPORT jstring JNICALL
Java_com_example_zengping_jnidemo_MainActivity_stringFromJNI_1Sample_11(JNIEnv *env,
jobject instance) {
// TODO
return env->NewStringUTF(returnValue);
}
经过实际测试,这样产生的代码,在使用时,会有crash的问题,需要把"JNIEXPORT jstring JNICALL"替换为工程产生时使用的原型:
extern "C"
jstring
Java_com_example_zengping_jnidemo_MainActivity_stringFromJNI_1Sample_11(JNIEnv *env,
jobject instance) {
// TODO
return env->NewStringUTF(returnValue);
}
修改后,在java层就可以正常使用新增的API了。