2017-03-27 51 views

回答

2

如果您使用ndk-build,如果你鏈接的東西,所有未明確允許我們將發出一個警告:https://android.googlesource.com/platform/ndk/+/17f4d9e8ec1d48db9035ca3103254a39efae3899/build/core/build-binary.mk#84

此警告可以規避由荷蘭國際集團dlopen非NDK庫,或通過建立你自己的存根鏈接反對。如果您運行的是Android N或更新版本,則如果您已經解決了此問題,則不會加載您的應用。

對於其他構建系統,只要確保您只鏈接應用中的東西(在您的APK中發佈)或位於system_libs列表中(請注意,每個版本中可能會添加新庫以支持新的API):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」就像上面提到的一樣,或者使用patchelf來查看所需的libs和rpath,這是更有用的imho。

我經常使用LDFLAGS充當LDLIBS,或者只是靜態鏈接到您所依賴的庫中,從而繞過android N私有庫限制。我靜態編譯libc,並且經常只是在LDFLAGS中傳遞-lc來生成靜態二進制文件。

我傾向於厭倦的限制,只是訴諸使我自己的依賴的版本和

加入他們看到這裏

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

這幾乎是不可能的AOSP開發者使用JNI不需要root權限的庫。

我回避,在上面

我需要libbinder爲IPC粘結劑,由於某種原因libnativehelper是必需的,但使用該系統版本的鏈接不認我訪問

很煩人

相關問題