【问题标题】:Android gradle buildTypes: Duplicate classAndroid gradle buildTypes:重复类
【发布时间】:2013-09-17 21:48:05
【问题描述】:

我正在将我的应用程序转换为使用 gradle,并且我正在尝试使用 buildTypes。我有一个 Constants 类,我希望为我的发布版本进行修改。所以我在src/main/java/my/package/name/Constants.javasrc/release/java/my/package/name/Constants.java 有一个文件。

当我尝试构建它时,gradle 告诉我在我的发布构建类型中的 Constants 文件上构建失败,错误是它是一个重复的类。

我还尝试在我的build.gradle 中为此添加不同的源集,如下所示:

sourceSets {
    main {
        java.srcDirs = ['src/main/java'];
        //...
    }
    release {
        java.srcDirs = ['src/release/java'];
    }
}

但这仍然给我同样的错误。所以我想知道,我在这里做错了什么?

【问题讨论】:

    标签: android build gradle source-sets


    【解决方案1】:

    您不能在mainrelease 中上课。您需要将其拆分为 debugrelease 之类的内容。

    gradle 会将每个buildType 的源集与main 合并。
    这就是该类在您的 release 构建中重复的原因。

    所以规则是:将一个类放入main,或每个 buildType,但不能同时放入。

    【讨论】:

    • 如果有人将 A 类放入 buildType 付费和免费,主要抱怨缺少 A 类。如何处理?
    • 文档说可以用相同的包名和类名developer.android.com/tools/building/…覆盖类,但它不起作用:(
    • 除非我遗漏了什么,否则文档说您可以拥有具有相同类名/包名的相同类如果它们具有不同的风格。如果一个在main 中,而另一个在某个风味中,则不是这样。
    • @tir38 这里的文档很清楚about the flavors and duplicate classes
    • 使用动态类加载和一个接口来加载类(如果它存在于风味上)。
    【解决方案2】:

    “修复”的答案帮助了我,但我从主 Gradle 收到了一个错误,说缺少一个常量(在我的类 Config 中)。这是因为我的课程只有付费和免费版本,而不是主要版本。找不到 Config 类。 我不确定这是否是 Studio 中的错误......我终于用以下方法解决了它:

    buildTypes {
    
        release {
            ...
            buildConfig "public static final boolean XYZ = false;"
        }
    
    }
    

    我没有使用我的 Config.XYZ 类常量,而是使用了 buildConfig.XYZ

    【讨论】:

    • 或者只是buildConfigField "boolean", "XYZ", "false"
    猜你喜欢
    • 2015-06-15
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多