使用git时使用Gradle自动应用程序签名
令人惊讶的是,有这么多复杂的方法可以做到这一点。这是我自己的方法,我试图坚持谷歌自己的建议。但是,他们的解释并不完全清楚,所以我将详细描述Linux的过程。
描述:
自动签名应用程序的默认谷歌指令
在构建过程中,不保留密码和签名文件
在你的应用程序开发(GIT)路径中,是相当模糊的。这里是
详细说明了如何做到这一点。
最初的假设:
你有一个名为“MyApp”的应用程序,在以下路径给出的目录中:
$ HOME / / mydev / MyApp项目。但是,使用MyApp目录和
由GIT控制。
问题
我们显然不希望在任何地方有我们的签名或密码文件
GIT控制的目录,即使我们很会使用。gitignore等,它仍然太冒险,容易犯错误。因此,我们希望我们的密钥存储库和签名文件在外部。
解决方案
我们需要做三件事:
创建一个Android Studio使用的密码文件
创建签名密钥文件
编辑模块构建。Gradle文件使用(1)和(2)。
在本例中,我们将这两个文件命名为:
keystore.properties
MyApp-release-key.jks
我们可以把这两个文件放在这里:
cd $HOME/projects/mydev/
(1)创建keystore密码文件
第一个文件包含明文密码;和(2)中释放密钥文件的路径。从填写这个开始,因为它将使下一步的复制粘贴操作更容易。
cd $HOME/projects/mydev/
编辑密钥存储库。属性,所以它的内容是:
storePassword=myStorePassword
keyPassword=mykeyPassword
keyAlias=myKeyAlias
storeFile=myStoreFileLocation
这里唯一棘手的部分是myStoreFileLocation。这是从模块构建中看到的路径。Gradle文件。这通常意味着路径类似于:$HOME/projects/mydev/MyApp/app/build.gradle。为了指向myapp -release-key。jks
文件,我们需要在这里放的是:
. . / . . / . . / MyApp-release-key.jks
这里,我们还为键选择了“myapp”别名。然后最终文件应该是这样的:
storePassword=myStorePassword
keyPassword=mykeyPassword
keyAlias=myapp
storeFile=../../../MyApp-release-key.jks
(2)创建签名文件
第二个文件在创建签名密钥时自动生成。
如果你没有其他应用程序,这是你唯一的密钥库,然后创建文件:
cd $HOME/projects/mydev/
keytool -genkeypair -v -keystore MyApp-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias myapp
这将要求您输入两个密码和一堆信息。(与Android Studio相同。)现在复制/粘贴您之前选择的密码。
(3)编辑gradle模块。构建文件以使用上面的内容
以下部分需要出现在你的应用/模块的Gradle构建文件中。首先,在android{}块的外面和前面添加以下行。
//def keystorePropertiesFile = rootProject.file("$HOME/.android/keystore.properties")
def keystorePropertiesFile = rootProject.file("../../keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
然后,在android{}块中添加:
android {
...
defaultConfig { ... }
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
// Tell Gradle to sign your APK
buildTypes {
release {
signingConfig signingConfigs.release
...
}
}
}
现在从shell,你可以重建你的应用程序:
cd $HOME/projects/mydev/MyApp/app/
./gradlew clean build
这应该生成一个正确签名的应用程序,可以在谷歌播放中使用。
更新:2019-04-02
最新版本的keytool和一些东西告诉你,你应该使用一个基于PKCS12的keyfile,而不是我上面使用的原始/默认的keyfile。然后他们继续告诉你,你应该转换到新的开放PKCS12格式。然而,似乎Android开发工具还没有完全准备好,因为如果你这样做了,你会得到以下奇怪的错误:
com.android.ide.common.signing.KeytoolException: read key失败
“F:\XXX\XXX.”获取键失败:给定的最终块没有
适当的衬垫。如果在过程中使用了错误的密钥,就会出现这种问题
解密。
所以不要使用转换后的密钥!