我很难让Android Studio构建正确的构建变体 - 甚至有时甚至让我选择一个构建变体。
基本上,我的项目有两个不同的版本,一个免费版本和一个"完整"版本。软件包ID是"com.mycompany.myproj"和"com.mycompany.myprojfree"。
一旦我指定了"myproj"和"myprojfree"风格以及"release"和"debug"构建类型,Android Studio就会在列表中生成四个变体:myprojDebug,myprojfreeDebug,myprojfreeRelease和myprojRelease。
问题是,选择其中一个并不能可靠地选择用于构建、调试等的变体。例如,我将选择 myprojDebug,点击调试,myprojfreeDebug 将构建(如控制台所示),免费版本将在连接的设备上打开。
此外,有时我什至无法在构建变体窗格中选择一个或多个构建变体。我可以单击它,但它不会改变。但有时如果我先把它改成别的东西,它会让我回去改变不变的。
我看到过提到类似问题的帖子,并遵循了所有建议——清理、重建、删除 .idea、删除构建文件夹、使缓存失效/重启、删除 app.iml 等——所有这些都无济于事。
值得注意的是,直到昨天我从Android Studio 3.1更新到3.4.1时,所有这些都运行良好。
这是我的应用程序build.gradle的简化版本:
apply plugin: 'com.android.application'
android {
defaultConfig {
versionCode ...
multiDexEnabled true
vectorDrawables {
useSupportLibrary true
}
minSdkVersion 15
targetSdkVersion 28
}
compileSdkVersion 28
signingConfigs {
myproj {
keyAlias ...
keyPassword ...
storeFile file('...')
storePassword ...
}
myprojfree {
keyAlias ...
keyPassword ...
storeFile file('...')
storePassword ...
}
}
flavorDimensions "tier"
productFlavors {
myproj {
signingConfig signingConfigs.myproj
applicationId 'com.mycompany.myproj'
}
myprojfree {
signingConfig signingConfigs.myprojfree
applicationId 'com.mycompany.myprojfree'
}
}
buildTypes {
release {
debuggable false
buildConfigField "Boolean", "MY_DEBUG_MODE", "false"
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
}
}
debug {
debuggable true
buildConfigField "Boolean", "MY_DEBUG_MODE", "true"
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
}
}
}
packagingOptions {
exclude 'META-INF/LICENSE'
}
configurations {
implementation.exclude group: "org.apache.httpcomponents", module: "httpclient"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
...
}
我很确定问题来自文件和 Gradle 同步之间的不同步。
更改构建变体后,请执行"使用 Gradle 文件的文件/同步项目"。 然后清理项目,重新生成并运行。