android - 最新的 Android NDK (r21c) 的 libbinder_ndk 缺少几个导出的 API
问题描述
我对使用通过binder的 NDK 实现提供的AServiceManager_get/addService()libbinder_ndk
API 很感兴趣, .
可以在此处找到10.0.0r30 - API29的源代码,并在您的 AOSP 树中:
$SDK/frameworks/native/libs/binder/ndk/
但是,与最新的 r21c NDKlibbinder_ndk.so
捆绑在一起的并没有导出所有这些 API。许多是,但获取/添加服务端点不可用。API29 的可在以下位置找到:libbinder_ndk.so
$NDK/platforms/android-29/$PLAT/usr/lib/libbinder_ndk.so
以及每个相应工具链的 sysroot 目录,但仅适用于 API29
$NDK/toolchains/llvm/prebuilt/$HOST/sysroot/usr/lib/$PLAT/29/libbinder_ndk.so
但是,如果您为同一版本构建 AOSP 树,这些符号当然是可用的:
$ readelf --wide -s libbinder_ndk.so | grep AService
180: 000000000000e148 256 FUNC GLOBAL DEFAULT 15 AServiceManager_addService@@LIBBINDER_NDK
181: 000000000000e248 244 FUNC GLOBAL DEFAULT 15 AServiceManager_checkService@@LIBBINDER_NDK
224: 000000000000e33c 244 FUNC GLOBAL DEFAULT 15 AServiceManager_getService@@LIBBINDER_NDK
事实上,搜索文档并没有返回这些 API 的结果,但根据责备记录,该源自 2018-08-20 以来一直可用。
我错过了什么吗?
解决方案
它们不被导出的原因是它们不是应用程序 API 表面的一部分。它们存在于供应商和 APEX 模块中。这些域没有与应用程序相同的 API 持久性保证(阅读:它们可能会在任何给定版本中消失)。
推荐阅读
- c# - WebRequest: Content-Type = text/plain;charset=iso-8859-1 : '底层连接已关闭:连接意外关闭。'
- ruby-on-rails - 在 Rails 中 ModelA.transaction do ..end 和 ModelB.transaction do ..end 有什么区别?
- python - 在 Python 中使用 AND 条件查找两个模式之间的字符串
- python - 在 tkinter 中集成绘图会给出更新 idletasks 错误
- sql-server - 我如何改变;A;B;C; 到('A','B','C')?
- docker - mariadb + wordpress 与 docker 的连接错误
- javascript - 在子组件道具上使用父道具
- python - 如何过滤 Python 列表同时保持过滤值为零
- java - 为特定问题添加评论
- javascript - 如何将 HTML与 PHP 函数连接起来?