本文目的是实现内置apk和第三方apk通过aidl通信,着重说下,如何内置apk及内置时有关aidl的一些注意事项。
一、内置带源码的apk
1. 准备工作:
1.1 Android源码
1.2 先在Android Studio中,通过AIDL实现Service[服务端]、Client[客户端]的通信
2. 内置:有以下两种内置方式
2.1 把Service整体作为一个独立的apk进行内置
1) 在packages/apps/SagerealApp/下新建Service文件夹:把AS中Service[服务端]的src、res、adil文件夹和manifest.xml文件复制过来
4) Client在手机上运行,即可实现第三方apk和手机内置代码的通信
2.2 把Service的关键文件内置进Android源码:
1) 把对应的MyService.java、IMyInterface.aidl文件移到vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/mediatek/settings/Service下
2) 在对应的Android.mk中添加IMyInterface.aidl的路径,及在清单文件中注册服务。注意移动后的路径。
4) Client在手机上运行,也可实现第三方apk和手机内置代码的通信
3. 注意:
清单文件修改、模块编译之后,一定要重启手机,才有效果
内置apk时,若apk之间需相互访问数据,要获取系统权限,记得在清单文件中添加:android:sharedUserId="android.uid.system"
二、内置不带源码的apk
在packages/apps/SagerealApp/下新建Service文件夹,把对应的apk放入,其余同2.1。
一、内置带源码的apk
1. 准备工作:
1.1 Android源码
1.2 先在Android Studio中,通过AIDL实现Service[服务端]、Client[客户端]的通信
2. 内置:有以下两种内置方式
2.1 把Service整体作为一个独立的apk进行内置
1) 在packages/apps/SagerealApp/下新建Service文件夹:把AS中Service[服务端]的src、res、adil文件夹和manifest.xml文件复制过来
2) 新建Android.mk文件,内容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS:=optional
LOCAL_SRC_FILES := \
$(call all-java-files-under, java)
# All of our AIDL files are also compiled into the static library
LOCAL_SRC_FILES += \
aidl/com/lyl/love/Service/IMyAidlInterface.aidl
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_PACKAGE_NAME := Service
LOCAL_CERTIFICATE := platform #若要使用系统签名,可以使apk获得系统权限。
LOCAL_PRIVILEGED_MODULE := true
include $(BUILD_PACKAGE)
## 注意添加.aidl文件的路径,且该路径一定要在"LOCAL_SRC_FILES := $(call all-java-files-under, java)"之后添加。
## 若.aidl文件用到类类型,其对应的.java/.aidl文件其路径不用写明,在"LOCAL_SRC_FILES := $(call all-java-files-under, java)"中已包含到。
3) mm模块编译该Service apk,并push进手机
4) Client在手机上运行,即可实现第三方apk和手机内置代码的通信
2.2 把Service的关键文件内置进Android源码:
1) 把对应的MyService.java、IMyInterface.aidl文件移到vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/mediatek/settings/Service下
2) 在对应的Android.mk中添加IMyInterface.aidl的路径,及在清单文件中注册服务。注意移动后的路径。
LOCAL_SRC_FILES += \
src/com/mediatek/settings/service/IMyAidlInterface.aidl
<service android:name="com.mediatek.settings.sim.MyService" >
<intent-filter>
<action android:name="com.mediatek.settings.sim.MyService.action"/>
</intent-filter>
</service>
3) 模块编译代码vendor/mediatek/proprietary/packages/apps/MtkSettings,并push进手机
4) Client在手机上运行,也可实现第三方apk和手机内置代码的通信
3. 注意:
清单文件修改、模块编译之后,一定要重启手机,才有效果
内置apk时,若apk之间需相互访问数据,要获取系统权限,记得在清单文件中添加:android:sharedUserId="android.uid.system"
二、内置不带源码的apk
在packages/apps/SagerealApp/下新建Service文件夹,把对应的apk放入,其余同2.1。