我正在try 设置签名过程,以便将密钥库密码和密钥密码are not存储在项目的build.gradle文件中.

目前,我在build.gradle人中有以下几项:

android {
    ...
    signingConfigs {
        release {
            storeFile file("my.keystore")
            storePassword "store_password"
            keyAlias "my_key_alias"
            keyPassword "key_password"
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release            
        }
    }
}

它工作得非常好,但我把storePasswordkeyPassword的值放在了我的存储库中.我也不想把storeFilekeyAlias放在那里.

有没有办法更改build.gradle,使其从某些外部来源(如仅驻留在我的计算机上的文件)获取密码?

当然,修改后的build.gradle应该可以在任何其他计算机上使用(即使该计算机无法访问密码).

我使用的是Android Studio和Mac OS X Maverics,如果有必要的话.

推荐答案

Groovy的好处在于,您可以自由地混合Java代码,而且使用java.util.Properties在键/值文件中读取代码非常容易.也许有一种更简单的方法可以使用惯用的Groovy,但Java仍然非常简单.

创建一个keystore.properties文件(在本例中,位于settings.gradle旁边的项目根目录中,不过您可以将其放置在您喜欢的任何位置:

storePassword=...
keyPassword=...
keyAlias=...
storeFile=...

将此添加到您的build.gradle:

allprojects {
    afterEvaluate { project ->
        def propsFile = rootProject.file('keystore.properties')
        def configName = 'release'

        if (propsFile.exists() && android.signingConfigs.hasProperty(configName)) {
            def props = new Properties()
            props.load(new FileInputStream(propsFile))
            android.signingConfigs[configName].storeFile = file(props['storeFile'])
            android.signingConfigs[configName].storePassword = props['storePassword']
            android.signingConfigs[configName].keyAlias = props['keyAlias']
            android.signingConfigs[configName].keyPassword = props['keyPassword']
        }
    }
}

Android相关问答推荐

Android 14上的慢速意图广播交付

如何防止在Android Studio中设置kotlin断点时优化变量

在 Bash 脚本中使用 XMLLINT 解析 XML 单元测试文件,并将其放入数组中以表示成功和失败

我需要在房间数据库中保留旧的自动迁移行吗?

为什么 Android Studio 中的 theme.xml 目录没有任何原色

具有管理员权限的 Kotlin 中的多用户系统

NFC getNdefMessage 在 Android 13 上写入标签后返回 null

Android Studio:按下前缀键:切换 Logcat 格式

如何在 React Native 下载文件之前打开文件管理器并 Select 一个目录

在移动设备上看到时如何增加 PasswordField 文本?

如何只允许拖动 BottomSheetScaffold 中 BottomContent 的 SheetPeek 的一部分?

观察软键盘可见性,打开/关闭 Jetpack Compose

Jetpack Compose Arc 进度条动画(如何重启动画)

为什么按钮没有拉伸到屏幕边缘?

Android WebView 没有在第一次页面完成时从本地存储读取数据?

可扩展性 Qt 5.15 Android

react-native-config 在发布版本中不起作用

如何使伴奏导航 BottomSheet 完全展开?

需要一些关于开发者控制台上的 beta/alpha 测试的说明

了解 Canvas 和 Surface 概念