与Gradle的多种口味的不同清单

时间:2018-02-13 09:31:02

标签: android gradle android-manifest

我有这种情况:4种味道,我必须完全有8个构建,4个应用程序在清单中声明可访问性而4个不是。 我发现只有解决方案在manifest中声明了2个buildTypes,这样我就可以为buildType创建一个sourceSets,指定manifest src。但是通过这种方式,我已经建立了

  1. 辅助
  2. 无法访问
  3. 调试
  4. 释放
  5. 所以现在我无法使用辅助功能 debug 进行测试,因此我必须创建其他2个buildTypes指定debuggable true。最后的情况是

    1. 辅助
    2. 辅助功能调试
    3. 无法访问
    4. 无可访问性调试
    5. 调试
    6. 释放
    7. 那些只是 buildTypes ,但我也有4种味道,所以我的构建版本是24。

      这基本上很糟糕。没有办法声明默认调试和发布使用的两个sourceSets?

      规定我们

      flavor1/accessibilty
      flavor1/no accessibilty
      flavor2/accessibilty
      flavor2/no accessibilty
      ecc..
      

      第一次实施

       buildTypes {
          noaccesibiltyDebug {
              minifyEnabled false
              debuggable true
          }
          accessibilityDebug {
              minifyEnabled false
              debuggable true
          }
          noaccessibilty {
              minifyEnabled true
              debuggable false
              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          }
          accessibility {
              minifyEnabled true
              debuggable false
              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          }
      }
      sourceSets {
          noaccessibiltyDebug {
              manifest.srcFile('/src/main/AndroidManifest.xml')
          }
          accessibilityDebug {
              manifest.srcFile('/src/main/accessibility/AndroidManifest.xml')
          }
          noaccessibilty {
              manifest.srcFile('/src/main/AndroidManifest.xml')
          }
          accessibility {
              manifest.srcFile('/src/main/accessibility/AndroidManifest.xml')
          }
      }
      

      RESULT

      build/output/apk/accessibilty
                      /noaccessibilty
                      /accessibiltyDebug
                      /noaccessibiltyRelease   
                      /debug <- **********useless**********
                      /release <- **********useless**********
      

1 个答案:

答案 0 :(得分:0)

我不确定你应该依赖buildtypes。仅使用香料适应于这种情况。 例如,您应该像往常一样设置主清单,在build.gradle中,您可以声明一个补充清单:

android.sourceSets.flavor1{
    res {
        srcDir 'app/src/flavor1/res'
    }
    resources {
        srcDir 'app/src/flavor1/res'
    }
    java {
        srcDir 'app/src/flavor1/src'
    }
    manifest {
        srcFile 'app/src/flavor1/AndroidManifest.xml'
    }
}

然后在您的特定flavor1 Manifest文件中,您可以使用工具添加声明或删除它们:node tag,例如

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove"/>

然后Manifest合并工具将使用所需的声明构建您的所有口味。