加固后重新打包
jarsigner -verbose –keystore 指定数字证书存储路径 -signedjar 签名后的apk包 未签名的 apk包 数字证书别名
jarsigner -verbose -keystore key.jks -signedjar mifi.apk mifi_3.1.0_2017-07-05_mifi.encrypted.apk default
复制代码
获取keystore数字证书别名
keytool -list -v -keystore keystoreName -storepass keystorePassword
复制代码
创建新的KeyStore
keytool -genkey -v -keystore {FILENAME.keystore} -alias {ALIAS} -keyalg RSA -validity {DURATION}
复制代码
- {FILENAME.keystore} 为生成的KeyStore的文件名
- {ALIAS} 为生成的KeyStore文件的别名
- {DURATION} 为该KeyStore文件的过期时间
获取KeyStore指纹信息
keytool -v -list -keystore {FILENAME.keystore} -alias {ALIAS} -keypass {KEYPASSWD} -storepass {STOREPASSWD}
复制代码
- {FILENAME.keystore}为keystore文件名
- {ALIAS}为KeyStore的别名
- {KEYPASSWD}为KeyStore的密钥口令
- {STOREPASSWD}为KeyStore的密钥库口令
签名信息写入Gradle脚本
在Android Stduio中打开主moudle的build.gradle文件,在其中的android闭包中键入如下内容:
signingConfigs {
release {
keyAlias 'test'
keyPassword 'android'
storeFile file('./keystore/test.keystore')
storePassword 'android'
}
debug {
keyAlias 'test'
keyPassword 'android'
storeFile file('./keystore/test.keystore')
storePassword 'android'
}
}
复制代码
- keyAlias keystore的alias
- keyPassword KeyStore的密钥口令
- storeFile为KeyStore的文件存放路径,可以为相对或者绝对路径,此处使用的为相对路径
- storePassword为KeyStore的密钥库口令
gradlew assembleRelease
复制代码
项目将会使用我们上面定义的test.keystore密钥库文件签名打包项目为Release发布版。
签名信息写入配置文件
虽然上面的把签名信息写入gradle脚本中比较方便省事,但是却在密钥文件的密钥密码泄露问题,任何能够看到此Moudle的build.gradle脚本的人都可以拿到KeyStore文件及其对应的密钥口令,可能会导致一些安全风险,我们可以进行文件的配置。
在主moudle的build.gradle脚本的android闭包中:
applicationVariants.all {
if (project.hasProperty('keyAlias') && project.hasProperty('storeFile') &&
project.hasProperty('storePassword') &&
project.hasProperty('keyPassword')) {
android.signingConfigs.release.keyAlias = keyAlias
android.signingConfigs.release.storeFile = file(storeFile)
android.signingConfigs.release.storePassword = storePassword
android.signingConfigs.release.keyPassword = keyPassword
} else {
android.buildTypes.release.signingConfig = null
}
}
复制代码
其中Variants翻译中文为变种,applicationVariants.all属性含义为app plugin下所有的Variant的配置信息,可以将其看作为一个总览,可以方便的访问所有对象。
我们在其中通过project.hasProperty读取项目中的配置,并将其动态的赋值给signingConfigs.release下的相关属性。
然后我们通过在gradle.properties或者其它项目中能够被gradle的文件中定义以上属性并赋值即可。
storeFile=./keystore/test.keystore
storePassword=android
keyAlias=test
keyPassword=android
复制代码
这样我们在项目团队协作时,将gradle.properties文件忽略即可。