问题标签 [android-native-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - android 源代码中创建的 PathClassLoader 实例在何时何地?
在研究android源码的时候,注意到app中的通用类加载器是一个实例PathClassLoader
,这个类中有两个构造函数。一种是这样的:
另一个是:
但是在启动应用程序的过程中,我在源代码中找不到第二个构造函数的调用。那么 libraryPath 参数的值从何而来呢?众所周知,libraryPath是指包含原生库的目录列表,用于初始化nativeLibraryDirectories
DexPathList 对象的一个字段 的值。那么如果没有调用三参数的第二个构造函数,怎么 nativeLibraryDirectories
初始化的值呢?因此,应用程序如何找到它的原生库?
实际上,我想知道谁决定了 nativeLibraryDirectories 的值?
希望有人可以指导我。非常感谢。
android - 共享库是如何打包到 apk 中的?
我正在为自定义构建系统编写一些脚本,我需要在 android apk 中打包一些 .so 文件(尚不支持带有本机库的 aars)。
我已经为依赖于本机库 ( )./gradlew assembleDebug --debug
的项目调用以获取完整日志,但没有找到传递给 aapt 或任何其他 android 构建工具的任何 .so 文件路径(尽管我已经看到 .so 使用 ndk strip 剥离命令工具)。apk
aar
.so
详细是怎么做的?aapt
工具能做到吗?是否有任何 aapt 参数,或者它们应该只存储在某些特定路径上(例如。libs
)。
android - Skype for business android SDK 问题,无法加载本机库
我正在尝试使用 Skype for Business Android SDK 实现应用程序
这是帮助配置 SDK 的文档,它没有帮助我集成 aar 文件。 https://msdn.microsoft.com/en-us/skype/appsdk/gettingstarted
所以,我使用新模块集成了库——>导入 jar/aar 文件,这解决了我的编译错误,我现在还可以从这些 SDK 中获取类引用。但是当我运行我的应用程序时,它说加载本机库失败。
github上有一个使用Skype for business SDK的示例。一切都像魅力一样。但我仍然无法弄清楚为什么它无法在我的应用程序中加载库。
我附加的屏幕截图中的未指定是否与我的应用程序无法加载库的原因有任何关系?
c++ - 适用于 Android 的 NativeLibrary 中的 C++11 支持
我正在尝试用 C++ 创建一个本机库,我可以在 Android 中使用它。我在 Visual Studio 2017 中创建了一个项目:动态共享库 (Android),并添加了我的 cpp 代码。
虽然有些代码正在运行 C++11,但我真的很想保持这种状态。当我编译时,我收到错误:
所以我首先尝试去 Project->Properties->C/C++->Language->C++ Language Standard,并设置选项如下:
当我现在编译时,我得到完全相同的错误。所以我尝试-std=c++11
在其他选项下手动添加标志,但仍然出现错误。
为什么编译器不愿意使用 ++11 标准进行编译,我该怎么做才能解决这个问题?我知道它是实验性的,但它至少应该尝试编译。
此致
android - 如何通过 Android Studio 在非 root 设备上使用预编译的 C 库?
我为 Android 交叉编译了一个 C 库。我将 bin 文件夹文件复制到了根设备上的 Android xbin 目录中,并且能够使用库的命令。我可以通过 Android 应用程序/Android Studio在非root 设备上执行相同的操作吗?我将文件复制到 data/local/tmp 目录,但它不起作用。
android - 在动态加载的外部类中使用本机库(带反射)
在我的应用程序中,我DexClassLoader
用来加载一个外部 apk 类,如下所示:
然后使用反射调用方法如下:
这是方法foo
:
在这里myNativeMethod
:
这是日志消息:
我确信我的本机代码中的方法签名是正确的,并且没有任何问题。
另外,我确定它成功加载了本机库,为什么会这样说No implementation found
?
任何帮助,将不胜感激。
android - 使用二进制库运行“afl-fuzz -Q”的问题
我正在尝试使用afl-fuzz
来查找 Android 本机库(例如,等)中的安全libssl.so
漏洞libhttp.so
。
我的理解是我应该使用 QEMU,因为afl
它本身不足以在没有源代码的情况下找到错误。
尝试运行以下命令时:
我遇到以下问题:
我设法通过将内存限制设置为“无”来解决这个问题。然后,我遇到了这个错误:
我最近才开始使用afl
,所以我不太熟悉如何使用它,尤其是二进制库。对此的任何帮助将不胜感激!
android - 为什么Android会随机加载原生库?
我正在通过学习源码研究Android动态库的加载过程。在/bionic/linker/linker.cpp中,我发现获取动态库及其依赖库的信息后,将它们放入“load_list”,然后调用“shuffle”函数对其进行随机化,然后加载库在“加载列表”中。我想知道随机化的目的是什么。
我研究的Android版本是8.0.0_r4,随机操作是2015年10月以后加入的,之前的版本没有。
android - 加载依赖于在 Android 上动态加载的另一个本机库的本机库时出现问题
请不要对安全问题发表评论,这是一个非常具体的用例。
我正在构建一个具有两个本机库的 Android 应用程序。我们会打电话给他们libFooA.so
和libFooB.so
。现在,libFooA.so
被捆绑在 APK 中。但是,它取决于libFooB.so
APK,它没有捆绑在 APK 中。相反,它是在运行时使用System.load()
.
现在,因为libFooA.so
取决于libFooB.so
,我必须先加载libFooB.so
(使用System.load()
),然后才能libFooA.so
加载System.loadLibrary()
. 否则,我会收到此错误:
无论如何,这在我测试过的每台运行 Android 6.0/7.0/8.0 的设备上都能完美运行。但是,它在我测试过的每一个 KitKat 设备上都失败了。这让我怀疑问题出在 Dalvik 与 ART 之间。于是我通过开发者选项将KitKat设备切换到ART,又试了一次,还是失败了。libFooA.so
令人困惑的是,抛出的错误与我之前尝试libFooB.so
在 6.0/7.0/8.0 设备上加载时抛出的错误完全相同。
此外,问题不在于KitKatSystem.load()
本身,因为我之前已经能够在 KitKat 上成功地动态加载和使用本机库。这里的问题是当尝试System.loadLibrary()
一个依赖于另一个库的库时,该库加载了System.load()
.
我还不能在基于 Lollipop 的设备上进行测试,但我怀疑它会正常工作。有人知道为什么 KitKat 在这里有问题吗?这是 KitKat 的已知错误吗?
更新:在 4.4/5.0 ARM Android 模拟器上失败。适用于 6.0 ARM Android 模拟器。
更新2:我认为答案就在这个页面上,有人能指出哪个确切的项目导致行为改变,让这个工作在> = API 23上工作吗?