Jon*_*nik 6 android gradle android-gradle-plugin
我非常无辜地转而使用不同的应用程序图标来表示每种产品的味道:
sourceSets.production {
res.srcDirs = ['res', 'res-production']
}
sourceSets.beta {
res.srcDirs = ['res', 'res-beta']
}
sourceSets.internal {
res.srcDirs = ['res', 'res-internal']
}
Run Code Online (Sandbox Code Playgroud)
事情是,在这之后,摇篮停止注意到任何布局文件的变化,比如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
Run Code Online (Sandbox Code Playgroud)
在这里,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
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
Gradle 1.9; Android Gradle插件0.7.3.
编辑:出于其他原因,我从产品风格切换到自定义构建类型,以满足我的应用程序图标自定义需求.这个问题仍然存在,因此至少这不是特定产品风味.
好的,解决了这个问题。事实证明这是我的一个小问题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
Run Code Online (Sandbox Code Playgroud)
好吧,我只是尝试从主 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']
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
我保留了其余的 sourceSets 定义不变(res.srcDirs = ['res', 'res-beta']对于sourceSets.beta等)。
一切再次正常:使用构建类型(或产品风格)特定的自定义图标,Gradle 再次正确地注意到增量构建中资源文件(例如布局)的更改!
(我通过使用 Gradle 插件版本 0.8.1、0.9.0 和 0.9.3 进行测试,验证了问题确实出在我的配置中build.gradle。事实上,插件中的更改并没有解决这个问题,即使 0.9.0 是开始给我提供有用的错误消息的版本。)
这里的根本原因可能是使用了build.gradle最初由 Eclipse 生成的“旧项目结构” 。无论如何,在用户指南中更仔细地研究源集和项目结构可能也会有所帮助。
| 归档时间: |
|
| 查看次数: |
5884 次 |
| 最近记录: |