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

时间:2012-12-05 11:38:12

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

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

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

1 个答案:

答案 0 :(得分:2)

我希望您理解,不建议在stable API之外对系统库具有任何依赖性。但Android的开放性(允许在技术上和许可方面)引入这样的依赖。从本质上讲,它意味着在非特许水域航行,并准备不仅在平台的下一版本中进行API更改,而且还准备在相同平台级别的供应商提供的(即非AOSP)设置中进行API更改。

确保转发(和供应商)兼容性的最安全方法是将dynamic linking用于未记录的系统功能,并在路上执行仔细的错误检查。

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

从技术上讲,您需要编译标题并链接 .so 文件。后者只需adb pull /system/lib/lib 来自您自己设备的任何 .so,或者来自模拟器图像。您可以从https://android.googlesource.com/ git存储库下载的标头。确保您的标题符合库版本。