我非常无辜地转而使用不同的应用程序图标来表示每种产品的味道:
sourceSets.production { res.srcDirs = ['res', 'res-production'] } sourceSets.beta { res.srcDirs = ['res', 'res-beta'] } sourceSets.internal { res.srcDirs = ['res', 'res-internal'] }
事情是,在这之后,摇篮停止注意到任何布局文件的变化,比如res/layout/activity_faq.xml
,和需要一个干净的构建每次,如果我想包括在APK我的XML的变化.
我首先想到这是一个Android Studio问题,但实际上我可以在命令行上使用纯Gradle重现它,只需查看下面显示的文件build/res/all/internal/debug/layout
.
当我跑./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
,虽然我觉得应该不会是,当有改变资源文件.图标每味改变之前,类似的摇篮输出,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.
编辑:出于其他原因,我从产品风格切换到自定义构建类型,以满足我的应用程序图标自定义需求.这个问题仍然存在,因此至少这不是特定产品风味.