【Android】Android 签名相关问题

加固后重新打包

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文件忽略即可。

微信获取签名

链接

你可能感兴趣的:(【Android】Android 签名相关问题)