首页 > 解决方案 > 最新的 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 以来一直可用。

我错过了什么吗?

标签: androidandroid-ndknativeandroid-binder

解决方案


它们不被导出的原因是它们不是应用程序 API 表面的一部分。它们存在于供应商和 APEX 模块中。这些域没有与应用程序相同的 API 持久性保证(阅读:它们可能会在任何给定版本中消失)。


推荐阅读