我已将我的项目迁移到使用 Gradle(使用旧的 Android 项目结构)。最近我将Android Studio升级到v0.2,这迫使我使用android gradle plugin v0.5。我可以使用我定义的任何风格来构建我的项目,无论是在调试/发布时。
使用以下场景对我来说出了点问题:
- 执行 gradlew clean
- 执行 gradlew assembleTestenvDebug
- 此时 Gradle 输出:
构建成功
- 修改styles.xml文件中的任意值
- 执行 gradlew assembleTestenvDebug (再次)
- 此时 Gradle 输出:
/Users/myuser/Project/src/com/namespace/project/views/SomeCustomView.java:60: 错误:找不到符号 mSize = arr.getInt(R.styleable.SomeCustomView_some_custom_styleable, 0);
Gradle 现在抱怨我在 attrs.xml 中声明的每个自定义 xml 属性。这让我发疯,因为每次修改styles.xml 时我都必须清理和重建我的项目
请帮帮我。
谢谢!
我的项目结构:
- Project
- . AndroidManifest.xml
- . assets/
- . build/
- . build.gradle
- . gen/
- . gradle/
- . gradle.properties
- . gradlew
- . libs (includes .jar files)
- . modules
- . . library_projectA
- . . library_projectB
- . out
- . project.properties
- . res
- . res_testenv
- . . values
- . . . strings.xml
- . res_prodenv
- . . values
- . . . strings.xml
- . settings.gradle
- . src/
- . . com/
- . . . namespace/
- . . . . android/
项目目录中的 build.gradle:
task wrapper(type: Wrapper) {
gradleVersion = '1.6'
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
dependencies {
compile 'com.android.support:support-v4:13.0.0'
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':modules:libprojectA')
compile project(':modules:libprojectB')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 10
targetSdkVersion 17
}
signingConfigs {
release {
}
}
buildTypes {
debug {
runProguard false
}
alphaRelease {
runProguard false
zipAlign true
signingConfig signingConfigs.release
}
release {
runProguard true
proguardFile 'proguard-project.txt'
signingConfig signingConfigs.release
}
}
productFlavors {
testenv {}
prodenv {}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
aidl.srcDirs = ['src']
}
testenv {}
prodenv {}
}
android.sourceSets.testenv {
res.srcDirs = ['res_test']
}
android.sourceSets.prodenv {
res.srcDirs = ['res_prod']
}
}
if (project.hasProperty('storeFile') && project.hasProperty('storePassword') &&
project.hasProperty('keyAlias') && project.hasProperty('keyPassword')) {
android.signingConfigs.release.storeFile = file(storeFile)
android.signingConfigs.release.storePassword = storePassword
android.signingConfigs.release.keyAlias = keyAlias
android.signingConfigs.release.keyPassword = keyPassword
}
和每个库项目的 build.gradle 文件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android-library'
dependencies {
compile 'com.android.support:support-v4:13.0.0'
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 10
targetSdkVersion 17
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
}
}
}
附加堆栈跟踪:
org.gradle.api.tasks.TaskExecutionException:任务“:compileTestenvDebug”执行失败。在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) 在 org.gradle .api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) 在 org.gradle.api.internal.changedetection.state.CacheLockReleeasingTaskExecuter$1.run(CacheLockReleeasingTaskExecuter.java:35) 在 org.gradle.internal。 org.gradle.cache.internal.DefaultCacheAccess 的 org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:179) 的工厂 $1.create(Factories.java:22)。有关详细信息,请参阅编译器错误输出。在 org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:42) 在 org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:33)在 org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:48) 在 org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:95) .api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:34) 在 org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.java:29) 在 org.gradle.api.internal .tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.java:20) 在 org.gradle.api.internal。