Android Studio中的产品风格

Android Studio中的产品风格,android,android-studio,android-productflavors,Android,Android Studio,Android Productflavors,我不能让产品的味道起作用。我有这个渐变 apply plugin: 'com.android.application' android { defaultConfig { minSdkVersion 14 targetSdkVersion 24 compileSdkVersion 27 } signingConfigs { release { } } buildTypes {

我不能让产品的味道起作用。我有这个渐变

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'

}

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

模块:应用程序 构建变体:flavor1Flavor2Flavor3Debug,Flavor1Flavor2Flavor3发布版

我本想得到

  • 以下构建变体:flavor1Debug、flavor2Debug、flavor3Debug、flavor1Release、flavor2Release、flavor3Release
我尝试过“文件|与gradle文件同步项目”

我得到这个错误

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

我已经试着两者兼而有之

  • 没有这样的文件(希望它将采取产品风味之一?)
  • 让“主要”清单只定义所有产品口味之间的共享内容
试试下面的方法

 flavorDimensions "dim1"
productFlavors {
    flavor1 {
        dimension "dim1"
        applicationId "com.example.dim1.app"
    }
    flavor3 {
        dimension "dim1"
        applicationId "com.example.dim2.app"
    }
    flavor3 {
        dimension "dim1"
        applicationId "com.example.dim3.app"
    }
}

有关构建变量的更多详细信息,我认为有两个不相关的问题:

  • 目前,您有2种构建类型(自动创建的
    debug
    release
    )和3个维度(
    dim1
    dim2
    dim3
    ),每种类型都有1个变体(
    flavor1
    用于
    dim1
    flavor2
    用于
    dim2
    ,…) 这最多可以提供:

    2*1*1*1=2个组合

    您应该切换到2种构建类型和1个维度(例如
    dim1
    ),其中包含3个变体(
    flaver1
    flaver2
    flavor3
    ),以便:

    2*3=6 APK

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

    它至少应该包含一个包名(可能不同于最终应用程序ID),如本说明所述:

注意:您仍然需要使用属性指定包名 在main/清单文件中。您还必须在中使用该包名称 您的源代码引用了R类,或者解析了任何相关的 活动或服务注册。这允许您使用applicationId 为每种产品提供一个独特的包装和包装标识 发行版,无需更改源代码

我本想得到

以下生成变体: 香精1糖,香精2糖,香精3糖,香精1酶,香精2酶,香精3释放

为此,您需要为所有口味定义相同的维度

我得到这个错误

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

由于无法访问路径,因此出现此错误

试想一下,应用程序在运行时如何找到W:

所以,这里需要使用相对路径

同样来自官方文件():

如果有未组织到默认源集中的源 Gradle期望的文件结构,如上一节所述 关于创建源集,可以使用“源集”块更改 Gradle希望为源集合的每个组件收集文件。 您不需要重新定位文件您只需要提供Gradle 与模块级build.gradle文件相关的路径, Gradle应该在其中查找每个源集组件的文件


异常表示无法从AndroidManifest.xml读取packageName。您的风格中实际存在哪些清单文件?但为什么需要三维?您是否尝试只定义一个并使用该变量?您还询问了调试变量。您只定义了一种构建类型:release。添加另一个进行调试。它可以是空的。您可能只需要1个dimension@Cata我现在已经把它改成了一个单一的-结果没有差别,虽然这仍然会产生相同的错误-但是感谢链接