web-dev-qa-db-ja.com

Androidのgradle.propertiesでの署名のリリース

だから私はすべてのantビルドスクリプトをgradleに変換しようとしています。gradle.propertiesファイルで署名を構成する方法を除いて、それに関するすべてのリソースとドキュメントを十分に見つけることができました。

ant.propertiesは次のようにします。

key.alias=alias
key.store.password=password
key.store=keystore.file
key.alias.password=password

しかし、どのように私はgradleで同じことをしますか?

19
Gnathonic

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はビルドされますが署名されません。

33
Xavier Ducrohet

下記でできました。 @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

22
GrkEngineer

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
}
5
Moritz

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
}
3
Eugen Martynov
2
Stan Sidel

私の要件は、キーストアがなければ誰でも適切にビルドできる必要があることでした。これは私が見つけることができる最もきれいな方法です:

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'))
}
0