【问题标题】:Android Gradle exclude classes for Debug BuildTypeAndroid Gradle 排除 Debug BuildType 的类
【发布时间】:2015-08-12 14:12:49
【问题描述】:

烘焙地

出于各种原因,我在我的项目中使用 Google Play 服务。 Google Play 服务是一个很大的依赖项,它大大增加了我的构建时间。所以我想为我的“调试”版本禁用 Google Play 服务,这样我可以更快地编译我的项目。

我该怎么做?

要在调试构建期间排除 Google Play 服务,我只需像这样进行条件编译:

releaseCompile 'com.google.android.gms:play-services-plus:7.5.+'
releaseCompile 'com.google.android.gms:play-services-ads:7.5.+'
releaseCompile 'com.google.android.gms:play-services-gcm:7.5.+'

因此,Google Play 服务仅针对发布版本进行编译,并未包含在调试版本中。到目前为止一切顺利。

一个陷阱

我的代码中有一些依赖于 Google Play 服务的类。我可以使用接口轻松抽象它们,并改为加载存根。但问题是,这些类在我的“调试”构建期间仍在编译,即使我没有直接引用它们(实际上我是使用反射加载它们)。

解决方法

要忽略我不使用的类的编译错误,我只是将它们从调试构建类型的源集中排除,如下所示:

   debug {
        minifyEnabled false
        sourceSets {
            main {
                java {
                    exclude '**/tracking/impl/**'
                    exclude '**/GoogleApiClientWrapper.java'
                }
            }
        }
    }

问题解决了,我可以在没有 Google play 服务的情况下使用“Debug”版本进行编译,并且构建时间更快。

问题

尽管我只在“调试”构建类型中指定了 sourceSets 块,但我注意到即使在发布构建类型中这些类也被剥离了。为什么 ?我怎样才能排除那些类ONLY调试构建类型?

注意

  • 已将 proguard-rules 配置为不剥离这些类(因为我使用的是反射)
  • 为发布版本禁用了 proguard
  • 试图在不同的地方定义源集(即使是在不同的地方),看起来最新定义的源集覆盖了之前的所有。

【问题讨论】:

  • “为什么?” -- 因为sourcesets 不会影响单个构建类型。我很惊讶你的 Gradle 脚本运行。我预计会出现 DSL 错误,因为在 debug 对象上找不到 sourcesets 方法。 “我怎样才能排除那些只用于调试构建类型的类?” -- 将它们放入release 源集并从main 中删除它们。 “看起来最新的 sourceSet 定义覆盖了所有以前的”——我不知道“最新的 sourceSet”是什么意思。
  • 启发!如果你能指出我是如何将它们放入“发布源集”的?

标签: android android-studio gradle build


【解决方案1】:

如果您想拥有某些构建类型或产品风格独有的 Java 类,请将它们放入该构建类型或产品风格的源集中。

如果您有一个典型的 Gradle for Android 项目结构,那么在某个地方,您有 src/main/java/,其中 Java 类位于基于包名称的适当目录中。这些类位于 main 源集中,用于所有构建。

如果您想让类仅在 release 构建中使用,请创建一个 src/release/java/ 目录,并将这些类从 src/main/java/ 移动到 src/release/java/

debug 构建中,release 类被忽略。在 release 构建中,使用了 release 类。

请注意,您不能使用此技术替换 main 中的类。所以,你不能在 main 中拥有 com.ivelius.awesomeapp.Foo 和在 release 中拥有另一个 com.ivelius.awesomeapp.Foo — 你会得到某种形式的“重复类”错误。

【讨论】:

  • 太棒了!只是没有意识到我也可以像创建每个风味文件夹一样创建一个“发布”文件夹。谢谢:)
  • @Ivelius:是的,您可以为任何构建类型、任何产品风格和 (IIRC) 任何构建变体创建源集(例如,releaseVanilla 用于组合 release 构建类型和 @ 987654338@产品风味)。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 2013-09-09
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多