在Xavier的答案之后编辑了Please note:个答案

我试图在Android Studio中为同一个应用程序项目使用不同的Build Flavors.然而,我似乎在配置它以使其正常工作时遇到了困难.

Steps:

  1. 创建一个名为"Test"的新Android Studio项目.
  2. 开放式构建.gradle*并添加了以下行:

    productFlavors {
    flavor1 {
        packageName 'com.android.studio.test.flavor1'
        }
    flavor2 {
        packageName 'com.android.studio.test.flavor2'
        }
    }
    
  3. 在重新启动Android Studio之后,我现在在Build Variants部分下看到4 build variants个.这意味着到目前为止,我们已经成功地设置了产品的口味.**
  4. flavor1人创建了一个新的源文件夹;然而,我不确定我是否用正确的方式来做.我是这样做的:

    • 请记住,此项目的包名为:com.foo.test
    • 右键点击src文件夹,对于flavor1,我实际上在浏览器中创建了各个文件夹, struct 是src/flavor1/java/com/foo/test/MainActivity.java.
    • 上述方法效果很好,因为"java"文件夹位于blue中,这意味着IDE知道它是一个活动源目录.此外,软件包是自动创建的.尽管如此,我还是收到了关于发现重复类的警告.See screenshot here.
    • 对于Favor2,我try 手动创建包,但是Favor2的‘src’文件夹似乎不是蓝色的,因此右键单击时选项不同,并且‘New Package’不可用.See image here.
    • 请注意,对于Favor1,我还创建了一个"res"目录,它确实会变成蓝色,但尽管如此,它并不提供创建Android资源文件或Andorid资源目录的功能,以防我想为不同的口味使用不同的资源.

我做错什么了吗?还是我错过了什么?如果您需要更多信息,请告诉我.

*我的项目似乎有two个build.gradle文件.一个位于项目文件夹的根目录(\GradleTest),这个是空的.第二个文件位于\GradleTest的子文件夹的根上,也标记为‘GradleTest’(GradleTest-GradleTest),这是打开时已经有代码的文件;因此,这是我编辑的文件.

**我判断了gradle设置,显然Use auto-importalready enabled.,尽管如此,对构建进行了更改.gradle文件doesn't automatically update构建变体.Note:我还try 过使用Build-Rebuild Project和/或Build-Make Project,no go.我仍然需要关闭该项目,并重新打开以使更改生效.

推荐答案

如果在Studio首选项中,在Gradle部分下,可以为项目启用自动导入(默认情况下,我们将在稍后启用).这将允许Studio重新导入您的构建.只要你编辑它,它就会变成gradle.

创建口味并不意味着你要为它们使用自定义代码,所以我们不创建文件夹.你确实需要自己创造它们.

如果您查看my IO talk,您将看到我们如何将来自口味的值和构建类型混合在一起来创建变体.

对于Java源:

src/main/java
src/flavor1/java
src/debug/java

所有3个都用于创建单个输出.这意味着它们不能定义同一个类.

如果你想在两种口味中拥有同一类的不同版本,你需要在两种口味中创建它.

src/flavor1/java/com/foo/A.java
src/flavor2/java/com/foo/A.java

然后您在src/main/java中的代码就可以

import com.foo.A

根据 Select 的口味,正确版本的com.福.使用了A.

这也意味着A的两个版本必须具有相同的API(至少当涉及到src/main/java/中的类所使用的API时是如此)...

Edit to match revised question

此外,重要的是将同一个类仅放在相互排斥的源文件夹中.在这种情况下,src/flavor1/java和src/flavor2/java永远不会一起 Select ,但main和flavor1是一起 Select 的.

如果您希望提供不同风格的活动的不同版本,请不要将其放在src/main/java中.

请注意,如果您有3种口味,并且只希望为flavor1定制一种,而flavor2和flavor3共享相同的活动,那么您可以为这两种其他活动创建一个公共源文件夹.您可以完全灵活地创建新的源文件夹,并将源集配置为使用它们.

关于你的其他观点:

第二种口味的源文件夹不是蓝色是正常的.你需要切换到第二种风格来启用它,然后你就可以在里面创建包和类了.在此之前,Studio不会将其视为源文件夹.我们希望在将来改进这一点,使IDE能够识别这unactive个源文件夹.

我认为不能在res文件夹中创建资源文件也是正常的.菜单系统尚未更新,无法处理所有这些额外的资源文件夹.这将在稍后进行.

Android相关问答推荐

Android:点击操作栏返回按钮后应用程序无react

fillMaxHeight中的分数在列内不起作用(android jetpack compose)

Android开发:主题排版不适用于按钮文本

Android App Google AdMob";广告加载失败:3;带有测试ID,&q;广告加载失败:1 for My Gahad

Jetpack Compose主导航中的全屏图标列表

Android 11:在try 获取文件的永久权限后,仍然没有读写权限

在更改MuableState的值后,Android API 26(Oreo)上的Composable不能重新组合

如何在Jetpack Compose中向SearchBar添加边框

如何在 Jetpack Compose LazyColumn 中将项目分组在一起,例如卡片

为什么我的 APK 中包含来自旧版 Android 支持库的类?

页面标题未显示在内容页面上

Spinner - onItemLongClick 从未执行

SQLite Kotlin 问题 - 没有数据库

在一个函数中组合相同的流 struct

我怎样才能在多行 TextView 旁边有一个 ImageView 并且不超过父级的限制?

通过 adb 解压并重新安装后 Android 应用程序崩溃

如何在 JetpackCompose 的 LazyColumn 中 Select 多个项目

单击 Jetpack Compose(单选)时,我无法为列表中的单个文本着色

在 Android Studio 中替换字符串中的 "

如何使用 Kotlin 在 Android Wear(Galaxy watch 4)中继续在后台运行应用程序