Разновидности Android с другим идентификатором приложения нарушили поведение и внешний вид приложения

Я использую следующие build.gradle

apply plugin: 'com.android.application'

def final appId = "com.example.app"

android {
    compileSdkVersion 23
    buildToolsVersion '24.0.1'

    defaultConfig {
        vectorDrawables.useSupportLibrary = true
        applicationId appId
        buildConfigField "String", "DBNAME", "\"mydb.db\""
    }

    testOptions {
        unitTests.returnDefaultValues = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFile 'proguard-rules.pro'
        }
    }
    productFlavors {
        rel {
            minSdkVersion 14
            applicationId = "${appId}"
            buildConfigField "String", "DBNAME", "\"mydb.db\""
            targetSdkVersion 23
            versionCode 33
            versionName '1.4'
        }
        dev {
            minSdkVersion 14
            applicationId =  "${appId}.dev"
            buildConfigField "String", "DBNAME", "\"mydb_dev.db\""
            targetSdkVersion 3
            versionCode 1
            versionName '1.4-beta'

        }
    }
}

...

Я не копировал код из main в исходники rel и dev, а просто создал отдельные файлы для каждого варианта: res/values/strings.xml, res/values/colors.xml, google-service.json.

Приложение хорошо строится, с разными applicationId и устанавливается отдельно на одно и то же устройство.

Для варианта rel все работает хорошо, и он имеет applicationId = 'com.example.app', равное исходному имени пакета и фактическому имени исходного пакета.

Но я получаю очень странное поведение и ищу аромат dev, который становится applicationId = 'com.example.app.dev'

Во-первых, я вижу, что анимации работают неправильно, потому что кажется, что они становятся неправильными координатами.

Во-вторых, у меня есть много фрагментов с динамически увеличивающимися представлениями, и они отображаются частично или не отображаются совсем - по-разному при разных запусках.

Я предполагаю, что проблема в том, что у меня одинаковое имя пакета для классов и, вероятно, возникает такая неоднозначная идентификация класса.

Я вижу, что getContext() возвращает один и тот же класс com.example.app.MainActivity для обоих вариантов, и я думаю, что это имеет значение.

Я бы не хотел копировать все исходники в каждый исходный набор, потому что мне не нужно вносить туда изменения - код остается прежним.

Что такое решение?


person atlascoder    schedule 28.10.2016    source источник
comment
Итак, вы создали отдельные папки с подпапками res для каждого аромата? Вы определяете папки как наборы источников где-то в вашем build.gradle? Также: Вы прочитали и поняли, как объединяются файлы макета? См. tools.android.com/tech-docs/new-build. -система/слияние ресурсов   -  person tritop    schedule 28.10.2016
comment
Я внес изменения в build.gradle, а затем запустил задачу gradle android:sourceSets, и я создал папки, соответствующие объявленным в build.gradle, и поместил сюда файлы с различными определениями ресурсов. Я вижу, что сборки для каждого варианта правильно потребляют ресурсы: строки, цвета и сервисы google соответственно разные и работают. Но проблемы с поведением и видом появляются.   -  person atlascoder    schedule 28.10.2016
comment
Да, я читал об объединении ресурсов   -  person atlascoder    schedule 28.10.2016


Ответы (1)


Это была опечатка, на устранение которой ушло много часов...

Я указал targetSdkVersion 3, а не targetSdkVersion 23

(Я удивлен, что он вообще строился)

Проблема решена, вкусы Android великолепны!

person atlascoder    schedule 29.10.2016