内置apk

开发 专栏收录该内容
66 篇文章 0 订阅

一、准备工作
(1)创建需要内置的软件目录xsy_app (这个随便取的名字)
/vendor/sprd/partner/xsy_app
(2) 创建与文件夹同名的make文件
/vendor/sprd/partner/xsy_app/xsy_app.mk
(3) 创建用于放置第三方apk的目录
/vendor/sprd/partner/xsy_app/app/
(4) 创建用于告诉编译系统如何编译预置apk的Android.mk
/vendor/sprd/partner/xsy_app/app/Android.mk
(5)将要预置应用的apk文件(如bingallapp.apk,名字看你自己取什么哪),放到如下目录:
/vendor/sprd/partner/xsy_app/app/bingallapp.apk

二、修改xsy_app.mk文件
(1)增加编译模块(xsy_app.mk)
#LOCAL_PATH :=vendor/sprd/partner/xsy_app //指出当前路径
PRODUCT_PACKAGES += bingallapp (注意:添加客户需求的APK。与LOCAL_MODULE对应,如果有多个apk,中间用空格连接)

瑞哥总结得太好了,我都复制他的了
(2)增加编译参数(Android.mk)
ifeq ($(WW6_HX_BLOCK_MINI),true)
LOCAL_PATH:= $(call my-dir) //编译系统提供的’my-dir’宏函数,用来获取当前的目录

include $(CLEAR_VARS) //清掉变量
LOCAL_MODULE_TAGS := optional //默认optional,即在所有版本都进行编译(user、debug、test)
LOCAL_MODULE := bingallapp //模块名字(一般与apk名字相同。如果与APK名字不同,编译会生成模块名字的apk文件) 有具体代码则是 LOCAL_PACKAGE_NAME
LOCAL_MODULE_CLASS := APPS // 该预置为预置apk
LOCAL_CERTIFICATE := PRESIGNED // 签名方式(客供apk文件用自带的,如果是代码形式的用平台的)
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk // apk 源文件位置 LOCAL_SRC_FILES := app/bingallapp.apk
LOCAL_MODULE_PATH := $(TARGET_OUT)/priv-app //安装位置(权限不同)
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_DEX_PREOPT := true //编译时优化,减少第一次开机时间,但会增加pac大小(空间换时间)
#LOCAL_PRIVILEGED_MODULE := false //如果设置为true,安装位置为system/priv-app
//如果不设置或者设置为false,安装位置为system/app
include $(BUILD_PREBUILT)
endif

注:WW6_BLOCK_MINI,这个宏需要添加,放置多个模块名字相同时冲突报错,加宏控制默认不编译
platform为平台默认签名;PRESIGNED编译过程中不再重新签名,使用apk原本自带的签名
如有多个app,则添加include部分

三、常见预置需求(TARGET_OUT为/system/)
修改预置位置(LOCAL_MODULE_PATH)即可,不同位置安装策略不同。

(1) 应用可删除、重置手机可恢复:
LOCAL_MODULE_PATH := $(TARGET_OUT)/preloadapp //该目录下应用开机时候异步安装
LOCAL_MODULE_PATH := $(TARGET_OUT)/vital-app //该目录下应用开机时候同步安装

注: vital-app目录中的应用在开机的过程中是同步安装的,但是会造成开机时间相应变长。
preloadapp目录中的应用在开机的过程是异步安装的(有利于加快开机速度),存在开机后在home界面,该目录下的应用一个个显示出来的现象。
一般需要进入home界面就要安装好的应用需要预置到vital-app下(比如输入法、launcher),其他的如游戏等预置到preloadapp目录下即可。

(2) 预置应用可删除、不可恢复
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS) // 预置到/data/app下即可

(3) 预置应用不可删除
LOCAL_MODULE_PATH := $(TARGET_OUT)/app // 预置到system/app
LOCAL_MODULE_PATH := $(TARGET_OUT)/priv-app // 预置到/system/priv-app
注:priv-app预置的是系统核心应用,该目录下的应用权限等级比app目录下的应用高,一般不建议内置到该目录

LOCAL_PRIVILEGED_MODULE := true //system/priv-app //不可以卸载(权限较高)
LOCAL_PRIVILEGED_MODULE := false //system/app //不可以卸载(权限低一些)

注意:当LOCAL_PRIVILEGED_MODULE为true时不要添加LOCAL_MODULE_PATH属性,两者取其一

四、编译
(1) 编译模块
如果是只编译模块,需要注意2个mk文件中是否有宏控制,如有则需要暂时屏蔽
编译模块,2种方法:
mmm vendor/sprd/partner/xsy_app/app/ 编译该模块下内置的所有app
make bingallapp 只编译对应名字的app
注:如果将编译文件push到手机时报错(read only),需要root后重新挂载

(2)项目全编
在hx_customer下对应项目
BoardConfig.mk中添加宏,比如:WW6_HX_BLOCK_MINI := true
在xxx_32v4_project.mk中添加
ifeq ($(WW6_HX_BLOCK_MINI),true)
$(call inherit-product, vendor/sprd/partner/xsy_app/xsy_app.mk)
endif

添加系统应用一般不会在 hx-customer\sp7731e_fs286_64x8_demo(客户路径)\sp7731e_fs286_project.mk 里面调用,而是在 build/ 里面添加(短信、彩信之类)

五、预置应用带so库
预置为非系统apk时无需处理so库文件,安装时系统会自行处理。预置为系统apk需手动解压apk,将其中的so库文件预置到特定位置 。
第三方应用中可能同时支持多种类型的so,如x86_64、x86、armeabi-v7a、armeabi、arm64-v8a,应根据当前项目Board中CPU架构相关参数配置选择匹配的
so(如arm还是x86,32还是64位的)解压、预置。

注:详情请见文件 “Android8.1 应用程序定制.pdf”
apk解压方法为将后缀名改为zip,直接解压即可

内置google应用
google自带的apk存放在\google\apps目录下(apps-go为精简版)

在客制化文件中
hx-customer\sp7731e_fs286_M60_hs_BLOCK_MINI_GO_STF_Mexico_32x4_G4W25_WVGA\sp7731e_fs286_32v4_project.mk
$(call inherit-product, vendor/partner_gms/products/gms_go_hs_minigo.mk)

hx_build_common.sh脚本中显示:google\products\gms_go_hs_minigo.mk会替换掉vendor中的,所以我们在google里面定制
在google\products\gms_go_hs_minigo.mk 里面添加需要增加的google应用,如果多个项目使用同一个文件,需要另行新建
如果要删除中间的一个apk不能使用"#"注释掉,直接去掉,否则会删除掉#后面的所有apk

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值