Android native方法的动态注册
目录
Android JNI简介
java的JNI(java native interface)是用于java调用底层C/C++代码的,在Android中,同样也有JNI的调用方法
在以前,使用的是Ndk来编译
而现在Android的标准开发工具由eclipse转向Android Studio后,Android Studio不仅支持NDK,而且增加了Cmake编译的支持
至于Ndk和Cmake,在此篇中不多作介绍
Android JNI的一般注册方法
以Android Studio自带模板为例子
新建项目时勾选include C++ support
生成一个Empty Activity
在Android Studio会在MainActivityJava中的一个类里声明一个native方法
public native String stringFromJNI();
这声明很像接口或者说是抽象类的方式.
在app
下的build.gradle
也会生成Cmake的配置
android {
compileSdkVersion 27
defaultConfig {
//........................
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
//............................
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
在app
目录下也会生成一个CmakeLists.txt
的文件,这个文件中定义了源文件路径,依赖的库,生成库的名称等信息.
默认的CmakeLists.txt
指定了app/src/main/cpp/native-lib.cpp作为源代码文件
打开这个文件如下
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring
JNICALL
Java_com_yxf_dynamicnative_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
Java_com_yxf_dynamicnative_MainActivity_stringFromJNI()
这个方法便是在MainActivity
中native方法stringFromJNI()
方法的实现
这个方法很长,因为java层调用就是依据这个这个函数名称来寻找到这个native
方法的,方法的