Я использую следующие 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 для обоих вариантов, и я думаю, что это имеет значение.
Я бы не хотел копировать все исходники в каждый исходный набор, потому что мне не нужно вносить туда изменения - код остается прежним.
Что такое решение?
build.gradle
, а затем запустил задачу gradle android:sourceSets, и я создал папки, соответствующие объявленным вbuild.gradle
, и поместил сюда файлы с различными определениями ресурсов. Я вижу, что сборки для каждого варианта правильно потребляют ресурсы: строки, цвета и сервисы google соответственно разные и работают. Но проблемы с поведением и видом появляются. - person atlascoder   schedule 28.10.2016