A resposta aceita usa um arquivo para controlar qual keystore usar para assinar o APK que reside na mesma pasta raiz do projeto. Quando usamos vcs como Git , pode ser uma coisa ruim quando esquecemos de adicionar o arquivo de propriedades à lista de ignorados. Porque divulgaremos nossa senha para o mundo. Os problemas ainda persistem.
Em vez de criar o arquivo de propriedades no mesmo diretório do nosso projeto, devemos fazê-lo fora. Nós saímos usando o arquivo gradle.properties.
Aqui estão os passos:
1. Edite ou crie gradle.properties em seu projeto raiz e adicione o seguinte código, lembre-se de editar o caminho com seu próprio:
AndroidProject.signing=/your/path/androidproject.properties
2.Crie androidproject.properties em / your / path / e adicione o seguinte código a ele, não esqueça de alterar /your/path/to/android.keystore no caminho do keystore:
STORE_FILE=/your/path/to/android.keystore
STORE_PASSWORD=yourstorepassword
KEY_ALIAS=yourkeyalias
KEY_PASSWORD=yourkeypassword
3. No módulo de aplicativo build.gradle (não na raiz do projeto build.gradle), adicione o seguinte código, se não existir, ou ajuste-o:
signingConfigs {
release
}
buildTypes {
debug {
debuggable true
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
4. Adicione o seguinte código abaixo do código na etapa 3:
if (project.hasProperty("AndroidProject.signing")
&& new File(project.property("AndroidProject.signing").toString()).exists()) {
def Properties props = new Properties()
def propFile = new File(project.property("AndroidProject.signing").toString())
if(propFile.canRead()) {
props.load(new FileInputStream(propFile))
if (props!=null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') &&
props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) {
android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']
} else {
println 'androidproject.properties found but some entries are missing'
android.buildTypes.release.signingConfig = null
}
} else {
println 'androidproject.properties file not found'
android.buildTypes.release.signingConfig = null
}
}
Este código procurará a propriedade AndroidProject.signing em gradle.properties na etapa 1 . Se a propriedade for encontrada, ela converterá o valor da propriedade como caminho do arquivo, apontando para androidproject.properties que criamos na etapa 2 . Então, todo o valor da propriedade será usado como configuração de assinatura para o nosso build.gradle.
Agora não precisamos nos preocupar novamente com o risco de expor nossa senha do keystore.
Leia mais em Signing Android apk sem colocar informações do keystore no build.gradle
build.gradle, você terá que ter algo diferentebuild.gradle, seja isso é um ajuste para variáveis de ambiente (por uma resposta), um arquivo de propriedades (por outra resposta) ou algum outro meio. Se você não deseja ter coisas forabuild.gradle, então, por definição, todas as informações de assinatura devem estar dentrobuid.gradle.