Zaakceptowana odpowiedź używa pliku do kontrolowania, którego magazynu kluczy użyć do podpisania pliku APK, który znajduje się w tym samym folderze głównym projektu. Kiedy używamy vcs, takich jak Git , może być źle, gdy zapomnimy dodać plik właściwości do ignorowania listy. Ponieważ ujawnimy światu nasze hasło. Problemy nadal istnieją.
Zamiast tworzyć plik właściwości w tym samym katalogu w naszym projekcie, powinniśmy zrobić to na zewnątrz. Robimy to na zewnątrz za pomocą pliku gradle.properties.
Oto kroki:
1. Edytuj lub utwórz gradle.properties w swoim głównym projekcie i dodaj następujący kod, pamiętaj, aby edytować ścieżkę za pomocą własnej:
AndroidProject.signing=/your/path/androidproject.properties
2.Utwórz androidproject.properties w / your / path / i dodaj do niego następujący kod, nie zapomnij zmienić /your/path/to/android.keystore na ścieżkę do magazynu kluczy:
STORE_FILE=/your/path/to/android.keystore
STORE_PASSWORD=yourstorepassword
KEY_ALIAS=yourkeyalias
KEY_PASSWORD=yourkeypassword
3. W module aplikacji build.gradle (nie w katalogu głównym projektu build.gradle) dodaj następujący kod, jeśli nie istnieje, lub dostosuj go:
signingConfigs {
release
}
buildTypes {
debug {
debuggable true
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
4. Dodaj następujący kod poniżej kodu w kroku 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
}
}
Ten kod wyszuka właściwość AndroidProject.signing w gradle.properties z kroku 1 . Jeśli właściwość zostanie znaleziona, przetłumaczy wartość właściwości jako ścieżkę do pliku, która wskazuje na androidproject.properties, które utworzymy w kroku 2 . Następnie cała wartość właściwości z niego zostanie użyta jako konfiguracja podpisywania dla naszego build.gradle.
Teraz nie musimy ponownie martwić się ryzykiem ujawnienia naszego hasła do magazynu kluczy.
Przeczytaj więcej na temat podpisywania aplikacji na Androida bez umieszczania informacji o magazynie kluczy w pliku build.gradle
build.gradle
, trzeba mieć coś innego niżbuild.gradle
, czy to jest dostosowanie do zmiennych środowiskowych (na jedną odpowiedź), plik właściwości (na inną odpowiedź) lub w inny sposób. Jeśli nie chcesz mieć rzeczy na zewnątrzbuild.gradle
, z definicji wszystkie informacje dotyczące podpisu muszą znajdować się wewnątrzbuid.gradle
.