为了获得底层隐藏API和更多系统权限,往往需要将APP设置为系统APP。
总体需要如下几步:
添加JAR包
调用被Google隐藏起来的API
使用系统级别的API和权限
添加系统签名
使开发的App能运行在目标机上
具体步骤如下:
1、正常建立工程,app 需要使用系统的权限 在 AndroidManifest.xml 中声明了系统全下申明了系统权限android:sharedUserId=“android.uid.system”
2、添加系统完整JAR包,具体参考我的另外两篇博客:
Android framework编译出来的framework.jar和classes.jar的位置
Androidstudio中添加jar包
3、找到平台签名文件“platform.pk8”和“platform.x509.pem”
文件位置 android/build/target/product/security/
如果硬件厂商进行过二次开发,也会放在其它地方,例如:
./device/fsl/common/security/platform.pk8
./device/digi/common/security/platform.pk8
注:作者就曾经遇到过系统中有多个厂商的签名文件:GOOGLE的、CPU厂商的、开发板厂商的,乱成一锅粥,试了多次才找到对的。这步注意一下,一般用CPU厂商的。
4、下载keytool-importkeypair https://github.com/getfatday/keytool-importkeypair
5、在LINUX下,将“platform.pk8”、“platform.x509.pem”、keytool-importkeypair放到一个目录下,执行命令:
./keytool-importkeypair -k setnet_key5.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias setnet_key5
将生成的setnet_key5拷贝到android studio的工程目录下。
例如我将其拷到工程目录下app下:
6、在Android工程中,将如下内容添加到app的build.gradle中便可。
signingConfigs {
release {
storeFile file("../app/setnet_key5.jks")
storePassword'123456'
keyAlias 'setnet_key5'
keyPassword '123456'
}
debug {
storeFile file("../app/setnet_key5.jks")
storePassword '123456'
keyAlias 'setnet_key5'
keyPassword '123456'
}
}
内容和defaultConfigs是同级的,以及如果是在Ubuntu环境下,你的jks如果是放在home主目录下的。请用你的/home/username代替~,不然可能会找不到jks文件。
7、同步一下文件,清除一下以前编译的东西(build->clean project),重新编译、运行。