内置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. 注意:

1). 清单文件修改、模块编译之后,一定要重启手机,才有效果;

2). 若新增方法后,模块编译后无效,重启手机试下;还无效,则要看看Client和Server的aidl文件内容是否一致,编译后重启手机试下;仍无效,再mma模块编译;还无效,再r项目。

3). Android.mk文件中的"LOCAL_CERTIFICATE := platform",表示使用系统签名,同时也要有系统的权限才可以,才可像系统apk一样获取系统数据。要获取系统权限,要在清单文件中添加:android:sharedUserId="android.uid.system" 。

二、内置不带源码的apk (以firefox为例)

1). 在packages/apps/SagerealApp/下新建firefox文件夹,把对应的apk放入,并增加对应的Android.mk文件。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed  
LOCAL_MODULE := firefox
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED #此时是使用自己的签名。有些apk要使用自己的签名,比如火狐浏览器apk
#添加此行,将apk放置到priv-app下
#LOCAL_PRIVILEGED_MODULE := true
LOCAL_DEX_PREOPT := false
include $(BUILD_PREBUILT)

2). 在alps/device/mediatek/common/device.mk下加上该apk即可

PRODUCT_PACKAGES += firefox

以上修改,会使用该分支下所有的项目都出现火狐浏览器,若只想针对某一项目修改,则要使用宏控。即

ifeq ($(strip $(sagereal_add_app_firefox)), yes) 
    PRODUCT_PACKAGES += firefox
endif

同时在对应项目的ProjectConfig.mk文件中加入以下语句即可。

sagereal_add_app_firefox = yes //sagereal/mk/MP3P_common_no_GMS/ProjectConfig.mk

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值