首页 > 解决方案 > Android Studio 中的产品风格

问题描述

我无法让产品风味发挥作用。我有这个毕业

apply plugin: 'com.android.application'
android {
    defaultConfig {
      minSdkVersion 14
      targetSdkVersion 24
      compileSdkVersion 27
    }
    signingConfigs {
        release {
      }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
            signingConfig signingConfigs.release
        }
    }
    repositories {
        maven { url "https://jitpack.io" }
    }
    flavorDimensions "dim1", "dim2", "dim3"
    productFlavors {
        flavor1 {
            dimension "dim1"
            applicationId "com.example.dim1.app"
        }
        flavor3 {
            dimension "dim2"
            applicationId "com.example.dim2.app"
        }
        flavor3 {
            dimension "dim3"
            applicationId "com.example.dim3.app"
        }
    }
    sourceSets {
        flavor1 {
          java.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/java/"]
          manifest.srcFile "W:/android-studio-projects/sharedid/app/src/example1/AndroidManifest.xml"
          assets.srcDirs = ["W:/android-studio-projects/sharedid/app/src/example1/assets/"]
          resources.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/res/", "W:/android-studio-projects/sharedid/app/src/example1/res/"]
        }
        flavor2 {
          java.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/java/"]
          manifest.srcFile "W:/android-studio-projects/sharedid/app/src/example2/AndroidManifest.xml"
          assets.srcDirs = ["W:/android-studio-projects/sharedid/app/src/example2/assets/"]
          resources.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/res/", "W:/android-studio-projects/sharedid/app/src/example2/res/"]
        }
        flavor3 {
          java.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/java/"]
          manifest.srcFile "W:/android-studio-projects/sharedid/app/src/example3/AndroidManifest.xml"
          assets.srcDirs = ["W:/android-studio-projects/sharedid/app/src/example3/assets/"]
          resources.srcDirs = ["W:/android-studio-projects/sharedid/app/src/main/res/", "W:/android-studio-projects/sharedid/app/src/example3/res/"]
        }
    }
}
dependencies {
    api 'com.google.android.gms:play-services-maps:15.0.0'
    api 'com.google.android.gms:play-services-location:15.0.0'
    api 'com.android.support:appcompat-v7:27.1.1'
    api 'com.github.PhilJay:MPAndroidChart:v2.0.8'

}

...

当我进入“构建|选择变体”时,我只能选择

模块:应用程序 构建变体:flavor1Flavor2Flavor3Debugflavor1Flavor2Flavor3Release

我本来想得到

我试过“文件|用gradle文件同步项目”

...

我收到这个错误

原因:java.lang.RuntimeException:无法从 W:\android-studio-projects\sharedid\app\src\main\AndroidManifest.xml 读取 packageName

我都试过了

标签: androidandroid-studioandroid-productflavors

解决方案


我认为有两个不相关的问题:

  • 目前,您有 2 种构建类型(自动创建的debugand release)和 3 个维度(dim1dim2and dim3),每个都有 1 个变体(flavor1for dim1flavor2for dim2,...),这最多给出:

    2 * 1 * 1 * 1 = 2 种组合

    您应该切换到dim1具有 3 个变体(flavor1flaver2)的 2 个构建类型和 1 个维度(例如) flavor3

    2 * 3 = 6 个 apk

  • 您应该有一个主要清单。与其他资源不同,清单不是简单地被覆盖,而是从多个来源合并(有关更多详细信息,请参阅合并多个清单文件)。

    它至少应该包含一个包名称(可能与最终的 applicationId 不同),正如Configure Product Flavors中的此注释所解释的那样:

注意:您仍然需要使用main/ manifest 文件中的package属性指定包名称。您还必须在源代码中使用该包名称来引用 R 类,或解析任何相关活动或服务注册。这允许您使用applicationId 为每个产品风味提供一个唯一的 ID 用于打包和分发,而无需更改您的源代码。


推荐阅读