首先下载keytool工具,地址
https://github.com/getfatday/keytool-importkeypair
我的是放在桌面下,目录如下。
C:\Users\lei\Desktop\keytool-importkeypair-master\keytool-importkeypair-master
由于这个工具需要在linux中运行,但是我没有那个环境,因此使用MinGW代替。
打开 D:\MinGW\msys\1.0目录下的msys.bat,进入环境(类似win中的cmd)。
然后输入命令进入keytool-importkeypair目录下。
cd C:/Users/lei/Desktop/keytool-importkeypair-master/keytool-importkeypair-master
注意:这里命令中的文件目录用的是反斜杠不是斜杠。用的是斜杠的话在MinGW环境中就无法进入目录。会提示No such file or directory。
windows:
C:\Users\lei\Desktop\keytool-importkeypair-master\keytool-importkeypair-master
MinGW:
C:/Users/lei/Desktop/keytool-importkeypair-master/keytool-importkeypair-master
如下图所示,进入了keytool-importkeypair-master中。
然后将platform.x509.pem和platform.pk8 copy至keytool-importkeypair-master中(platform.x509.pem和platform.pk8就是编译系统的时候security文件夹下的文件,需要厂商提供)。
至此,准备工作完成,可以生成keystore文件了。
在MinGw中执行命令。
./keytool-importkeypair -k ./platform.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform
-k 表示要生成的 keystore 文件的名字,这里命名为 platform.keystore
-p 表示要生成的 keystore 的密码,这里是 android
-pk8 表示要导入的 platform.pk8 文件
-cert 表示要导入的platform.x509.pem
-alias 表示给生成的 platform.keystore 取一个别名,这是命名为 platform
然后platform.keystore文件就生成了。
这个文件就是android studio需要的签名文件,稍后在build.gradle中进行配置。
我把platform.keystore文件放到C:\test目录下了。因此storeFile file是C:\test\platform.keystore。
android {
................
defaultConfig {
................
}
signingConfigs {
debug {
storeFile file('C:\\test\\platform.keystore')
storePassword 'android'
keyAlias 'platform'
keyPassword 'android'
}
release {
storeFile file('C:\\test\\platform.keystore')
storePassword 'android'
keyAlias 'platform'
keyPassword 'android'
}
}
buildTypes {
................
}
}
dependencies {
..............
}
注意:signingConfigs 必须放在buildTypes 之前,否则在后续设置了buildTypes 之后,gradle会报错。
Could not get unknown property 'release' for SigningConfig container
然后还需要在project structure中配置一下buildTypes,这样run app后安装的就是带签名的。
设置buildTypes中debug的signing config为debug,release的signing config为release。
这样就不用每次使用编译生成apk然后使用signapk.jar生成带系统签名的apk了。
最后记得在AndroidManifest.xml文件中的对应位置加上 android:sharedUserId="android.uid.system"。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example......"
android:sharedUserId="android.uid.system">
.....
.....
</manifest>
这样就是系统级权限的apk了。
参考链接:
让Android Studio支持系统签名(证书)
https://www.jianshu.com/p/47265c8899b5
编译错误:Could not get unknown property 'release' for SigningConfig container