2017-06-21 38 views
0

为了简单起见,我的应用有两种口味,称为flavoraflavorb产品口味和源层次

productFlavors { 
     flavora { 
      resValue "string", 'app_name', "App Name Flavor A" 
      applicationIdSuffix ".flavora" 
     } 
     flavorb { 
      resValue "string", 'app_name', "App Name Flavor B" 
      applicationIdSuffix ".flavorb" 
     } 
    } 

两个我都想要的味道使用所有相同的布局,所有相同的Java代码,所有相同的资源,等等,除非我想flavoraflavorb使用不同的实现布局文件flavor_dependent_layout.xml和Java FlavorDependentJavaClass类。

这是正确的方式做到这一点:

sourceSets { 
    main { 
     res.srcDirs = ['src/main/res'] 
     java.srcDirs = ['src/main/java'] 
    } 
    flavora { 
     res.srcDirs = ['src/flavora/res', 'src/main/res'] 
     java.srcDirs = ['src/flavora/java', 'src/main/java'] 
    } 
    flavorb { 
     res.srcDirs = ['src/flavorb/res', 'src/main/res'] 
     java.srcDirs = ['src/flavorb/java', 'src/main/java'] 
    } 
} 

然后我刚刚创建必要的文件夹放置相应的文件,它会所有的工作从那里自然?它是如何知道我已经包含了这两种口味的课程,以防我尝试执行一种方法,例如它只存在一种口味?

(?还有,我必须明确提到资产文件夹,因为我有`/ src目录/主/资产,以及)

回答

1

这是正确的方式做到这一点:

就在那里创建src/flavora/res/src/flavora/java/src/flavorb/res/src/flavorb/java/,并把东西。他们会自动将添加到适当的构建路径。您无需调整srcDirs

它是如何知道我已经包含了两种口味的类,以防我尝试执行一种方法,并且它只存在一种口味,例如?

这是一个构建错误。在Java代码中,如果你想拥有它的口味:

  • 同一个类可以不从main引用main
  • 任何存在有两种flavoraflavorb

存在所以,例如,如果您有AdStrategy类别src/flavora/java/内某处和src/flavorb/java/里面的某处,您不会AdStrategysrc/main/java/。并且在AdStrategy(构造函数,方法等)中引用的任何东西都必须存在于flavoraflavorbAdStrategy的实现中。在构建时,当您构建flavora时,将自动使用树木src/main/java/src/flavora/java/,无论您在main中引用的内容是否需要解析(同样适用于flavorb构建)。