2017-03-27 2 views
1

これは疑問な質問ですが、NDK Apps Linkingに関するAndroid Nの変更に関するドキュメントに記載されているように、私のアプリケーションがAndroidのプライベートなものにアクセスしているかどうかを確認する必要がありますとしょうかん。問題は、もし私がアプリケーションを持っていれば、このアプリケーションかその依存関係のどれかがプライベートライブラリにアクセスしているかどうかを検出する方法でしょうか?Android N:NDK Appsプラットフォームライブラリにリンクする

答えて

2

あなたがndk-buildを使用している場合は、明示的に許可されていないものをリンクしている場合、我々は警告を発します:https://android.googlesource.com/platform/ndk/+/17f4d9e8ec1d48db9035ca3103254a39efae3899/build/core/build-binary.mk#84

をこの警告は、非NDKライブラリをINGのdlopenによって回避することができ、または構築することにより、リンクするあなた自身のスタブ。 Android N以降で実行している場合、これを回避してもアプリは読み込まれません。

その他のビルドシステムでは、アプリ内にあるもの(APKに同梱)またはsystem_libsリストにあるもののみをリンクしていることを確認してください(サポートするために新しいライブラリが追加されることがありますhttps://android.googlesource.com/platform/ndk/+/master/build/core/build-binary.mk#61

+0

非常に迷惑なアクセスを拒否することを回避しましたこれらのアプリケーションがプライベートライブラリにリンクしているかどうかは分かりませんが、私はコードを書いていません。どうすれば確認できますか? –

+0

'readelf -d $ THELIBRARY'は、リンク先のライブラリを教えてくれます。 –

+0

そしてアプリケーションがそれに依存している 'THELIBRARY'を知る方法は?どのようにそれを検出するには?私はアプリケーションコードを書かなかったので、洞窟の内部については何も知らないが、アプリケーションまたは依存関係がプライベートライブラリにリンクしているかどうかを確認する必要があるのだろうか?それをチェックする方法? –

0

上記のようにreadelf -aD * libfile | grep "NEEDED"を使用するか、必要なlibsとrpathを表示するためにpatchelfを使用すると、より便利なimhoになります。

LDFLAGSをLDLIBSとして使用することで、アンドロイドNプライベートlibの制限を回避することがよくあります。または、あなたが依存するライブラリを静的にリンクするだけです。私は静的にlibcをコンパイルし、LDFLAGSで-lcを渡して静的なバイナリを生成することがよくあります。

私は制限の疲れを取得する傾向があるとちょうど依存関係の私の独自のバージョンを作ると

ここ

https://github.com/Surge1223/interfacer/blob/n-rootless/jni/Android.mk

AOSP開発者は、JNIを使​​用することはほとんど不可能だ参照でそれらを追加するに頼りますrootアクセスを必要としないlibs。

は、私がアプリケーションを持っている場合、私はIPCのバインダーに、いくつかの理由のlibnativehelperが必要ですが、システムのバージョンを使用しているためlibbinderが必要

上記のリンクで私に

関連する問題