发布于 2026-01-06 5 阅读
0

Android 开源应用安全构建配置 第一步:创建两个密钥库 第二步:创建两个属性文件 第三步:添加脚本

Android 开源应用安全构建配置

第一步:创建两个密钥库

第二步。创建两个属性文件

第三步:添加脚本

TL;DR 代码库https://github.com/IvanShafran/android-open-source-app-signing

默认情况下,Android 应用会生成一个调试版本,其中 APK 文件会自动使用调试密钥库进行签名。但对于发布版本,您必须使用手动创建的密钥库进行签名。

如果你开发一款开源应用,出于安全考虑,你不能将密钥库与代码放在一起。你可以轻松地在 `.gitignore` 文件中将其排除,但这样一来,你的贡献者就无法构建发布版本。这会使开源开发变得复杂,因为有些 bug 只能在发布版本中发现。此外,你也无法直接从代码仓库运行发布版本的 UI 测试。让我们来解决这个问题!

第一步:创建两个密钥库

创建一个用于生产环境构建的密钥库,并使用强密码。再创建一个供贡献者使用的密钥库,密码可以任意设置。将这两个密钥库都放在主应用程序模块文件夹中。默认情况下,创建的项目文件夹名为“app”。

如何生成密钥库

两个文件:production.jks 和 contributor.jks

此时,添加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


Enter fullscreen mode Exit fullscreen mode

另外,创建 production.properties 文件,其中包含生产密钥和密码。

两个文件:contributor.properties 和 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
        }
    }
}


Enter fullscreen mode Exit fullscreen mode

build.gradle:



...
apply from: 'signing.gradle'
...
android {
  ...
  buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}


Enter fullscreen mode Exit fullscreen mode

突出显示了两个文件:build.gradle 和 settings.gradle

完整示例请见: https://github.com/IvanShafran/android-open-source-app-signing

文章来源:https://dev.to/ivanshafran/android-open-source-app-secure-build-config-38gi