如何使用cpp访问android中的服务



我正在为android开发一个取证项目。该项目的目标是用adb连接到手机并调查案件,有时我需要访问android服务。我正在用c/cpp开发我的项目,我可以运行popen("服务调用bla-bla"(命令来访问服务并获得结果。方法很奇怪:D我找到了服务的源代码。我可以编译它并将其添加到我的项目中吗?我该如何编译?

https://android.googlesource.com/platform/frameworks/native/+/master/cmds/service/service.cpp

Android使用AIDL来定义客户端和服务器之间的接口。AIDL后端可以是java/cpp/rust。因此,您可以使用cpp访问android服务器。您应该找到将要调用的服务,找到相关的aidl,然后为客户端找到生成的头文件和封装的impl。然后您可以通过包装的impl调用服务。

让我们以ActivityManager为例:

  1. AIDL文件是IActivityManager.AIDL
  2. cpp的生成头文件是IActivityManager.h
  3. 包装的impl是IActivityManager.cpp
  4. 然后您可以调用ActivityManager:
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder = sm->getService(String16("activity"));
sp<IActivityManager> am = interface_cast<IActivityManager>(binder);
if (am != NULL) {
fd = am->openContentUri(uri);
}

请注意,在本例中,IActivityManager.h在IActivityManager.aidl中只包含少数方法。您可以自己使用所有方法生成。

首先,你应该检查它是否可以在ndk中找到。如果没有,请检查是否可以在AOSP中找到它,如果找到,请将标头和impl复制到您的项目中。如果没有,请自己使用aidl-cpp生成它。

最新更新