Android Studio Jni开发(三)Native方法动态注册
2017-11-11 22:25
483 查看
今天来实现一个Jni函数的动态注册,什么是动态注册呢,我理解为其实就是把函数重新导出,在本例中并没有实现头文件声明的函数,而是用了另一个函数去注册了声明的函数,可能理解这段话有点绕口,那么下面直接开始实践吧,看代码相信更容易理解,如果没有基础也没有学习前两篇博文的话,建议点击此处Jni开发
先学习一下前两篇
一.新建一个名为jniTest02的工程并添加Myjni类
1.Myjni.java代码如下
2.MainActivity.java代码如下
二.新建Jni目录创建C++头文件和源文件与.mk文件
1.生成Myjni.java的头文件放入Jni目录下,方法在前两篇文章有写到
2.创建名为Myjni.cpp的C++源文件
3.创建android.mk文件
4.创建Application.mk文件
android.mk代码如下:
Application.mk文件代码如下:
Myjni.cpp文件代码如下:
Myjni.cpp代码解读:
三.添加NdkBuild支持
四.现在可以编译APK并进行调试了
先学习一下前两篇
一.新建一个名为jniTest02的工程并添加Myjni类
1.Myjni.java代码如下
2.MainActivity.java代码如下
二.新建Jni目录创建C++头文件和源文件与.mk文件
1.生成Myjni.java的头文件放入Jni目录下,方法在前两篇文章有写到
2.创建名为Myjni.cpp的C++源文件
3.创建android.mk文件
4.创建Application.mk文件
android.mk代码如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_CPP_EXTENSION := cpp LOCAL_MODULE := Myjni LOCAL_SRC_FILES := Myjni.cpp LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
Application.mk文件代码如下:
APP_ABI := all APP_STL := stlport_static APP_OPIM := debug
Myjni.cpp文件代码如下:
#include <com_example_file_jnitest02_Myjni.h> #include <android/log.h> #define LOG_TAG "native-dev" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) JNIEXPORT jstring JNICALL Java_com_example_file_jnitest02_Myjni_getString01 (JNIEnv* env, jclass jc) { return env->NewStringUTF("NativeString01"); } static JNINativeMethod g_Methods[] = { "getString", "()Ljava/lang/String;", (void*) Java_com_example_file_jnitest02_Myjni_getString01 }; JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* pJvm, void* pReserved) { LOGI("---JNI_OnLoad---", "entry"); JNIEnv *pEnv = NULL; //获取环境 jint ret = pJvm->GetEnv((void**) &pEnv, JNI_VERSION_1_6); if (ret != JNI_OK) { LOGI("---JNI_OnLoad---", "ERROR:GetEnv"); return -1; } jclass cls = pEnv->FindClass("com/example/file/jnitest02/Myjni"); if (cls == NULL) { LOGI("---JNI_OnLoad---", "FindClass Error"); return -1; } //动态注册本地方法 ret = pEnv->RegisterNatives(cls, g_Methods, sizeof(g_Methods) / sizeof(g_Methods[0])); if (ret != JNI_OK) { LOGI("---JNI_OnLoad---", "RegisterNatives Error"); return -1; } //返回jav 9759 a版本 return JNI_VERSION_1_6; }
Myjni.cpp代码解读:
三.添加NdkBuild支持
四.现在可以编译APK并进行调试了
相关文章推荐
- Android Studio JNI 的静动态注册开发以及C/C++ JNIEnv的理解
- Android之JNI动态注册native方法和JNI数据简单使用
- 安卓实战开发之JNI从小白到伪老白深入了解JNI动态注册native方法及JNI数据使用
- Android JNI开发(1)--JavaVM和 JNIEnv 动态注册本地方法
- Android JNI动态注册Native 方法(实现IDA中改名)
- 安卓 jni 开发之 native 方法的动态注册
- Android Studio NDK 入门教程(8)--JNI动态注册本地方法
- Android Studio Jni开发(二)实现Native调用java方法和Native调用Android API
- Android JNI 动态注册方法(JNI_OnLoad)
- 【学习Android NDK开发】Java通过JNI调用native方法
- android开发--- jni使用RegisterNatives注册本地方法
- JNI动态注册native方法及JNI数据使用
- Android Studio jni动态注册步骤
- Android JNI使用方法(“动态注册”)
- Android JNI使用方法(“动态注册”)
- android jni 的编写二 (NDK 开发中动态注册Jni)
- 安卓实战开发之JNI入门及高效的配置(android studio一键生成.h,so及方法签名)
- JNI开发基础系列-JNI方法动态注册
- Android JNI开发(2)--native方法调用Java方法
- JNI动态注册native方法及JNI数据使用