Java声明native方法与生成对应的文件头
可以通过javah命令给java文件中声明的native方法生成对应的jni方法,如javah -classpath . 包名.类名
Kotlin声明native方法与生成对应的文件头
如果想通过javah命令给kt文件中声明的external方法生成对应的jni方法,需要先将该kt进行解释得到.class文件。
如图,kt解释后得到的.class文件位于projectRoot/app/build/tmp/kotlin-classes/debug中,通过javah 包名.类名
即可生成头文件,头文件中会含有对应的jni方法。
如果执行javah命令时碰到报错提示找不到对应的类文件可以先将报错对应的这部分代码注释掉,毕竟我们想要的是生成头文件,生成头文件后还原即可。
传递基本数据类型
传递数组与字符串
传递对象
Java Thread & Native Thread
定位native crash
● 拿到crash的地址符号
● 拿到对应的so
● 还原native堆栈调用行:在/Users/darrenyuan/Library/Android/sdk/ndk/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin 目录下执行 arm-linux-androideabi-addr2line –e XXXX.so pc地址1 pc地址2 … 如 arm-linux-androideabi-addr2line -e /Users/darrenyuan/Desktop/6月技术版/lib/arm64-v8a/libaudiobase.so 000000000001a768
● 除使用addr命令外还可以使用IDA还原native crash中的堆栈