我知道這是一個愚蠢的問題,但我需要幫助,正如Android N有關NDK Apps Linking的更改文檔中所述,他們說我必須檢查我的應用程序是否訪問任何Android專用圖書館。問題是如果我有一個應用程序如何檢測這個應用程序或它的任何依賴項是否正在訪問一個私有庫?Android N:連接到平臺庫的NDK應用程序
回答
如果您使用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
使用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是必需的,但使用該系統版本的鏈接不認我訪問
很煩人
- 1. C++控制檯應用程序連接到android應用程序
- 2. 鏈接跨平臺庫原生的Android應用程序
- 3. 的Android NDK連接C模塊與C++應用程序
- 4. 從ubuntu平臺的rails應用程序連接遠程mysql2
- 5. 在Android上使用NDK連接SQLite庫
- 6. 跨平臺應用程序
- 7. 應用程序連接到數據庫
- 8. 應用程序連接到數據庫
- 9. 開發跨平臺Android應用程序
- 10. 如何連接j2me應用程序中的數據庫諾基亞s40平臺
- 11. Android應用程序遠程連接到數據庫
- 12. 將android應用程序連接到mysql
- 13. 將mssql連接到android應用程序
- 14. Android應用程序連接到db2
- 15. 將android應用程序連接到xampp
- 16. android應用程序使用OAuth2連接到'sparklr'J2EE應用程序
- 17. 將我的Android應用程序連接到數據庫
- 18. Firebase允許android應用程序連接到您的數據庫
- 19. 連接到Android應用程序中的Heroku PostgreSQL數據庫?
- 20. Android本機應用程序vs跨平臺應用程序
- 21. 將Android應用程序連接到JEE6應用程序
- 22. 無法編譯Android應用程序:找不到平臺'android-7'
- 23. 可以在x86和ARM平臺上使用Android應用程序(使用NDK構建的庫)嗎?
- 24. Android應用程序在後臺關閉連接線程
- 25. Android NDK |如何調試應用程序啓動或掛起應用程序,直到調試器連接
- 26. 將Android程序連接到數據庫
- 27. PHP應用程序平臺
- 28. 導出Android應用程序連接到MySQL數據庫
- 29. android應用程序連接到mysql數據庫
- 30. Android應用程序連接到後端數據庫/網站
如果我有一個應用程序我沒有寫它的代碼,如果這些應用程序鏈接到任何私有庫,或者不是這樣?我如何檢查它? –
'readelf -d $ THELIBRARY'會告訴你它鏈接到哪些庫。 –
以及如何知道應用程序依賴它的'THELIBRARY'?如何檢測它?我沒有寫應用程序代碼,所以我不知道洞內有什麼,但我需要檢查應用程序或它的依賴關係是否鏈接到私有庫?如何檢查? –