gpt4 book ai didi

android - 每个构建变体有两个 res 目录,Gradle 停止跟踪资源文件中的更改

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:04:58 29 4
gpt4 key购买 nike

我很天真地转而使用 different app icons for each product flavour按照这些思路:

sourceSets.production {
res.srcDirs = ['res', 'res-production']
}

sourceSets.beta {
res.srcDirs = ['res', 'res-beta']
}

sourceSets.internal {
res.srcDirs = ['res', 'res-internal']
}

事情是,在那之后,Gradle 不再注意到任何布局文件中的更改,例如 res/layout/activity_faq.xml,并且需要干净的构建每次,如果我希望我的 XML 更改包含在 APK 中。

我起初以为这是一个 Android Studio 问题,但实际上我可以用纯 Gradle 在命令行上重现它,只需查看出现在 build/res/all/internal/debug/下的文件布局

当我运行 ./gradlew assembleInternalDebug 时,它输出:

:compileInternalDebugNdk UP-TO-DATE
:preBuild UP-TO-DATE
:preInternalDebugBuild UP-TO-DATE
:prepareInternalDebugDependencies
:compileInternalDebugAidl UP-TO-DATE
:compileInternalDebugRenderscript UP-TO-DATE
:generateInternalDebugBuildConfig UP-TO-DATE
:mergeInternalDebugAssets UP-TO-DATE
:mergeInternalDebugResources
:processInternalDebugManifest UP-TO-DATE
:processInternalDebugResources UP-TO-DATE
:generateInternalDebugSources UP-TO-DATE
:compileInternalDebugJava UP-TO-DATE
:preDexInternalDebug UP-TO-DATE
:dexInternalDebug UP-TO-DATE
:processInternalDebugJavaRes UP-TO-DATE
:validateDebugSigning
:packageInternalDebug UP-TO-DATE
:assembleInternalDebug UP-TO-DATE

BUILD SUCCESSFUL

在这里,processInternalDebugResources 显示为UP-TO-DATE,而我认为它应该不是,当资源发生变化时文件。在 icon-per-flavour 更改之前,在类似的 Gradle 输出中,processInternalDebugResources 未显示为最新。

问题是,有什么方法可以解决这个问题,还是我偶然发现了 Android Gradle 插件中的错误?

我的build.gradle:

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.7.3'
}
}
apply plugin: 'android'

repositories {
mavenCentral()
}
dependencies {
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.google.guava:guava:15.0'
compile 'com.netflix.rxjava:rxjava-core:0.14.2'
compile 'com.netflix.rxjava:rxjava-android:0.14.2'
compile 'com.squareup.okhttp:okhttp:1.2.1'

compile 'com.android.support:support-v4:13.0.0'
compile 'com.android.support:support-v13:13.0.0'
}

android {
compileSdkVersion 19
buildToolsVersion "19"

defaultConfig {
minSdkVersion 14
targetSdkVersion 19
}

productFlavors {
production {
packageName "fi.company.app"
}
beta {
packageName "fi.company.app.beta"
}
internal {
packageName "fi.company.app.internal"
}
}

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

// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')

debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}

// Custom res directories for different flavors; used for
// setting different app icon.

sourceSets.production {
res.srcDirs = ['res', 'res-production']
}

sourceSets.beta {
res.srcDirs = ['res', 'res-beta']
}

sourceSets.internal {
res.srcDirs = ['res', 'res-internal']
}

signingConfigs {
release {
// ...
}
}
buildTypes {
release {
signingConfig signingConfigs.release
// ...
}
}
}

Gradle 1.9; Android Gradle 插件 0.7.3。

编辑:由于其他原因,我从产品口味切换到custom build types满足我的应用程序图标自定义需求。这个问题仍然存在,所以至少这不是特定于产品口味的。

最佳答案

好的,解决了这个问题。原来是我的build.gradle中的一个小问题。

对我有帮助的是尝试升级到 Gradle 插件 0.9.0,之后我开始收到如下错误:

* What went wrong:
A problem occurred configuring root project 'MyProject'.
> SourceSets 'debug' and 'main' use the same file/folder for 'res': /path/to/MyProject/res

好吧,我只是尝试从主 sourceSets 中删除 res.srcDirs = ['res'],仅此而已。

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

我保留了其余的 sourceSets 定义(res.srcDirs = ['res', 'res-beta'] for sourceSets.beta 等等) .

一切再次正常:构建类型(或产品风格)特定的自定义图标正在使用中,Gradle 再次正确地注意到增量构建中资源文件(例如布局)的更改!

(我通过使用更改后的 build.gradle 测试 Gradle 插件版本 0.8.1、0.9.0 和 0.9.3 来验证问题确实出在我的配置中。的确,插件中的更改并没有解决这个问题,即使 0.9.0 是开始给我有用的错误消息的版本。)

这里的根本原因可能是使用“旧项目结构”和最初由 Eclipse 生成的 build.gradle。无论如何,在 User Guide 中更仔细地研究源集和项目结构。可能也有帮助。

关于android - 每个构建变体有两个 res 目录,Gradle 停止跟踪资源文件中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20974524/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com