.so
ファイルがすべてndk-stack
に役立つわけではありません。 Android NDKでは、2種類の.so
ファイルが作成されます。削除されたファイルと取り除かれたファイルです。最も大きな違いは、最後のデバッグ情報にはndk-stack
に必要なデバッグ情報が含まれており、最初のデバッグ情報には含まれていない点です。 readelf
は、特定のファイルが取り除かれているかどうかをチェックするのを助けることができる:あなたが見る
$ readelf <non-stripped-lib> -S | grep debug
[23] .debug_info PROGBITS 00000000 00302c 0052d9 00 0 0 1
[24] .debug_abbrev PROGBITS 00000000 008305 000879 00 0 0 1
[25] .debug_loc PROGBITS 00000000 008b7e 001aa7 00 0 0 1
[26] .debug_aranges PROGBITS 00000000 00a628 000088 00 0 0 8
[27] .debug_ranges PROGBITS 00000000 00a6b0 0000d0 00 0 0 1
[28] .debug_line PROGBITS 00000000 00a780 0009de 00 0 0 1
[29] .debug_str PROGBITS 00000000 00b15e 002387 01 MS 0 0 1
[30] .debug_frame PROGBITS 00000000 00d4e8 0003d0 00 0 0 4
$
$ readelf <stripped-lib> -S | grep debug
$
として、取り除かないELFは確か
などの行番号、プライベート/静的関数名を、含まれていること、
.debug_*
セクションをたくさん持っています
次に、.aar
ファイルは、デバッグとリリースの両方のファイルで、は、のバイナリが削除されています。だから彼らはndk-stack
のために役に立たない。
AFAIKは、除外されていないバイナリが見つかる唯一の場所で、obj/
ディレクトリです。その場所は、使用ビルドシステムに多少異なります。ndk-build
ため
- それは
CMake
ため<module_name>/build/intermediates/ndk
- 下にあり、それはまた、それはすぐにアンドロイドのように見える
<module_name>/build/intermediates/cmake
下にあるベースあなたのaar
にストリップされていないライブラリをパックする方法はありませんので、こちらの唯一の方法はbuild.gradle
のカスタムタスクです。
誰かがcmakeベースのシステムとnars-aarsをndk-stackで使用する方法を示す別の投票。 –
@EdgarAroutiounian私は少し答えを更新しました。概念的には新しいことは明らかにしていないが。 – Sergio