c++ - 在 NDK 的稳定 API 之外使用原生 Android 系统库

标签 c++ linker android-ndk native android-library

我想知道是否可以在 native 代码中使用 Android 系统的库,这些库不会直接作为 API 从 NDK 公开。 特别是如何将它们包含在我的 native 应用程序代码中,以便它们可以与之链接。 我知道这是不鼓励的,但我的项目在不同 Android 版本之间的兼容性不是问题。

我想要实现的是跳过 Android 提供的一些服务并尝试更靠近内核。 谢谢。

最佳答案

我希望您明白,不建议对 stable API 以外的系统库有任何依赖。 .但是 Android 的开放性允许(在技术上和许可方面)引入这种依赖性。从本质上讲,这意味着在非特许水域航行,并准备好应对 API 的变化,不仅在平台的下一版本中,而且在同一平台级别的供应商提供的(即非 AOSP)设置中。

确保向前(和供应商)兼容性的最安全方法是使用 dynamic linking对于未记录的系统功能,并在途中进行仔细的错误检查。

但在很多情况下,系统未记录的 API 实际上非常稳定,谷歌 Android 团队中的好人不会经常进行重大更改。因此,如果您链​​接 skia 的 4.0 版本,您的代码很可能只适用于 4.1.2 及更高版本。

从技术上讲,您将需要要编译的 header 和要链接的 .so 文件。后者你可以简单地从你自己的设备或模拟器图像中 adb pull/system/lib/libwhatever.so。您可以从 https://android.googlesource.com/ 下载的 header git 存储库。确保您的 header 与库版本匹配。

关于c++ - 在 NDK 的稳定 API 之外使用原生 Android 系统库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13722428/

相关文章:

c - 在没有 C 运行时的情况下使用 64 位整数 - 链接错误 __alldiv

android - 如何在 adb shell 上使用 su 命令?

c++ - 使用 OpenCV 进行 JPEG 压缩

python - 异常TypeError: 'argument list must be a tuple'

c++ - 使用 g++ 和 clang++ 对 condition_variable 进行虚假唤醒

c++ - 如何消除警告 LNK4221?

android - 构建testcpp Eclipse项目后报错

android ndk 未定义对方法的引用

c++ - 关于理解汇编输出的教程/书籍

c# - 如何反编译c++ dll?