一、JAVA层调用C++层流程
1. 在build.gradle(:app) 写入文件配置
a. defaultConfig 里面加入配置参数
b. 在defaultConfig外面配置JNI的路径
2. 创建CMakeLists文件以及编写.so库
CMakeList 语法参考此文档:https://www.jianshu.com/p/56a3fd12f76e
3.Java层代码编写
4. CMakeLists生成.so库位置
5. JNI层代码编写,流程已经跑通
二、JNI层调用java层代码
JNI层反射和Java层反射相似
三、ASAN背景介绍
1.堆栈和堆缓冲区上溢/下溢
2.释放之后的堆使用情况
3.超出范围的堆栈使用情况
4.重复释放/错误释放
四、把asan.so接入Android
1. gradle写入环境变量
2. CMakeLists写入介入三方库使用
3. 拿到堆栈使用add2Line去解析奔溃的堆栈,即可知道问题原因
Android/sdk/ndk/16.1.4479499/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-addr2line(add2line的目录) -e libnative-lib.so(崩溃的so库) 0x704a151578 0x704a1514d8(崩溃的堆栈)
demo: https://github.com/zhang1shun1wei/ASan_demo
网友评论