【问题标题】:Problems with gradle android plugin and buildtype sourcesetsgradle android 插件和 buildtype 源集的问题
【发布时间】:2013-09-09 06:56:02
【问题描述】:

我是 gradle 新手,想使用带有风味、构建类型和自定义源集的 gradle android 插件。使用风味和构建类型构建作品可以找到。不幸的是,我有一个遗留的项目目录结构,所以我必须为 buildtypes 自定义 res 目录。

不知何故,构建类型的附加资源(基本上是一些字符串配置值)似乎没有合并到构建中,也没有替换主树中的资源键。

这是以前问过的,我知道有 Gradle productflavors sourcesets and old project structure 和 How can I specify per flavor buildType sourceSets?

我想引用第一篇文章中的 Xavier:“您需要先声明您的风味,然后自定义 sourceSet。”

我了解风味配置会自动创建源集,并且之后需要对其进行修改。这就是我在下面的 build.gradle 中尝试的,但是我为每个 buildtype 添加的“res.srcDirs”似乎被忽略了,我不知道为什么。

在第二篇文章中(最后一条评论带有指向 github 的链接),我在 build.gradle 中看到了复杂的源集修改。还有更简单的方法吗? (见这里:https://github.com/shakalaca/learning_gradle_android/blob/master/07_tricks/app/build.gradle)

这是我的 gradle android 插件的构建配置:

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 17
    }

    sourceSets {

        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }

    productFlavors {
        normal {
        }

        proguard {
            proguardFile file("proguard-project.txt")
        }
    }


    buildTypes {

        dev {
            packageNameSuffix ".dev"
            debuggable true
            signingConfig android.signingConfigs.debug

        }

        beta {
            packageNameSuffix ".beta"
            debuggable true
            signingConfig android.signingConfigs.debug
        }

        live {
            packageNameSuffix ".live"
            debuggable true
            signingConfig android.signingConfigs.debug
        }
    }

   sourceSets.dev.res.srcDirs = ['variations/dev']
   sourceSets.beta.res.srcDirs = ['variations/staging']
   sourceSets.live.res.srcDirs = ['variations/live']
}

【问题讨论】:

    标签: android gradle


    【解决方案1】:

    你的build.gradle应该没问题,检查你的variations目录,dev/stagin/live文件夹结构应该和res目录一样。

    app/AndroidManifest.xml
    app/src/com/...
    app/res/values/strings.xml
    app/res/layout/main_activity.xml
    app/variations/dev/values/strings.xml
    app/variations/staging/values/strings.xml
    app/variations/live/values/strings.xml
    

    顺便说一句,您定义了 proguardFile,但没有 runProguard true

    【讨论】:

    • 构建类型的错误 res 文件夹结构确实是问题所在。非常感谢并在 proguard 定义中提及这一点。
    【解决方案2】:

    如果您更改脚本的顺序,您可以获得更好的结构并使其更易于阅读。

    假设你有一个发布、测试和调试类型,并且你想要一个不同的源目录,你可以这样做:

        buildTypes {
        release {
            debuggable false
            jniDebugBuild false
            runProguard true
            proguardFile 'proguard-android.txt'
    
            // Links to signing config above.
            signingConfig signingConfigs.release
        }
    
        debug {
            packageNameSuffix ".debug"
            versionNameSuffix ".debug"
    
        }
        beta {
            // Import release code - avoid having the same code twice!
            initWith release
            packageNameSuffix ".beta"
            versionNameSuffix ".beta"
        }
    }
    
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    
        release {
            res.srcDirs = ['res', 'res-release']
        }
    
        beta {
            res.srcDirs = ['res', 'res-beta']
        }
    
        debug {
            res.srcDirs = ['res', 'res-debug']
        }
    }
    

    注意buildTypes和sourceSets的顺序!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 2014-02-05
      • 1970-01-01
      相关资源
      最近更新 更多