文章目录
需求
- 在mtk Android12或者13 系统上面内置一个apk,不可卸载
- 在mtk Android12或者13 系统上面内置一个apk,可卸载
- 内置应用是否需要系统签名
备注
- 不同的平台内置方式不一致
- 重点指导流程和配置文件位置,方便内置
需求实现
内置apk 不可卸载
涉及到修改
device\mediatek\system\common\device.mk
vendor\mediatek\proprietary\packages\3rd-party
案例-内置美图秀秀app
device.mk 添加配置
device.mk 涉及到的配置内容很多,部分配置如下
# for 3rd-party
PRODUCT_PACKAGES += zxappstore
PRODUCT_PACKAGES += zxlaunchernohome
PRODUCT_PACKAGES += fisetp
PRODUCT_PACKAGES += tffwb
PRODUCT_PACKAGES += weixinOld
PRODUCT_PACKAGES += xiping
PRODUCT_PACKAGES += meituxiuxiu
其中 meituxiuxiu 就是 美图秀秀app 的一个目录名,这个目录对应的就是 vendor\mediatek\proprietary\packages\3rd-party 目录下的app 文件夹
3rd-party目录添加内置的apk 内容
在 3rd-party 目录下创建meituxiuxiu ,放置美图秀秀apk、.mk 文件、.so 库文件,如图所示
*.mk 添加配置
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := meituxiuxiu
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_PRODUCT_MODULE := true
##LOCAL_PROPRIETARY_MODULE := true
LOCAL_ENFORCE_USES_LIBRARIES := false
LOCAL_DEX_PREOPT := false
LOCAL_MULTILIB := 64
LOCAL_PREBUILT_JNI_LIBS := $(sort $(shell cd $(LOCAL_PATH) ; find -L lib/arm64-v8a -name "*.so"))
include $(BUILD_PREBUILT)
其中 meituxiuxiu 就是 美图秀秀app 的一个目录名,这个目录对应的就是 vendor\mediatek\proprietary\packages\3rd-party 目录下的app 文件夹
添加.so 到对应的文件夹
.so 库,根据平台放置对应的库文件,比如 在当前目录下创建 lib/arm64-v8a 文件夹,然后将apk 中的.so 库,取出来放置进去
最后编译看效果
内置apk 可卸载
修改的文件
vendor\mediatek\proprietary\frameworks\base\data\etc\pms_sysapp_removable_system_list.txt
为什么要在 pms_sysapp_removable_system_list.txt 这个文件里面修改呢,且看 device\mediatek\system\common\device.mk 文件配置:
# Add for PMS support removable system app
ifneq ($(strip $(MTK_BASIC_PACKAGE)), yes)
ifeq ($(strip $(MSSI_MTK_CTA_SET)), yes)
PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists, \
vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_system_list.txt:system/etc/permissions/pms_sysapp_removable_system_list.txt)
PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists, \
vendor/mediatek/proprietary/frameworks/base/data/etc/pms_sysapp_removable_vendor_list.txt:system/etc/permissions/pms_sysapp_removable_vendor_list.txt)
endif
endif
在配置文件中添加包名即可,如下:
com.android.quicksearchbox
com.android.calendar
com.android.dreams.basic
com.android.musicfx
com.android.calculator2
com.android.email
com.android.exchange
cn.readpad.whiteboard
com.qiyi.video.pad
com.gotokeep.keep
cn.kuwo.player
com.tencent.android.qqdownloader
com.sohu.inputmethod.sogou
com.mt.mtxx.mtxx
编译,刷机,效果如下
签名配置
配置文件
配置apk 签名,apk 是用自己的签名还是需要用系统签名
且看配置apk 位置对应的签名配置
其中配置.mk 文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := meituxiuxiu
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_PRODUCT_MODULE := true
##LOCAL_PROPRIETARY_MODULE := true
LOCAL_ENFORCE_USES_LIBRARIES := false
LOCAL_DEX_PREOPT := false
LOCAL_MULTILIB := 64
LOCAL_PREBUILT_JNI_LIBS := $(sort $(shell cd $(LOCAL_PATH) ; find -L lib/arm64-v8a -name "*.so"))
include $(BUILD_PREBUILT)
LOCAL_CERTIFICATE 属性值
在我们内置某个apk的时候都会带有Android.mk,这里面就写明了该APK使用的是什么签名,如:
LOCAL_CERTIFICATE := platform
表明使用的是platform签名
LOCAL_CERTIFICATE := PRESIGNED
表明使用的是apk原本的签名,记住这里的PRESIGNED需要大写