解决 android 获取系统权限的问题
1.最近公司需求在应用安卓板子上实现一系列操作,如灭屏亮屏加载刷新webview等一些列简单操作,有几个功能如关机,重启,更改系统时间操作需要获得系统权限才能实现。
主要记录在获取系统权限上遇到的一些问题。。。
2,首先需要在 AndroidManifest.xml 文件中添加属性 android:sharedUserId="android.uid.system"
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system" >
3.现在编译apk文件是不能用的,需要系统的platform重新给apk签名
这个时候就需要几个相关源码文件platform.pk8和platform.x509.pem和signapk.jar
因为暂时没拿到公司给安卓板子,就先在真机上测试。
4.在Android社区找源代码
https://www.androidos.net.cn/sourcecode
因为真机Android版本是6.0的,所以就在里面找了相关的源文件(其实是错误的做法,刚开始都没注意,因为每个品牌厂家系统签名都是不同的,这个只能在Google官方安卓模拟器上才能用,真是傻掉。。。。)如果有系统的**文件就不用找这个了,参考一下。
三个文件的位置
platform.pk8 platform.x509.pem
signapk.jar
5.接下来就进行签名了,将三个文件和apk放在同一个目录
用法 java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk
因为真机是华为的所以签完名的apk也是不能用的,Google官方安卓模拟器上测试过可以用
因为后面拿到firefly板子,无意间在Github上找到相关系统签名**文件,firefly官网应该也有但没找到。。。
6.因为每次编译出的Apk都要这样签名所以很麻烦,所以可以在linux环境下去生成系统签名。
需要一个文件keytool-importkeypair 下载地址https://github.com/getfatday/keytool-importkeypair
将keytool-importkeypair,platform.x509.pem,platform.pk8,mysign.jks(签名文件) 放在同一个目录
./keytool-importkeypair -k [jks文件名] -p [jks的密码] -pk8 platform.pk8 -cert platform.x509.pem -alias [jks的别名]
然后配置jks路径,gradle(app)
与defaultConfig同级
signingConfigs { release { storeFile file("../sign/mysign.jks") storePassword '123456789' keyAlias 'mysign' keyPassword '123456789' } debug { storeFile file("../sign/mysign.jks") storePassword '123456789' keyAlias 'mysign' keyPassword '123456789' }
}
配置好后直接运行就可以安装到目标机上了