jni
onj123
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JNI:调试
符号表:内存地址和文件名/函数名/行号的映射 原理:通过报错的寄存器地址逆推出在文件的出错位置 addr2line工具 addr2line -e xxx.so 寄存器地址 ndk-stack命令 adb logcat | ndk-stack -sym so目录 或者 adb logcat > /tmp/xxx.txt ndk-stack -sym so目录 -dump xx.txt ...原创 2020-05-15 20:48:06 · 271 阅读 · 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 · 722 阅读 · 0 评论 -
JNI:签名
方法签名:解决方法重载问题 签名规则 基本类型签名:一般是类型的首字母的大写,比如int对应I(有2个例外:boolean对应Z,long对应J) 类签名:L类全名,比如Lcom/xxx/www/应用名/类名 数组签名:[类型签名,比如int[]; 对应[I, int[][]对应[[I 查看方法签名 cd app/build/intermediates/classes/debug javap -s com/xxx/www/应用名/类名 ...原创 2020-05-15 20:46:48 · 290 阅读 · 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 · 407 阅读 · 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 · 394 阅读 · 0 评论 -
JNI:NDK
java层和native层交互 Native层:一些本地服务和链接库,通过C和C++语言实现(加密/加速) JNI(java native interface),Java代码和其它语言写的代码进行交互 jni实现流程 1. 编写Java类代码 2. 编译成字节码.class (javac) 3. 产生头文件.h (javah) 4. 编写JNI代码.cpp 5. 编译成链接库文字.so (ndk-build) NDK native develop kit,开发C++代码的工具 下载: http://dev原创 2020-05-15 20:42:01 · 265 阅读 · 0 评论
分享