1. 生成帶調(diào)試信息的so
默認(rèn)腳本生成的so是經(jīng)過strip了的吨拗,這里需要改一下腳本
FFmpeg
FFmpeg由于是由configure自動生成的makefile文件检柬,在configure指定一個無副作用的程序或留空。
./configure $FF_CFG_FLAGS \
--extra-cflags="$FF_CFLAGS $FF_EXTRA_CFLAGS" \
--extra-ldflags="$FF_DEP_LIBS $FF_EXTRA_LDFLAGS"
--strip="${FF_CROSS_PREFIX}-size"
ijkplayer
Android的Makefile比較直白茴恰,參考網(wǎng)上的做法销钝,加上這行
cmd-strip :=
2. 安裝帶調(diào)試信息的apk
替換工程里的so,用Android Studio來Run起來的app琐簇,發(fā)現(xiàn)gradle會自動strip掉調(diào)試信息,真是白費(fèi)力氣。
解決方法:解壓apk婉商,手動替換里面的so文件似忧,在重新壓縮為apk。
新的apk安裝不了丈秩,需要簽名盯捌。推薦一個好東西 uber-apk-signer。
3. 分析Crash
ndk-stack -sym
超級利器蘑秽,值得擁有饺著。
PS: ijkplayer編譯腳本編出來的其實(shí)是有符號信息,是我找的位置不對肠牲。
so文件在兩個地方有幼衰,一個是 “ijkplayer/ijkplayer-armv7a/src/main/libs/armeabi-v7a”,另一個是“ijkplayer/ijkplayer-armv7a/src/main/obj/local/armeabi-v7a”缀雳,后者是帶有調(diào)試信息的渡嚣。
如何看so是否有調(diào)試信息?reaelf -S my.so
肥印,如果有.debug相關(guān)字段识椰,說明是有調(diào)試信息的。