jni
onj123
这个作者很懒,什么都没留下…
展开
-
JNI:调试
符号表:内存地址和文件名/函数名/行号的映射原理:通过报错的寄存器地址逆推出在文件的出错位置addr2line工具addr2line -e xxx.so 寄存器地址ndk-stack命令adb logcat | ndk-stack -sym so目录或者adb logcat > /tmp/xxx.txtndk-stack -sym so目录 -dump xx.txt...原创 2020-05-15 20:48:06 · 162 阅读 · 0 评论 -
JNI:native层调用Java层
调用Java层静态方法1. java层定义静态方法public static void javaStaticFun(String str) {}2. native层找到对应的类jclass myClass = env->FindClass("com/xxx/www/应用名/类名");if(NULL == myClass){ return;}3. 找到对应的方法jmethodID myMethod = env->GetStaticMethodID(hello, "java原创 2020-05-15 20:47:33 · 556 阅读 · 0 评论 -
JNI:签名
方法签名:解决方法重载问题签名规则基本类型签名:一般是类型的首字母的大写,比如int对应I(有2个例外:boolean对应Z,long对应J)类签名:L类全名,比如Lcom/xxx/www/应用名/类名数组签名:[类型签名,比如int[]; 对应[I, int[][]对应[[I查看方法签名cd app/build/intermediates/classes/debugjavap -s com/xxx/www/应用名/类名...原创 2020-05-15 20:46:48 · 150 阅读 · 0 评论 -
JNI:log
native的日志在Android输出native层#include <android/log.h>#define LOGV(…) (__android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__))编译在mk文件添加:LOCAL_LDLIBS +=-llog或者在build.gradle文件的NDK选项添加:ldLibs(“log”)...原创 2020-05-15 20:45:37 · 299 阅读 · 0 评论 -
JNI:实现流程/数据类型映射关系/参数传递/返回值
步骤1. java层静态代码块:public static native String fun(String str);2. 生成包名.类名.h头文件:javah -classpath bin/class; android.jar -d jni 包名.类名-classpath:把java代码编译成的.class的目录-d:输出目录3. 创建.cpp文件:复制头文件中的函数名再实现函数4. mk文件:编译脚本LOCAL_MODULE := xxx // so名字LOCAL_SRC_FI原创 2020-05-15 20:43:48 · 268 阅读 · 0 评论 -
JNI:NDK
java层和native层交互Native层:一些本地服务和链接库,通过C和C++语言实现(加密/加速)JNI(java native interface),Java代码和其它语言写的代码进行交互jni实现流程1. 编写Java类代码2. 编译成字节码.class (javac)3. 产生头文件.h (javah)4. 编写JNI代码.cpp5. 编译成链接库文字.so (ndk-build)NDKnative develop kit,开发C++代码的工具下载: http://dev原创 2020-05-15 20:42:01 · 122 阅读 · 0 评论