Android不同情况下预置APK

写在开头:相关部分参考https://www.jianshu.com/p/9af0a34d3eed

目录

一、源码的APK预置进系统

二、不带源码的(带SO库)APK预置进系统

三、预置用户可卸载的APK进系统,并且恢复出厂设置不恢复

四、预置用户可卸载的APK进系统,并且恢复出厂设置可恢复


一、源码的APK预置进系统

在packeages/apps目录下新建一个以APK名字为名的文件夹,例:新建Taylor文件夹,将 Taylor APK的 源码 拷贝到 Test 文件夹下,删除 /bin 和 /gen 目录,再新建一个Android.mk文件,具体内容如下:

#加载源文件目录
LOCAL_PATH:= $(call my-dir)

#清理除LOCAL_PATH的其他变量
include $(CLEAR_VARS)

#模块的名字,表示了一个预置的apk在编译中的唯一标识,同时编译后该apk会以此命名
LOCAL_MODULE := Taylor

#模块的头部信息 	在任何版本(user、userdebug和eng)下都编译
LOCAL_MODULE_TAGS := optional

#该文件的类型
LOCAL_MODULE_CLASS := APPS

#该文件的根目录
LOCAL_SRC_FILES := $(call all-subdir-java-files)

#包名
LOCAL_PACKAGE_NAME := Taylor

#签名,PRESIGNED表示保留apk文件之前的签名,platform是对apk重新进行签名
LOCAL_CERTIFICATE := PRESIGNED

#指定编译目标为 32位 或 64位,可选值 /32/64/first/both 
LOCAL_MULTILIB := 32    

include $(BUILD_PACKAGE)

这些准备工作做好之后,再在device\mediatek\common\device.mk文件中添加一个属性:
PRODUCT_PACKAGES += Taylor     //+=表示追加此APK
然后重新编译整个工程

二、不带源码的(带SO库)APK预置进系统

在packeages/apps目录下新建一个以APK名字为名的文件夹,例:新建Taylor文件夹,在其下存放Taylor.apk,再新建一个Android.mk文件,具体内容如下:

a:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Module name should match apk name to be installed

LOCAL_MODULE := Taylor

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

#APK内置的so库
LOCAL_PREBUILT_JNI_LIBS:=  \  			
@lib/armeabi/libtest.so \
@lib/armeabi/libtest2.so

LOCAL_MULTILIB := 32 

LOCAL_CERTIFICATE := PRESIGNED

include $(BUILD_PREBUILT)

b:如果a不行,需要将apk中的so库单独抽离出来,在Androi.mk文件同级目录下建立lib文件夹,单独build进系统system/lib分区

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Module name should match apk name to be installed

LOCAL_MODULE := Taylor

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

#导出的apk内的so库
LOCAL_PREBUILT_JNI_LIBS:=  \  			
lib/libtest.so \
lib/libtest2.so

LOCAL_CERTIFICATE := PRESIGNED

include $(BUILD_PREBUILT)

若无so,则需要删除:LOCAL_PREBUILT_JNI_LIBS
若有so,使用LOCAL_PREBUILT_JNI_LIBS列出所有so的路径。一般情况下@标识符会将apk中的so抽离出来build进apk同级目录下的lib文件夹中,特殊情况下,需要进行b操作

注:若apk支持不同cpu类型的so,针对so的部分的处理

Ifeq ($(TARGET_ARCH),arm)
    LOCAL_PREBUILT_JNI_LIBS := \
    @lib/armeabi-v7a/xxx.so\
    @lib/armeabi-v7a/xxxx.so
else ifeq ($(TARGET_ARCH),x86)
    LOCAL_PREBUILT_JNI_LIBS := \
    @lib/x86/xxx.so
else ifeq ($(TARGET_ARCH),arm64)
    LOCAL_PREBUILT_JNI_LIBS := \
@lib/armeabi-v8a/xxx.so
#即将和TARGET_ARCH对应的so抽离出来

这些准备工作做好之后,再在device\mediatek\common\device.mk文件中添加一个属性:
PRODUCT_PACKAGES += Taylor     //+=表示追加此APK
然后重新编译整个工程

注:如果App使用System Level的permission,需要預置到/system/priv-app底下 (原在/system/app)。
修改Android.mk,增加LOCAL_PRIVILEGED_MODULE := true,以声明app需要放在/system/priv-app下。

三、预置用户可卸载的APK进系统,并且恢复出厂设置不恢复

在packeages/apps目录下新建一个以APK名字为名的文件夹,例:新建Taylor文件夹,在其下存放Taylor.apk,再新建一个Android.mk文件,具体内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Module name should match apk name to be installed

LOCAL_MODULE := Taylor

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

# LOCAL_PRIVILEGED_MODULE := true

#这个用于添加可卸载属性
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)

LOCAL_CERTIFICATE := PRESIGNED

include $(BUILD_PREBUILT)

与上雷同,不做赘述

注:LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)即增加了可卸载属性

四、预置用户可卸载的APK进系统,并且恢复出厂设置可恢复

在 vendor\mediatek\proprietary\binary\3rd-party\free下面以需要预置的 APK 名字创建文件夹,并在该目录下存放Taylor.apk,再新建一个Android.mk文件,具体内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Module name should match apk name to be installed

LOCAL_MODULE := Taylor

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_MODULE_PATH := $(TARGET_OUT)/vendor/operator/app

include $(BUILD_PREBUILT)

打开文件device\mediatek\common\device.mk
将 Taylor添加到 PRODUCT_PACKAGES 里面。
PRODUCT_PACKAGES += Taylor
然后重新build整个工程,即可生效

写在最后:努力变强吧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值