Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android compilation is slow (using Eclipse)

When I change any .java file and build, the compilation takes 16 seconds. I don't understand why it should be so slow!?

I enabled verbose output for Andoroid.

Window > Preferences > Android > Build output > Verbose. 

The result output (Console > Android) is:

[19:46:10] Refreshing resource folders. [19:46:10] Starting incremental Pre Compiler: Checking resource changes. [19:46:10] Nothing to pre compile! [19:46:10] Starting incremental Package build: Checking resource changes. [19:46:10] ignored resource ...\bin\.\classes.dex [19:46:10] processing ...\A.class [19:46:10] processing ...\B.class     ... [19:46:21] processing com/google/inject/util/Providers.class... [19:46:21] processing com/google/inject/util/Types.class... [19:46:24] Using default debug key to sign package [19:46:24] Packaging ...\bin\resources.ap_ [19:46:24] Packaging classes.dex     ... [19:46:25] Packaging ...\annotations.jar [19:46:25] Build Success! [19:46:25] Refreshing resource folders. [19:46:25] Starting incremental Pre Compiler: Checking resource changes. [19:46:26] Nothing to pre compile! 

The "processing" of .class files took 14 seconds. And it "processed" all files, even from all .jar files linked. I think some thing wrong goes here, as only one .java file was changed.

What can I do to improve the compilation speed?

like image 860
alex2k8 Avatar asked May 21 '10 16:05

alex2k8


1 Answers

I think there's a misunderstanding here. As you say, only the modified classes are recompiled (by Eclipse in a matter of milliseconds); after that, however, the ADT plugin takes every compiled class and translates it into Dalvik's bytecode format via the dx tool. The output of this process is a single file, classes.dex, which contains all the classes in your application, including the ones coming from referenced libraries. This last "translation" step is the one that takes longer because it's really poorly optimized: the ADT plugin doesn't cache anything, it just retranslates every class at every build (and it's painfully slow). For medium to big projects this gets really frustrating... I hope Google will improve that in a future ADT/SDK release.

like image 107
lencinhaus Avatar answered Oct 09 '22 21:10

lencinhaus