web-dev-qa-db-ja.com

android

一部のデバイスにロードされないlibTest.soがあります。 logcatは絶対に役に立たない。 arm-linux-androideabi-readelf.exe -d libTest.soを使用して、libTest.soが必要とするすべての必要なライブラリを確認できました。それらをすべてローカルPCの同じフォルダーに取り込みました。

どのシンボルがどのライブラリにないかをどのように見つけることができますか? NDKの標準ツールセット(nm、readelf、objdumpなど)しかありません。 libTest.soとすべての依存ライブラリも解析し、どのシンボルがターゲットデバイスにライブラリをロードできないかを教えてくれるように、どのツールとどのように使用できますか。

22
Pavel P

Android開発者に感謝します。私の機能リクエストが実装されました:)これで、依存関係のトラブルシューティングを可能にするツールである ndk-depends ができました。

編集:しかし、それは完全なシンボル解決を行いません。例えば。 Android-14に対してビルドし、古いAndroidに存在しなかったメソッドを使用しようとすると、このツールは欠落しているシンボルを一覧表示しません。この部分はndk-dependsのTODOとして残されました。

19
Pavel P

NDKをお持ちでない場合は、次のことを試してください。

readelf --dynamic filename | grep NEEDED

elfバイナリのダイナミックライブラリを表示します。

15
user6409506

Androidターミナルでこれを試してください:
strings /path/to/your/file | grep ^libここで見つかりました: https://forum.xda-developers.com/showthread.php?t=2737126&page=5

5
Maxxproff

次のようなことができます。

$ /lib/ld-linux.so.2 --list filename

これは、lddが動的ローダーのラッパーのように機能する単なるシェルスクリプトであるためです。ダイナミックローダーの名前、つまりld- {version} .soは異なる場合があります。

0
spica