1.背景
在开发过程中,往往会涉及到APP
需要调用系统功能,如修改系统时间,系统关机重启,静默安装升级卸载应用等,这个时候需要给APP
增加权限。其中一种方法就是在应用程序的AndroidManifest.xml
中的manifest
节点中加入android:sharedUserId="android.uid.system"
这个属性。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="xxxx.xxx.xxxx"
android:sharedUserId="android.uid.system" >
</manifest>
通常,通过sharedUserId
给APK
配置UserId
之后,拥有相同UserId
的多个APK
可以配置成运行在同一个进程中。那么把程序的UID
配置成android.uid.system
,也就是让程序运行在系统进程中,这样就拥有了系统权限。
但是,添加这个权限之后,当前项目就不能通过Run等方法在设备上运行或者Debug了,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform key。因此需要给APK
进行系统签名。
2.系统签名
- 方法1
1)首先,APP
根据自己的.jks
签名文件正常打包,生成app_release.apk
。
2)然后准备系统的两个签名文件,在Android源码目录build/target/product/security
下。
platform.pk8
platform.x509.pem
再用Android提供的Signapk
工具来签名,signapk
的源代码是在build/tools/signapk
下,用法为signapk platform.x509.pem platform.pk8 input.apk output.apk
。
将以上准备的工具放到同一个文件夹下,然后将1)中生成的app-release.apk
拷贝到同一个目录下,如下图所示。
其中sigin--app-debug.bat
批处理里面的内容如下:
java -jar signapk.jar platform.x509.pem platform.pk8 app_release.apk app_release_sign.apk
pause
3)双击执行sigin--app-debug.bat
批处理文件,生成app-release_sign.apk
文件。然后将该apk
安装到对应设备中即可。
- 方法2
该方法是提前对自己的.jks
签名文件进行系统签名,然后APP
利用Android Studio打包的时候直接用进行了系统签名的.jks
进行打包。生成的app_release.apk
就可以直接进行安装,是更快捷的一种方式。
1)首先要准备keytool-importkeypair
工具,和签名所需的系统签名文件。
Keytool-importkeypair下载地址
2)还是方法1中的几个文件放到同一个目录下
不同的是,需要将提前生成的.jks
放入该目录,然后右键git bash
(windows平台下暂时只知道git bash能执行成功)执行./keytool-importkeypair -k app.jks -p yourjkspassword -pk8 platform.pk8 -cert platform.x509.pem -alias youralias
,将上述命令中需要修改的地方替换成自己的信息。执行成功后会生成一个新的app.jks
覆盖掉旧的app.jks
文件,然后Android Studio打包的时候就用这个新的app.jks
去打包,打包成功后,安装即可。
\