Android N:NDK应用程序链接到平台库

Android N:NDK应用程序链接到平台库,android,android-ndk,android-7.0-nougat,Android,Android Ndk,Android 7.0 Nougat,我知道这是一个愚蠢的问题,但我需要帮助,正如Android N更改文档中提到的,他们说我必须检查我的应用程序是否正在访问任何Android私有库。问题是,如果我有一个应用程序,如何检测此应用程序或其任何依赖项是否正在访问私有库?如果您使用的是ndk build,如果您链接不明确允许的内容,我们将发出警告: 通过dlopening一个非NDK库,或者构建自己的存根来链接,可以绕过此警告。如果你在安卓N或更高版本上运行,如果你已经解决了这个问题,你的应用程序将不会加载 对于其他构建系统,只需确保您只

我知道这是一个愚蠢的问题,但我需要帮助,正如Android N更改文档中提到的,他们说我必须检查我的应用程序是否正在访问任何Android私有库。问题是,如果我有一个应用程序,如何检测此应用程序或其任何依赖项是否正在访问私有库?

如果您使用的是
ndk build
,如果您链接不明确允许的内容,我们将发出警告:

通过
dlopen
ing一个非NDK库,或者构建自己的存根来链接,可以绕过此警告。如果你在安卓N或更高版本上运行,如果你已经解决了这个问题,你的应用程序将不会加载


对于其他构建系统,只需确保您只链接应用程序中的内容(在APK中提供)或
系统库列表中的内容(注意,在每个版本中可能会添加新库以支持新的API):

使用readelf-aD*libfile | grep“NEEDED”就像上面提到的,或者使用patchelf查看所需的libs和rpath,它在imho中更有用

我经常使用LDFLAGS作为ldlib,或者只是在您所依赖的libs中静态链接,从而绕过android N私有lib限制。我静态编译libc,通常只在LDFLAGS中传递-lc来生成静态二进制文件

我倾向于厌倦这些限制,而只是求助于制作我自己版本的依赖项并将它们添加进来

看这里

aosp开发人员几乎不可能在不需要根访问的情况下使用jni LIB

我在上面的链接中绕过了这一点

我需要IPC绑定器的libbinder,出于某种原因需要libnativehelper,但使用系统版本会拒绝我访问


非常烦人

如果我有一个应用程序没有编写代码,而且我不知道这些应用程序是否链接到任何私有库?如何检查它?
readelf-d$THELIBRARY
将告诉您它链接到哪些库。以及如何知道
THELIBRARY
应用程序依赖于它?如何检测它?我没有编写应用程序代码,所以我不知道洞穴内部的情况,但我需要检查应用程序或其依赖项是否链接到私有库?如何检查?
find$OUT\u DIR-name'*.so'
什么是
OUT\u DIR