2016-09-12 2 views
4

Ich möchte lambdas in meinem Projekt verwenden, also entschied ich mich, zu Java 1.8 zu wechseln. Android Studio (2.1.3) hat mich gezwungen, jackOptions zu aktivieren. Außerdem habe ich Java 1.8 auf meinem Mac installiert und wenn ich javac -version im Terminal laufe bekomme ich javac 1.8.0_101 und das JDK in android studio points auf den richtigen.Gradle Build hängt, wenn jackOptions für Java aktiviert ist 1.8

Wenn ich versuche, mein Projekt zu bauen, wird gradle steckt: : App: compileDebugJavaWithJack

Ich habe die folgende und nichts funktionierte:

  • gradlew sauber
  • sauber -fdx git und neu importieren das Projekt
  • gradlew montieren --stacktrace

Wenn ich zu Java 1.7 zurückwechsle, verliere ich die lambdas-Funktion, aber das Projekt baut richtig auf.

Irgendwelche Ideen, was könnte das Problem sein?

UPDATE

Ok so nach gradle für mehr als 5 Minuten schließlich warten die folgenden Fehler haben spuckte:

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 

So habe ich auf multidex drehen und es blieb stecken auf Gebäude 96% >: app: transformJackWithJackForTablettsDebug

+0

Ich habe das gleiche Problem! Jemand beantwortet diese Frage: (( –

+1

@ HamedGh Ich fand das [Link] (https://source.android.com/source/jack.html#jack_troubleshooting). Gehen Sie jetzt durch, aber zumindest gibt es Hoffnung :) –

+0

TanX, ich stellte eine ähnliche Frage [hier] (http://stackoverflow.com/questions/39610749/upgrade-android-project-to-use-java-8-and-get-gc-overhead-limit-exceeded) und nach ein paar Stunden habe ich eine Lösung gefunden und meine eigene Frage beantwortet. Es kann dir auch helfen. –

Antwort

3

Die Lösung war die Heap-Größe zu erhöhen, statt 4 GB zu 6 GB. Das Projekt, das ich baue, ist ziemlich groß und die Bauzeit dauerte 30 Minuten bis zum Ende. Sie können meinen Fehlerbericht überprüfen Google zu diesem Thema auch here

Sie können die Heap-Größe in gradle.properties

org.gradle.jvmargs=-Xms256m -Xmx6144m 

oder

dexOptions { 
     javaMaxHeapSize "6g" 
} 

erhöhen.

4

Ich löste, indem Sie eine Zeile hinzufügen, um app/build.gradle multiDexEnabled = True als Belo w

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

... 
} 

und im Projekt build.gradle

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

funktioniert es immer noch nicht. Hier ist mein [link] (https://code.google.com/p/android/issues/detail?id=223354) zu dem Ticket, das ich bei Google eingereicht habe. Ich habe sogar den Cache-Ordner von Gradle unter ~/.gradle/cache gelöscht. –

Verwandte Themen