Почему я могу обновить свое приложение до версии, подписанной с другим хранилищем ключей

#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.