С двумя каталогами res для каждого варианта сборки Gradle прекратил отслеживать изменения в файлах ресурсов.
Я совершенно невинно перешел на использованиеразличные значки приложений для каждого продукта вдоль этих линий:
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/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
пока думаю что долженне быть, когда есть измененные файлы ресурсов. Перед изменением иконки на вкус в аналогичном выводе 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.
редактировать: По другим причинам я перешел с продукта на вкуспользовательские типы сборки для моего приложения требует настройки иконок. Эта проблема все еще остается, так что, по крайней мере, это невкус продукта специфический.