Android 开源应用安全构建配置
第一步:创建两个密钥库
第二步。创建两个属性文件
第三步:添加脚本
TL;DR 代码库:https://github.com/IvanShafran/android-open-source-app-signing
默认情况下,Android 应用会生成一个调试版本,其中 APK 文件会自动使用调试密钥库进行签名。但对于发布版本,您必须使用手动创建的密钥库进行签名。
如果你开发一款开源应用,出于安全考虑,你不能将密钥库与代码放在一起。你可以轻松地在 `.gitignore` 文件中将其排除,但这样一来,你的贡献者就无法构建发布版本。这会使开源开发变得复杂,因为有些 bug 只能在发布版本中发现。此外,你也无法直接从代码仓库运行发布版本的 UI 测试。让我们来解决这个问题!
第一步:创建两个密钥库
创建一个用于生产环境构建的密钥库,并使用强密码。再创建一个供贡献者使用的密钥库,密码可以任意设置。将这两个密钥库都放在主应用程序模块文件夹中。默认情况下,创建的项目文件夹名为“app”。
此时,添加production.jks到.gitignore。
第二步。创建两个属性文件
按照以下说明,在同一文件夹中创建两个属性文件。
# Sign key alias for contributors.jks
releaseSignKeyAlias=key
# Sign key password for contributors.jks
releaseSignKeyPassword=password
# Path to contributors.jks
releaseStoreFilePath=./contributors.jks
# Keystore password for contributors.jks
releaseStorePassword=password
另外,创建 production.properties 文件,其中包含生产密钥和密码。
此时,添加production.properties到.gitignore。
第三步:添加脚本
将下方列出的脚本添加到同一文件夹,并在 build.gradle 文件中应用它。该脚本会检查文件夹中是否存在生产环境属性文件,如果存在则使用生产环境密钥库,否则使用贡献者密钥库。就是这么简单 :)
别忘了将 production.jks 和 production.properties 添加到 .gitignore 中。
settings.gradle:
def propertiesFilename = "production.properties"
if (!project.file(propertiesFilename).exists()) {
propertiesFilename = "contributors.properties"
}
def signingProperties = new Properties()
signingProperties.load(new FileInputStream(file(propertiesFilename)))
android {
signingConfigs {
release {
keyAlias signingProperties.releaseSignKeyAlias
keyPassword signingProperties.releaseSignKeyPassword
storeFile file(signingProperties.releaseStoreFilePath)
storePassword signingProperties.releaseStorePassword
}
}
}
build.gradle:
...
apply from: 'signing.gradle'
...
android {
...
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
完整示例请见: https://github.com/IvanShafran/android-open-source-app-signing
文章来源:https://dev.to/ivanshafran/android-open-source-app-secure-build-config-38gi


