内置apk

本文目的是实现内置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文件复制过来

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。

猜你喜欢

转载自blog.csdn.net/lyl0530/article/details/80913601
apk