Android构建系统级应用静默授权,静默安装

背景

基于定制平板系统开发应用,能获得安卓源码层的支持。
Android8.1系统。

目标

  • 默认获取所需全部权限,不再弹窗询问授权。
  • 静默升级安装新版本。

实现

获取系统应用权限

通过sharedUserId这个配置,将当前应用进程配置为系统应用进程,可获取所有权限。

原理

通过Shared User id,拥有同一个UserId的多个APK可以配置成运行在同一个进程中,所以默认就是可以互相访问任意数据,同时可以访问其他APK的数据目录下的数据库和文件,就像访问本程序的数据一样。

为了防止其他应用拿到sharedUserId并滥用,Android系统限制了相同的userId情况下,必须要使用同样的签名才能安装在同一设备上。故,如果要设置为系统共享进程,必须要和系统应用签名一致。

系统给应用签名的逻辑:

系统源码中build/target/product/security目录中有四组默认签名供Android.mk在编译APK使用,通过指定LOCAL_CERTIFICATE字段来实现,分别是:

  • testkey:普通APK,默认情况下使用。
  • platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system。
  • shared:该APK需要和home/contacts进程共享数据。
  • media:该APK是media/download系统中的一环

普通应用则使用testkey,若要为系统应用,可指定为platform

原理及介绍参考该文章:Android的权限机制之—— “沙箱”机制sharedUserId和签名

实现

参考该文章实现:Android apk 系统签名

1. 前提:
应用签名不能是自定义签名,需要是系统签名。签名文件需要找系统提供厂商提供,包含platform.pk8platform.x509.pemsignapk.jar等几个文件,如果这一步不能提供,那通过配置sharedUserId的方式无望。

2、配置sharedUserId
AndroidManifest.xml中的manifest节点增加:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.moore.systemapk"
    android:sharedUserId="android.uid.system">
</manifest>

3、签名
方式一:
在系统源码层,将应用Android.mk中的LOCAL_CERTIFICATE配置为platform,即对应原理中的四个默认类型中的system应用类型

方式二:
打好未签名的apk包,通过命令方式,对应用进行签名。
java -jar signapk.jar platform.x509.pem platform.pk8 unsigned.apk signed.apk
把你对apk名和路径,替换unsigned.apksigned.ap

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值