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
.