2016-10-27 15 views
1

私はAndroidアプリケーションで共有オブジェクトライブラリを使用しています。これらの共有オブジェクトライブラリは.aarファイルにあります。AARファイルの共有ライブラリでndk-stackを使用する方法

ライブラリの1つがクラッシュしています。クラッシュログと正確な回線番号を確認するために私はndk-stackを使っています。 ndk-stack

使用法は、今私はAARファイルに共有ライブラリのパスを取得するにはどうすればよい

$ adb logcat | ndk-stack -sym <Path to your shared libraries> 

のですか?

答えて

3

.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のカスタムタスクです。

+0

誰かがcmakeベースのシステムとnars-aarsをndk-stackで使用する方法を示す別の投票。 –

+0

@EdgarAroutiounian私は少し答えを更新しました。概念的には新しいことは明らかにしていないが。 – Sergio

関連する問題