#android #android-keystore
#Android #android-хранилище ключей
Вопрос:
В моем приложении есть несколько вариантов, давайте назовем их Flavour_1 и Flavour_2. Каждый вариант имеет уникальное хранилище ключей Flavour_1_Release_Key и Flavour_2_Release_Key.
Я создаю apk, используя Flavour_1 и версию ‘1.0.1’, а затем устанавливаю ее на свое устройство.
Затем я создаю apk с использованием Flavour_2 и называю эту версию ‘1.0.2’, затем я могу перейти на свое устройство и установить Flavour_2 поверх Flavour_1, даже если они созданы с разными ключами.
У меня создалось впечатление, что вы можете установить только увеличенную версию, используя то же хранилище ключей.
Я предоставил свой build.gradle для справки
apply plugin: 'com.android.application'
android {
signingConfigs {
flavour1Release {
keyAlias 'Flavour_1_alias'
keyPassword 'password'
storeFile file('C:/PATH/TO/KEY/Flavour_1_Keystore.jks')
storePassword 'password'
}
flavour2Release {
keyAlias 'Flavour_2_alias'
keyPassword 'password'
storeFile file('C:/PATH/TO/KEY/Flavour_2_Keystore.jks')
storePassword 'password'
}
}
compileSdkVersion 27
defaultConfig {
applicationId "com.my.app"
vectorDrawables.useSupportLibrary = true
minSdkVersion 22
targetSdkVersion 22
versionCode 101
versionName "1.0.1"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
}
}
}
flavorDimensions "customer"
productFlavors {
// productFlavour attributes override those in defaultConfig
Flavour_1 {
dimension "customer"
signingConfig signingConfigs.flavour1Release
}
Flavour_2 {
dimension "customer"
signingConfig signingConfigs.flavour2Release
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
multiDexEnabled true
}
lintOptions {
checkReleaseBuilds false
abortOnError false
}
}
dependencies {
implementation fileTree(include: ['*.jar', '*.arr'], dir: 'libs')
}
Примечание: я тестирую это, создавая Flavour_1.apk и Flavour_2.apk, загружая их на эмулятор и устанавливая там сначала Flavour_1.apk, а затем Flavour_2.apk без каких-либо проблем.
Ответ №1:
Ключи позволяют Android идентифицировать автора (вас), а Android не позволяет обновлять приложение от «другого» автора по соображениям безопасности. В вашем случае: два ключа = два автора
Комментарии:
1. Я не уверен, понимаете ли вы, или я вас неправильно понимаю; Вы хотите сказать, что если я установлю свои ключи от своего имени, автор Джеймс Янг, тот же адрес и т.д. То же, что и другое, тогда мне разрешено обновлять любым ключом? Поскольку оба моих ключа сгенерированы мной, хотя они являются отдельными для Flavour_1 и Flavour_2.
2. Ключ идентифицирует автора, но даже при использовании того же имени, фамилии, адреса и т.д. Будет генерироваться другой ключ.
3. Да, я знаю это. Мой вопрос в том, почему я не могу обновить свое приложение до новой версии, использующей совершенно другой ключ.
4. Я пытаюсь объяснить лучше: если «com.example» APK1 уже установлен с использованием вашего Flavour1, установить «com.example» APK2, подписанный с использованием Flavour2, невозможно. Вместо этого, если APK1 и APK2 имеют разные названия пакетов, возможно установить оба APK. Для обновления / понижения версии требуется ТА же подпись. Если оно работает даже с использованием другой подписи, значит, у вас есть специальное ПЗУ Android, где эта проверка безопасности была отключена Author / XposedModule.