一、JAVA層調(diào)用C++層流程
? ?1. 在build.gradle(:app) 寫入文件配置
? ? ? a.?defaultConfig 里面加入配置參數(shù)
? ? ? b.? 在defaultConfig外面配置JNI的路徑
? ? ?2. 創(chuàng)建CMakeLists文件以及編寫.so庫(kù)
? ? ? ?CMakeList 語法參考此文檔:http://www.lxweimin.com/p/56a3fd12f76e
? ?3.Java層代碼編寫
? ? ?4.? CMakeLists生成.so庫(kù)位置
? ? 5. JNI層代碼編寫,流程已經(jīng)跑通
二、JNI層調(diào)用java層代碼
? ? ? JNI層反射和Java層反射相似
三、ASAN背景介紹
? ??????1.堆棧和堆緩沖區(qū)上溢/下溢
????????2.釋放之后的堆使用情況
????????3.超出范圍的堆棧使用情況
????????4.重復(fù)釋放/錯(cuò)誤釋放
四、把a(bǔ)san.so接入Android
? ? ? 1. gradle寫入環(huán)境變量
? ? ? ? 2. CMakeLists寫入介入三方庫(kù)使用
? ? ? ? 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庫(kù))? 0x704a151578? 0x704a1514d8(崩潰的堆棧)
demo: https://github.com/zhang1shun1wei/ASan_demo