2013-07-16 11 views
6

私は以前のAndroidプロジェクト構造を使用してGradleを使用するようにプロジェクトを移行しました。 私はアンドロイドスタジオをv0.2にアップグレードしました。これはアンドロイドのgradle plugin v0.5を使用するよう強制しました。 デバッグ/リリースのいずれかで定義した味のいずれかを使用してプロジェクトをビルドすることができます。styles.xmlを変更した後、2番目のビルドが失敗する

何かが次のシナリオを使用して、私のためにうまくいかない:

  • この時点でgradlew
  • gradlew assembleTestenvDebugを実行
  • クリーンGradleの出力を実行します。

BUILD SUCCESSFUL

  • 修正styles.xmlファイル内のy
  • この時点で(再び)
  • Gradleの出力をgradlew assembleTestenvDebugを実行します。

/Users/myuser/Project/src/com/namespace/project/views/SomeCustomView.java:60: error: cannot find symbol mSize = arr.getInt(R.styleable.SomeCustomView_some_custom_styleable, 0);

私はattrs.xmlに宣言した属性のGradleは今、すべてのカスタム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: Execution failed for task ':compileTestenvDebug'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.changedetection.state.CacheLockReleasingTaskExecuter$1.run(CacheLockReleasingTaskExecuter.java:35) at org.gradle.internal.Factories$1.create(Factories.java:22) at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:179) at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:232) at org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunningOperation(DefaultPersistentDirectoryStore.java:142) at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.longRunningOperation(DefaultTaskArtifactStateCacheAccess.java:83) at org.gradle.api.internal.changedetection.state.CacheLockReleasingTaskExecuter.execute(CacheLockReleasingTaskExecuter.java:33) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.ContextualisingTaskExecuter.execute(ContextualisingTaskExecuter.java:34) at org.gradle.api.internal.changedetection.state.CacheLockAcquiringTaskExecuter$1.run(CacheLockAcquiringTaskExecuter.java:39) at org.gradle.internal.Factories$1.create(Factories.java:22) at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:124) at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:112) at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(DefaultPersistentDirectoryStore.java:134) at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.useCache(DefaultTaskArtifactStateCacheAccess.java:79) at org.gradle.api.internal.changedetection.state.CacheLockAcquiringTaskExecuter.execute(CacheLockAcquiringTaskExecuter.java:37) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:41) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:42) at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:282) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.executeTask(DefaultTaskPlanExecutor.java:48) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.processTask(DefaultTaskPlanExecutor.java:34) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:27) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:89) at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61) at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67) at org.gradle.api.internal.changedetection.state.TaskCacheLockHandlingBuildExecuter$1.run(TaskCacheLockHandlingBuildExecuter.java:31) at org.gradle.internal.Factories$1.create(Factories.java:22) at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:124) at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:112) at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(DefaultPersistentDirectoryStore.java:134) at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.useCache(DefaultTaskArtifactStateCacheAccess.java:79) at org.gradle.api.internal.changedetection.state.TaskCacheLockHandlingBuildExecuter.execute(TaskCacheLockHandlingBuildExecuter.java:29) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61) at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67) at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166) at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113) at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81) at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64) at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33) at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26) at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50) at org.gradle.api.internal.Actions$RunnableActionAdapter.execute(Actions.java:171) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) at org.gradle.launcher.Main.doAction(Main.java:48) at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) at org.gradle.launcher.Main.main(Main.java:39) at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50) at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32) at org.gradle.launcher.GradleMain.main(GradleMain.java:26) at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33) at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48) Caused by: org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler error output for details. at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:42) at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:33) at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:95) at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:48) at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:34) at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.java:29) at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.java:20) at org.gradle.api.internal.tasks.compile.IncrementalJavaCompilerSupport.execute(IncrementalJavaCompilerSupport.java:33) at org.gradle.api.internal.tasks.compile.IncrementalJavaCompilerSupport.execute(IncrementalJavaCompilerSupport.java:24) at org.gradle.api.tasks.compile.Compile.compile(Compile.java:68) at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:216) at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:122) at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:147) at org.gradle.api.tasks.compile.JavaCompile_Decorated.invokeMethod(Unknown Source) at org.gradle.util.ReflectionUtil.invoke(ReflectionUtil.groovy:23) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:217) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:199) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:526) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:509) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) ... 70 more

+0

'res'の' style.xml'や 'res_flavor1'のような別のフォルダを変更していますか? – Joe

+0

@Joe - 主なプロジェクトディレクトリからres/values/styles.xmlを修正しています。味はありません。 – woot

答えて

2

これは0.5.4で修正されました。これは現在利用可能です。

+0

本当にありがとう=) – woot

+0

問題:http://code.google.com/p/android/issues/detail?id=57569 – woot

2

私には理論がありますが、私は間違っている可能性があります。

user guideをご覧ください。 カスタムソースセットを直接追加する方法については、直接ご確認ください。これは、フレーバーまたはbuildTypeの一部である でない限り、 ビルドシステムがtestenvのようなsourceSetの変更を検出しないことを意味します。

あなたの環境をフレーバーグループとして定義することを試みます。わからない に関する特定の要件が、それは次のようになります。これは、想定している

flavorGroups "environment", "flavors" 
productFlavors { 
    testenv { 
     flavorGroup "environment" 
    } 

    prodenv { 
     flavorGroup "environment" 
    } 

    flavorA { 
     flavorGroup "flavors" 
     ... 
    } 

    flavorB { 
     flavorGroup "flavors" 
     ... 
    } 

あなたは app-flavor1-testenv-debug.apkようなこれらの2で構成することができ、ビルドが必要です。ちょっと考えましたが、私はそれをテストしていません。

また、あなたがこの作業をしたら、新しいレイアウトに移行することをお勧めします。そうすればとsrc/debug/resとが合併したsrc/main/resの慣例に頼ることができ、その場合はbuild.gradleに言及する必要はありません。

+0

また、これを確認してください:http://stackoverflow.com/questions/16737006/using-build-flavors-structuring-source-folders-and-build-gradle-correctly – woot

+0

ああ、持っています。うん、私はすべての味について疑問に思っていた:-)。私たちはプロジェクトで4を使用し、デバッグ用のリリース署名付きビルドとは異なるAPIキーを使用していました。新しいレイアウトから大きな恩恵を受けました。 – Joe

+3

と言っていますが、どのようにフレーバーが実装されているか分かりませんが、 'testenv.srcDirs'のデフォルト値に' sourceSets.main.java.srcDirs'が含まれていて、 '['res_test']だけに設定されていると上書きされます'。 'res.srcDirs + = 'res_test''で試してください。 – Joe

関連する問題