【问题标题】:A simple way to build with the Android NDK使用 Android NDK 构建的简单方法
【发布时间】:2020-06-05 04:59:21
【问题描述】:

我开始编写一个简单的 C++ 程序,尝试使用

获取服务的句柄
defaultServiceManager()->getService(String16('ServiceName'));

现在已经滚雪球般地陷入了这种可怕的依赖递归。最终我需要的是:

  • libbinder 用于 defaultServiceManagergetService
  • libutils 用于String16

这些在 NDK 中都不可用。它们的来源与所有适当的标头一起在 SDK 中。在链接时间之前,我可以让一切都表现得很好:

undefined reference to `android::defaultServiceManager()'
undefined reference to `android::String16::String16(char const*)'
undefined reference to `android::String16::~String16()'
undefined reference to `android::String16::~String16()'

是否需要将此构建为 AOSP 的一部分?也许通过ndk-build之类的东西?我正在构建的更像是一个玩具应用程序,它只需要访问那些(以及相关的,例如 service->transact APIs)API 以及 Parcel

也许构建一次 AOSP 并使用 -L 包含生成的库的搜索路径。

【问题讨论】:

  • “NDK 中都没有这些。它们的源代码与所有适当的标头一起在 SDK 中。”在哪里?
  • @DanAlbert libbinder$SDK/frameworks/native/libs/binderlibutils$SDK/system/core/libutils

标签: android build android-ndk


【解决方案1】:

libbinderlibutils 不是应用 API 界面的一部分。 https://developer.android.com/ndk/reference/group/ndk-binder 是 NDK binder API。

【讨论】:

  • 嗯。那里似乎有很多有用的 Binder API,包括用于通信的 transactParcel 相关的。他们中的许多人采用AIBinder 指针。据我所见,许多/所有服务都继承自 IBinder 类。 A 前缀是否以某种方式表示 NDK?
  • 如果不是,AIBinder 指针是什么?这些 API 看起来与 libbinder 中的 C++ 代码提供的 API 非常相似。总的来说,它看起来非常接近,甚至可以从常规 C 中使用。但我看不到像 defaultServiceManager()->getService(name)) 那样查找服务的方法。你知道一种方法吗?
  • 现在我再次看到这个,我记得遇到了链接问题。 NDK确实有libbinder_ndk.so,但是设备没有这个对象,只有libbinder.so。虽然对我的目的来说不是什么大不了的事(因为我可以使用LD_PRELOADLD_LIBRARY_PATH),但我不确定该怎么办。尽管libc++_shared.so 是相同的方式并且根据文档必须打包到任何想要链接它的APK 中。不过,我没有看到关于 libbinder_ndk.so 的任何提及。
  • 关于我关于查找服务的评论,我发现 this/this 引用了显然执行此查找的代码,尽管我在源代码树中找不到它。
  • 所以,我在这个答案中发现的问题似乎是最新 NDK (r21c) 中包含的libbinder_ndk.so 确实没有 有新的@987654340 @API,尽管声称符合 API29。
猜你喜欢
  • 2011-11-30
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多