我想知道是否可以在本机代码中使用Android系统的库,这些库不直接作为NDK的API公开。 特别是如何将它们包含在我的原生应用程序代码中,以便它们可以与之链接。 我知道这是不鼓励的,但我的项目在不同的Android版本中的兼容性并不是一个问题。
我想要实现的是跳过Android提供的一些服务并尝试靠近内核。 感谢。
答案 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存储库下载的标头。确保您的标题符合库版本。