2016-09-12 4 views
4

プロジェクトでlambdasを使用したいので、Java 1.8に切り替えることにしました。 Android Studio(2.1.3)ではjackOptionsを有効にしました。また、私はMacにJava 1.8をインストールしました。そして、端末でjavac -versionを実行すると、javac 1.8.0_101とAndroidスタジオのJDKが正しいものになります。Java 1.8でjackOptionsが有効になっているときにグラデルビルドが発生する

私は私のプロジェクトをビルドしようとすると、Gradleのが上立ち往生: :アプリに:compileDebugJavaWithJack

私は次ず、何もなかったが働いた:

  • gradlewクリーン
  • gitのクリーン-fdxをし、プロジェクトを再インポートする
  • gradlew - スタックトレースアセンブル

Java 1.7に戻すと、lambdaの機能は失われますが、プロジェクトのビルドは正しく行われます。

何が問題なのでしょうか?

[OK]を

UPDATEついにGradleの5分以上待った後、次のエラー吐くんでしたので:だから私はmultidexをオンにしなかったし、それが ビル96%に捕まってしまった

ERROR: Dex writing phase: classes.dex has too many IDs. Try using multi-dex 

com.android.jack.api.v01.CompilationException: Dex writing phase: classes.dex has too many IDs. Try using multi-dex 
     at com.android.jack.api.v01.impl.Api01ConfigImpl$Api01CompilationTaskImpl.run(Api01ConfigImpl.java:113) 
     at com.android.builder.core.AndroidBuilder.convertByteCodeUsingJackApis(AndroidBuilder.java:1852) 
     at com.android.builder.core.AndroidBuilder.convertByteCodeUsingJack(AndroidBuilder.java:1679) 
     at com.android.build.gradle.internal.transforms.JackTransform.runJack(JackTransform.java:221) 
     at com.android.build.gradle.internal.transforms.JackTransform.transform(JackTransform.java:195) 
     at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:178) 
     at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:174) 
     at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:156) 
     at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:173) 
     at sun.reflect.GeneratedMethodAccessor412.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:498) 
     at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75) 
     at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:245) 
     at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221) 
     at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:232) 
     at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210) 
     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) 
     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) 
     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.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:66) 
     at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) 
     at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52) 
     at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) 
     at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) 
     at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 
     at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203) 
     at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185) 
     at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66) 
     at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50) 
     at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) 
     at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: com.android.jack.JackAbortException: Dex writing phase: classes.dex has too many IDs. Try using multi-dex 
     at com.android.jack.backend.dex.DexFileWriter.run(DexFileWriter.java:90) 
     at com.android.jack.backend.dex.DexFileWriter.run(DexFileWriter.java:41) 
     at com.android.sched.scheduler.ScheduleInstance.runWithLog(ScheduleInstance.java:203) 
     at com.android.sched.scheduler.MultiWorkersScheduleInstance$SequentialTask.process(MultiWorkersScheduleInstance.java:466) 
     at com.android.sched.scheduler.MultiWorkersScheduleInstance$Worker.run(MultiWorkersScheduleInstance.java:163) 
Caused by: com.android.jack.backend.dex.DexWritingException: Dex writing phase: classes.dex has too many IDs. Try using multi-dex 
     at com.android.jack.backend.dex.SingleDexWritingTool.write(SingleDexWritingTool.java:59) 
     at com.android.jack.backend.dex.DexFileWriter.run(DexFileWriter.java:87) 
     ... 4 more 
Caused by: com.android.jack.backend.dex.SingleDexOverflowException: classes.dex has too many IDs. Try using multi-dex 
     ... 6 more 
Caused by: com.android.jack.tools.merger.MethodIdOverflowException: Method ID overflow when trying to merge dex files 
     at com.android.jack.tools.merger.ConstantManager.addDexFile(ConstantManager.java:177) 
     at com.android.jack.tools.merger.JackMerger.addDexFile(JackMerger.java:69) 
     at com.android.jack.backend.dex.DexWritingTool.mergeDex(DexWritingTool.java:149) 
     at com.android.jack.backend.dex.SingleDexWritingTool.write(SingleDexWritingTool.java:57) 
     ... 5 more 
:app:transformJackWithJackForTabletsDebug FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':app:transformJackWithJackForTabletsDebug'. 
> com.android.build.api.transform.TransformException: com.android.jack.api.v01.CompilationException: Dex writing phase: classes.dex has too many IDs. Try using multi-dex 

を>:app:transformJackWithJackForTabletsDebug

+0

私は同じ問題があります!誰かがこの質問に答える:(( –

+1

@HamedGh私は[link](https://source.android.com/source/jack.html#jack_troubleshooting)を見つけました。 –

+0

TanX、私は同様の質問[ここ](http://stackoverflow.com/questions/39610749/upgrade-android-project-to-use-java-8-and-get-gc-overhead-limit-exceeded)私は自分自身の質問に答えることができました。 –

答えて

3

build.gradleプロジェクト溶液代わりに4ギガバイトの6GBするヒープサイズを増加することでした。私が構築しているプロジェクトはかなり大きくビルド時間は30分かかりました。

あなたはまた、この問題hereについてGoogleにバグレポートをチェックアウトすることができgradle.properties

org.gradle.jvmargs=-Xms256m -Xmx6144m 

または

dexOptions { 
     javaMaxHeapSize "6g" 
} 

でヒープサイズを増やすことができます。

4

app/build.gradleに行を追加して解決しましたmultiDexEnabled = trueを次のように変更しました

android{ 
... 
    compileSdkVersion rootProject.compileVersion 
    buildToolsVersion rootProject.buildToolsVersion 
    defaultConfig { 
     multiDexEnabled true 
    } 

... 
} 

Wと

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.2.2'   
    } 
} 

allprojects { 
    repositories { 
     jcenter() 

    } 

} 

ext { 
    buildToolsVersion = "24.0.3" 
    supportLibVersion = "24.2.1" 
} 
+0

まだ動作しません。 Googleに提出したチケットに私の[link](https://code.google.com/p/android/issues/detail?id=223354)があります。私は〜/ .gradle/cacheの下にあるgradleのキャッシュフォルダもクリアしました。 –

関連する問題