Android 在不公开密钥库密码的情况下签署APK
示例
您可以build.gradle使用以下属性定义签名配置以对文件中的apk进行签名:
storeFile:密钥库文件
storePassword:密钥库密码
keyAlias:关键别名
keyPassword:密钥别名密码
在许多情况下,您可能需要避免build.gradle文件中出现此类信息。
方法A:使用keystore.properties文件配置发布签名
可以配置您的应用程序,build.gradle以便它将从的属性文件中读取您的签名配置信息keystore.properties。
这样设置签名是有益的,因为:
您的签名配置信息与build.gradle文件分开
您无需在签名过程中进行干预即可为密钥库文件提供密码
您可以轻松地keystore.properties从版本控制中排除文件
首先,keystore.properties在项目的根目录中创建一个名为的文件,其内容如下(用您自己的值替换值):
storeFile=keystore.jks storePassword=storePassword keyAlias=keyAlias keyPassword=keyPassword
现在,在您应用的build.gradle文件中,signingConfigs按如下所示设置该块:
android { ... signingConfigs { release { def propsFile = rootProject.file('keystore.properties') if (propsFile.exists()) { def props = new Properties() props.load(new FileInputStream(propsFile)) storeFile = file(props['storeFile']) storePassword = props['storePassword'] keyAlias = props['keyAlias'] keyPassword = props['keyPassword'] } } } }
这实际上就是所有内容,但不要忘记将您的密钥库文件和keystore.properties文件都从版本控制中排除。
需要注意的几件事:
文件中storeFile指定的路径keystore.properties应相对于您应用的build.gradle文件。本示例假定密钥库文件与应用程序build.gradle文件位于同一目录中。
本示例的keystore.properties文件位于项目的根目录中。如果将其放在其他位置,请确保将值更改为rootProject.file('keystore.properties')相对于项目根目录的位置。
方法B:通过使用环境变量
没有属性文件也可以实现相同的目的,这使得密码更难找到:
android { signingConfigs { release { storeFile file('/your/keystore/location/key') keyAlias 'your_alias' String ps = System.getenv("ps") if (ps == null) { throw new GradleException('missing ps env variable') } keyPassword ps storePassword ps } }
该"ps"环境变量可以是全球性的,但一个更安全的方法可以将其添加到只有AndroidStudio中的壳。
在Linux中,可以通过编辑AndroidStudio的DesktopEntry
Exec=sh -c "export ps=myPassword123 ; /path/to/studio.sh"
您可以在本主题中找到更多详细信息。