gradle:Android Studio继承buildtype

时间:2014-05-09 08:14:10

标签: android gradle android-gradle

我有gradle(Android Studio)4种构建类型

android {
  buildTypes {
     release { ... }
     debug { ... }
     kindle { ... }
     kindle_debug { ... }
  }
}

我知道,我的src文件夹可以为每个构建类型提供一个文件夹。所以最终会进入

 src/
  -- debug
  -- kindle
  -- kindle_debug
  -- main // used for every project
  -- release

目前kindlerelease相同,kindle_debugdebug相同。

如何避免复制src文件夹?有没有办法从releasedebug继承或让我自己在build.gradle文件中设置src文件夹?

编辑:一个似乎有用的解决方案是设置符号链接,但我想使用Mac OS和Windows操作系统,而不是每个新用户都希望自己设置符号链接。

编辑2:我现在使用产品口味,因此,我可以调试/发布,谷歌,亚马逊和三星。这是我的最佳解决方案。

3 个答案:

答案 0 :(得分:40)

您可以从以下构建类型继承:

buildTypes {
     release { ... }
     debug { ... }

     kindle {
         initWith buildTypes.release
         ...
     }
     kindle_debug {
         initWith buildTypes.debug
         ...
     }
  }

答案 1 :(得分:3)

答案可能有点晚,但我遇到了类似的问题,并通过以下方式解决了这个问题:

android {
    sourceSets {
        kindle {
            java.srcDirs = ["src/release/java", "src/main/java"]
        }
        kindle_debug {
            java.srcDirs = ["src/debug/java", "src/main/java"]
        }
    }
}

如果将其添加到build.gradle文件中,kindle构建类型将仅使用release和main文件夹中的java文件,而kindle_debug构建类型将使用debug和release文件夹。

当然你可以添加kindle文件夹或kindle_debug文件夹:

java.srcDirs = ["src/kindle/java", "src/release/java", "src/main/java"]
java.srcDirs = ["src/kindle_debug/java", "src/debug/java", "src/main/java"]

但您可能会遇到重复的类错误。

答案 2 :(得分:1)

如果我理解正确,你只想在调试和发布版本之间只有几个文件不同?在这种情况下,以下应该有效(我的用例与你的相同):

https://stackoverflow.com/a/28279105/1041533

为了完整起见,我将粘贴上述答案的相关部分:

  1. 基于资源目录的方法
  2. 打算根据每个客户的版本或调试版本来修改每个客户的xml文件夹中的文件。这可以通过相应的文件夹结构来实现。基于最初的问题,我们有3个客户,每个客户都有一个调试和发布版本。上述xml文件对于每个客户和构建类型都是不同的。因此,以下目录结构:

    src/
      - customerA
        //Contains all relevant resource files specific to customer A
      - customerB
        //Contains all relevant resource files specific to customer B
      - customerC
        //Contains all relevant resource files specific to customer C
    
      - customerADebug
        //Contains debug server-settings file for customer A
      - customerBDebug
        //Contains debug server-settings file for customer B
      - customerCDebug
        //Contains debug server-settings file for customer C
      - customerARelease
        //Contains release server-settings file for customer A
      - customerBRelease
        //Contains release server-settings file for customer B
      - customerCRelease
        //Contains release server-settings file for customer C
    

    因此,每种产品风味的主要内容都在与风味名称相同的文件夹中(customerA,customerB等。请参阅上面代码段的第一部分)。现在这个根据是否是每个客户的调试或发布版本而不同的文件被放入相应的文件夹,例如customerADebug - >包含调试模式等服务器设置的文件。

    例如,当您构建customerA时,如果您构建调试或发布版本,将选择正确的文件。

    请告诉我是否应该进一步澄清这一点。