macOS 中使用钥匙串保存密码

编辑于2019年03月27日

通常不建议在配置文件中存储密码。在 macOS 中我们可以使用内置的钥匙串应用来存储密码,可以方便地从终端访问。

在这个示例中,我们将使用它来存储用于签名 Android 应用程序的密钥库的密码。

在钥匙串中保存密码

  1. 打开钥匙串应用。
  2. 点击 “+” 按钮,添加新密码。
  3. 输入钥匙串项名称(任意),账户名称(任意)以及使用 keytool 创建密钥时使用的密码,然后点击添加按钮即可。

keychain

从终端访问密码

在终端输入下面的命令:

$ security find-generic-password -s android_keystore -w

输入完成后,添加电脑的密码可以看到保存在钥匙串中的密码。

password

在 Gradle 中访问密码

将以下内容添加到 build.gradle 的开头:

// account:添加钥匙时的账户名;keyChain:钥匙项名
def getPassword(String account, String keyChain) {
   def stdout = new ByteArrayOutputStream()
   def stderr = new ByteArrayOutputStream()
   exec {
       commandLine 'security', '-q', 'find-generic-password', '-a', account, '-s', keyChain, '-w'
       standardOutput = stdout
       errorOutput = stderr
       ignoreExitValue true
   }
   stdout.toString().trim()
}

然后在需要访问密码的通过 getPassword 获取密码:

// 获取密码
def keystorePassword = getPassword("android_keystore","android_keystore")

android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            storeFile file(MYAPP_RELEASE_STORE_FILE)
            storePassword keystorePassword // 使用获取到的密码
            keyAlias MYAPP_RELEASE_KEY_ALIAS
            keyPassword keystorePassword // 使用获取到的密码
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}