Прийнята відповідь використовує файл, щоб контролювати, який магазин зберігання ключів використовувати для підпису APK, який знаходиться в тій же кореневій папці проекту. Коли ми використовуємо vcs типу Git , це може бути погано, коли ми забудемо додати файл властивостей до списку ігнорування. Тому що ми розкриємо свій пароль всьому світу. Проблеми все ще зберігаються.
Замість того, щоб створити файл властивостей у одному каталозі в рамках нашого проекту, ми повинні зробити його поза Ми робимо це назовні, використовуючи файл gradle.properties.
Ось етапи:
1.Редагуйте або створіть gradle.properties у вашому кореневому проекті та додайте наступний код, не забудьте відредагувати шлях своїм власним:
AndroidProject.signing=/your/path/androidproject.properties
2.Створіть androidproject.properties у / вашому / шляху / та додайте до нього такий код, не забудьте змінити /your/path/to/android.keystore у свій шлях до магазину:
STORE_FILE=/your/path/to/android.keystore
STORE_PASSWORD=yourstorepassword
KEY_ALIAS=yourkeyalias
KEY_PASSWORD=yourkeypassword
3.У модуль додатка build.gradle (не у вашому проекті root build.gradle) додайте наступний код, якщо його немає, або налаштуйте його:
signingConfigs {
release
}
buildTypes {
debug {
debuggable true
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
4.Додайте наступний код під кодом на кроці 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
}
}
Цей код буде шукати властивість AndroidProject.signing у gradle.properties з кроку 1 . Якщо властивість знайдена, вона переведе значення властивості як шлях до файлу, який вказує на androidproject.properties, який ми створюємо на кроці 2 . Тоді все значення властивості з нього буде використовуватися як конфігурація підпису для нашого build.gradle.
Тепер нам більше не потрібно турбуватися про ризик викрити пароль для зберігання ключів.
Детальніше читайте на сторінці Підписання Android apk, не додаючи інформацію про сховище ключів у build.gradle
build.gradle
, вам доведеться мати щось інше, ніжbuild.gradle
, чи це коригування змінних оточуючих середовищ (на одну відповідь), файлу властивостей (за іншою відповіддю) або якимось іншим способом. Якщо ви не бажаєте мати речі позаbuild.gradle
, то, за визначенням, вся інформація про підписи повинна бути всерединіbuid.gradle
.