【问题标题】:Selective module compiling in build.gradlebuild.gradle 中的选择性模块编译
【发布时间】:2015-12-02 23:29:46
【问题描述】:

有没有办法选择性地编译每种风格的模块?

我试图通过在运行 debug flavor 时不编译各种模块来减少开发中的构建时间。

在 Eclipse 中,我不会将它们放在 libs 文件夹中,而是将它们放在 addon-libs 中,并且仅在导出时编译它们(通过 gradle 构建脚本)并且代码中有这样的内容:

try {
   if(Class.forName(clazz) {
      doStuffForLib();
   }
} catch (ClassNotFoundException ex) {
   // DO NOTHING
}

我的问题是,我现在可以在 build.gradle 中做类似的事情并进一步减少构建时间吗?

也就是说,我会写这样的东西

buildTypes {
   debug{
   }

   release {
      compile 'some.module:version:1.+'
   }
}

【问题讨论】:

    标签: android android-studio gradle android-gradle-plugin build.gradle


    【解决方案1】:

    您可以使用风味或 buildTypes 来实现它。

    dependencies {
        flavor1Compile xxx
        debugCompile xxxx
    }
    

    【讨论】:

    • 这会在运行调试时通过 lint 吗?
    • “通过 lint”是什么意思?
    • 我的意思是,编辑器会显示错误并无法运行吗?如果我不将 Eclipse 中的 jar 添加到 addon-libs 代码将无法编译,恐怕这样做会导致所有调试版本无法编译
    • 当然,您不能在调试仅包含在发布版本中的类时使用。在这种情况下,您必须在调试和发布之间提供不同的实现
    • 这正是我想要避免的,在 Eclipse 中,我会在 dev 中拥有类链接,但在 ANT 中编译时不会,但是现在,我无法运行它,因为代码不会编译因为类没有链接
    【解决方案2】:

    四处搜索后,我发现this JIRA ticket 解决了我的问题。

    您可以为每个版本提供编译,并为其他版本使用 provided 依赖项任务,同时维护提供的代码以避免使用未编译的模块,而这些模块不存在时

    public boolean isClassFound(String clazz) {
        try {
            return Class.forName(clazz);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return false
    }
    

    并在build.gradle 中添加:

    dependencies {
        provided 'some.module:version:1.+'
        releaseCompile 'some.module:version:1.+'
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 2011-04-27
      • 2017-08-16
      • 2016-04-21
      • 1970-01-01
      • 2015-04-02
      • 2021-07-16
      相关资源
      最近更新 更多