Android 13 内置三方应用app


点赞收藏加关注,下次找我不迷路。

也欢迎关注微信公众号 ZZH的Android(AndroidSystemTech)
期待与你的相识!

环境

Pixel 5 ,Android 13

不可卸载非系统应用

以搜狗输入法为例(官网下载的apk)
建立如下目录

// redfin为Pixel5的代号名称
mdkir -p vendor/redfin/thrird_apps/

将搜狗输入法apk放到该目录下,在该目录下编写Android.bp文件如下

android_app_import {
    name: "SogouInput",
    apk: "SogouInput.apk",
    // 保留apk自己的签名
    presigned: true,
    // 打开将放到对应分区目录的priv-app文件夹下
    // privileged: true,  
    // 打开将放到system_ext分区
    // system_ext_specific: true, 
    // 打开将放到product分区
    // product_specific: true, 
    // 打开将放到vendor分区
    // proprietary: true,
    // odm分区
    // device_specific: true 
    // apk优化,内置三方apk时建议关闭
    dex_preopt: {
        enabled: false,
    },
}

针对上面注释掉的属性,我们分别进行打开编译,看下输出结果

out/target/product/redfin/system/app/SogouInput/SogouInput.apk
out/target/product/redfin/system/priv-app/SogouInput/SogouInput.apk
out/target/product/redfin/system_ext/priv-app/SogouInput/SogouInput.apk
out/target/product/redfin/product/priv-app/SogouInput/SogouInput.apk
out/target/product/redfin/vendor/priv-app/SogouInput/SogouInput.apk
out/target/product/redfin/vendor/odm/priv-app/SogouInput/SogouInput.apk

关于分区可以看如下介绍

https://source.android.google.cn/docs/core/architecture/partitions?hl=zh-cn

最后需要将SogouInput加入编译模块

// vendor/redfin/thrird_apps/preinstall_apps.mk
PRODUCT_PACKAGES += SogouInput

// device/google/redfin/device-redfin.mk
-include vendor/redfin/thrird_apps/preinstall_apps.mk

最后整编刷机验证

make -j8
adb reboot bootloader
fastboot flashall -w

不可卸载系统应用

加入系统签名,仍以搜狗输入法为例。
先看下apk的签名,里面有Sohu字样信息

zzh@ubuntu:~/work/android/aosp/android-13.0.0_r40/vendor/redfin/thrird_apps$ keytool -printcert -jarfile SogouInput.apk 
Signer #1:

Signature:

Owner: CN=Sohu Wireless, OU=Sohu, O=Wireless, L=Beijing, ST=Beijing, C=CN
Issuer: CN=Sohu Wireless, OU=Sohu, O=Wireless, L=Beijing, ST=Beijing, C=CN
Serial number: 4aa5cf4d
Valid from: Tue Sep 08 11:28:13 CST 2009 until: Sat Jan 24 11:28:13 CST 2037
Certificate fingerprints:
	 SHA1: 3E:6B:D5:F0:9C:E6:F7:28:F0:84:1E:7E:DC:F0:D3:0F:F5:64:8C:D9
	 SHA256: 01:CB:5A:64:FE:B3:F6:16:9E:9D:BE:9C:43:04:B1:A7:FA:B1:2C:92:AF:68:14:DD:5F:98:92:AA:BC:01:F0:F3
Signature algorithm name: MD5withRSA (disabled)
Subject Public Key Algorithm: 1024-bit RSA key (weak)
Version: 1


Warning:
The certificate uses the MD5withRSA signature algorithm which is considered a security risk and is disabled.
The certificate uses a 1024-bit RSA key which is considered a security risk. This key size will be disabled in a future update.

修改Android.bp文件如下:

android_app_import {
    name: "SogouInput",
    apk: "SogouInput.apk",
    // 保留apk自己的签名
    // presigned: true,
    // 打开将放到对应分区目录的priv-app文件夹下
    privileged: true, 
    // 使用系统签名
    certificate: "platform",
    // 打开将放到system_ext分区
    // system_ext_specific: true, 
    // 打开将放到product分区
    // product_specific: true, 
    // 打开将放到vendor分区
    // proprietary: true,
    // device_specific: true
    dex_preopt: {
        enabled: false,
    },
}

编译完成后再看下编译出的apk的签名,可以看到里面变成了android默认的签名

zzh@ubuntu:~/work/android/aosp/android-13.0.0_r40$  keytool -printcert -jarfile out/target/product/redfin/system/priv-app/SogouInput/SogouInput.apk
Signer #1:

Signature:

Owner: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
Issuer: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
Serial number: b3998086d056cffa
Valid from: Wed Apr 16 06:40:50 CST 2008 until: Sun Sep 02 06:40:50 CST 2035
Certificate fingerprints:
	 SHA1: 27:19:6E:38:6B:87:5E:76:AD:F7:00:E7:EA:84:E4:C6:EE:E3:3D:FA
	 SHA256: C8:A2:E9:BC:CF:59:7C:2F:B6:DC:66:BE:E2:93:FC:13:F2:FC:47:EC:77:BC:6B:2B:0D:52:C1:1F:51:19:2A:B8
Signature algorithm name: MD5withRSA (disabled)
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3

priv-app

将应用内置到/system/priv-app目录时,有个特殊情况,就是要配置相应权限,否则会无法开机。
还以搜狗输入法为例,Android.bp如下:

// vendor/redfin/thrird_apps/Android.bp
android_app_import {
    name: "SogouInput",
    apk: "SogouInput.apk",
    // 打开将放到/system/priv-app文件夹下
    privileged: true, 
    // 使用系统签名
    certificate: "platform",
    dex_preopt: {
        enabled: false,
    },
}

在编译之前,我们先把ro.control_privapp_permissions设置为log,这样的话即使没有配置权限也能开机,但是会将缺少的权限配置打印出来,我们根据日志加入到系统对应的配置文件就可以了。

// vendor/redfin/thrird_apps/preinstall_apps.mk
adb root;adb remount
adb pull vendor/build.prop
将build.prop文件里的ro.control_privapp_permissions的值改为log
ro.control_privapp_permissions=log
adb push build.prop /vendor/
adb reboot

如上修改后,编译SogouInput apk push到系统目录然后重启。

make SogouInput
adb root;adb remount
adb push out/target/product/redfin/system/priv-app/SogouInput/ /system/priv-app/
adb shell sync
adb reboot

开机后过滤如下开机日志

adb logcat|grep priv

10-14 22:17:26.794  1676  1676 W PackageManager: Privileged permission android.permission.READ_LOGS for package com.sohu.inputmethod.sogou (/system/priv-app/SogouInput) not in privapp-permissions allowlist
10-14 22:17:26.794  1676  1676 W PackageManager: Privileged permission android.permission.CLEAR_APP_CACHE for package com.sohu.inputmethod.sogou (/system/priv-app/SogouInput) not in privapp-permissions allowlist
10-14 22:17:26.794  1676  1676 W PackageManager: Privileged permission android.permission.PACKAGE_USAGE_STATS for package com.sohu.inputmethod.sogou (/system/priv-app/SogouInput) not in privapp-permissions allowlist

从如上日志中可看到提示有三个权限没有加到配置文件,我们加一下

// privapp-permissions.xml 文件只有在与特权应用位于同一分区时才能授予或拒绝授予该应用权限。
// 例如,如果 /vendor 分区上的应用请求特许权限,则只能由同样位于 /vendor 上的 privapp-permissions.xml
// 文件来同意或拒绝该请求。
// frameworks/base/data/etc/privapp-permissions-platform.xml
// 加入如下内容
<privapp-permissions package="com.sohu.inputmethod.sogou">
    <permission name="android.permission.READ_LOGS"/>
    <permission name="android.permission.CLEAR_APP_CACHE"/>
    <permission name="android.permission.PACKAGE_USAGE_STATS"/>
</privapp-permissions>

// 最后记得将ro.control_privapp_permissions还原为enforce

还有另一种方式来获取上述权限配置的修改方法,如下:
注意先把上面的修改还原

source build/envsetup.sh
lunch aosp_redfin-userdebug
make

编译成功后执行如下脚本:
development/tools/privapp_permissions/privapp_permissions.py -p system
没问题的话会输出所有system分区的特权名单,在最后可以看到有如下内容:
<privapp-permissions package="com.sohu.inputmethod.sogou">
    <permission name="android.permission.CLEAR_APP_CACHE"/>
    <permission name="android.permission.PACKAGE_USAGE_STATS"/>
    <permission name="android.permission.READ_LOGS"/>
</privapp-permissions>

将上述内容加到frameworks/base/data/etc/privapp-permissions-platform.xml即可

最后编译刷机验证即可。

最后的建议,一般像这种三方apk都保留原来的签名即可,也不需要内置到priv-app目录,优化也关闭。如果内置中遇到问题可以尝试对比这三项修改即可。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZH的Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值