だから私はすべてのantビルドスクリプトをgradleに変換しようとしています。gradle.propertiesファイルで署名を構成する方法を除いて、それに関するすべてのリソースとドキュメントを十分に見つけることができました。
ant.propertiesは次のようにします。
key.alias=alias
key.store.password=password
key.store=keystore.file
key.alias.password=password
しかし、どのように私はgradleで同じことをしますか?
gradle.propertiesファイルには、ant.propertiesファイルと同じ値を格納します。keyAlias
のような、より単純な名前を付ける必要があると思います例えば。確かにドットを削除するだけです。
次に、build.gradleファイルで次のようにします:
Android {
signingConfigs {
release
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
if (project.hasProperty('keyAlias')) {
Android.signingConfigs.release.keyAlias = keyAlias
}
// do the same for the three other properties
// ...
この方法でこれを行うと、gradle.propertiesファイルがあるかどうかに関係なく、コンピューター上でビルドする柔軟性が得られます。 「keyalias」プロパティは、存在する場合にのみ読み取られるため、存在しない場合でもコードは失敗しません。
すべてのプロパティがある場合、signingConfigs.release
は完全に構成され、ビルド中にAPKに署名するために使用されます。存在しない場合、APKはビルドされますが署名されません。
下記でできました。 @Xavの解決策を試しましたが、プロパティを設定していなかった場合、リリースの検証ステップ中に問題が発生しました。フレームワークが大幅に変更されたため、これは最近の変更だと思います。最後にelse
を使用すると、リリースのsigningConfigを強制的にnullにできることを指摘して支援したいと思いました。これで、gradle.propertiesの存在に応じて、署名付きリリースと署名なしリリースの両方が発生します。
signingConfigs {
release {
keyAlias = "blue_sleep"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
if (project.hasProperty('storeFile') &&
project.hasProperty('storePassword') &&
project.hasProperty('keyPassword')) {
Android.signingConfigs.release.storeFile = file(storeFile)
Android.signingConfigs.release.storePassword = storePassword
Android.signingConfigs.release.keyPassword = keyPassword
} else {
Android.buildTypes.release.signingConfig = null
}
その他の便利なメモとして、gradle.propertiesを〜/ .gradle /に配置できます。プロジェクトフォルダーに配置したくない場合は、また、次のようにstoreFile
プロパティを絶対パスで設定することもできます:storePath=file:///Users/nick/Dropbox/mycompany.keystore
Eugensソリューションに触発されて、少し短い分散を思いつきました。コードはAndroid {}タスク構成に含まれている必要があります。
File signFile = rootProject.file('sign.properties')
if (signFile.exists()) {
Properties p = new Properties()
p.load(new FileInputStream(signFile))
signingConfigs {
releaseConfig {
storeFile file(p.storeFile)
storePassword p.storePassword
keyAlias p.keyAlias
keyPassword p.keyPassword
}
}
buildTypes.release.signingConfig signingConfigs.releaseConfig
}
Gradle 1.9では、プロパティを定義できません。現在、extにのみ追加できます。以前の回答への小さな追加:
signingConfigs {
debug {
project.ext.loadSign = false
}
release {
project.ext.loadSign = true
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
signingConfig signingConfigs.release
}
}
if ( project.ext.loadSign ) {
Properties p = new Properties ()
p.load ( new FileInputStream ( rootProject.file ( 'keys/sign.properties' ) ) )
Android.signingConfigs.release.storeFile file ( p.file )
Android.signingConfigs.release.storePassword p.password
Android.signingConfigs.release.keyAlias p.alias
Android.signingConfigs.release.keyPassword p.keyPassword
}
私の要件は、キーストアがなければ誰でも適切にビルドできる必要があることでした。これは私が見つけることができる最もきれいな方法です:
Android {
signingConfigs {
release //Filled in readSigningConfigIfAvailable()
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-xyz.txt'
readSigningConfigIfAvailable()
}
}
}
private void readSigningConfigIfAvailable() {
if (hasAllSigningProperties()) {
Android.signingConfigs.release.storeFile = file(keystore_path)
Android.signingConfigs.release.storePassword = keystore_password
Android.signingConfigs.release.keyAlias = key_alias
Android.signingConfigs.release.keyPassword = key_password
Android.buildTypes.release.signingConfig = Android.signingConfigs.release
} else {
Android.buildTypes.release.signingConfig = null
}
}
private boolean hasAllSigningProperties() {
(hasProperty('keystore_path')
&& hasProperty('keystore_password')
&& hasProperty('key_alias')
&& hasProperty('key_password'))
}