我正在使用以下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',我认为这很重要。
我不想复制每个源集下的所有源代码,因为我不需要在那里进行更改 - 代码仍然相同。
什么是解决方案?
答案 0 :(得分:0)
这是一种错误,需要花费很多时间才能解决......
我指出targetSdkVersion 3
而不是targetSdkVersion 23
(我很惊讶它正在构建)
问题解决了,Android Flavors非常棒!