android - 使用 Gradle 的多种口味的不同 list

标签 android gradle android-manifest

我有这种情况:4 种口味,我必须总共有 8 个构建,4 个应用程序在 list 中声明了可访问性,4 个没有。
我发现作为唯一解决方案在 list 中声明 2 个 buildType,以便我可以为 buildType 创建一个 sourceSets,指定 list src。但是通过这种方式,我正在构建

  • 可访问性
  • 无法访问
  • 调试
  • 发布

  • 所以现在我无法访问 调试 进行测试,所以我必须创建其他 2 个 buildTypes 指定 debuggable true。最终情况是
  • 可访问性
  • 辅助功能调试
  • 无法访问
  • 无辅助功能调试
  • 调试
  • 发布

  • 那些只是构建类型 ,但我也有 4 种口味,所以我的构建变体是 24。

    这基本上糟透了。没有办法声明默认 debug 和 release 使用的两个 sourceSet 吗?

    要求
    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')
        }
    }
    

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

    最佳答案

    我不确定您是否应该依赖构建类型。仅使用口味适合这种情况。
    例如,你应该像往常一样设置你的主 list ,在你的 build.gradle 中,你可以声明一个补充 list :

    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 文件中,您可以使用 tools:node 标签添加声明或删除它们,例如
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove"/>
    

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

    关于android - 使用 Gradle 的多种口味的不同 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48763462/

    相关文章:

    eclipse - 在Eclipse中查看Gradle依赖关系树

    android - 获取请求在 iOS 上显示响应,但不适用于 Android

    android - 有没有办法在AndroidManifest文件中获取当前产品 flavor 的applicationId?

    android - 将 TextView 动态对齐到水平 LinearLayout 中的下一行

    spring-boot - 带有生成器的gradle spring-boot 2.3.0.M3 buildpack --builder cloudfoundry/cnb:bionic cache jdk不会在每次运行时下载

    安卓 1.5 : Reading SMS messages

    android - 您可以从命令行通过 Gradle 部署到设备吗

    android - AndroidManifest.xml 中的标签属性

    android - Bash:查找并替换脚本中的文本

    android - START_STICKY 用于前台服务