2011-10-09 6 views
11

Dopo aver eseguito a testa in testa tutti i problemi quanti sono le permutazioni del set di strumenti da riga di comando Android, sono finalmente riuscito a compilare un mix di codice sorgente Scala e Java in un apk utilizzabile.Android, Scala e Proguard

Come molti suggeriscono, ho utilizzato proguard per comprimere la libreria Scala tramite lo strumento dex. Il problema è questo:

BUILD SUCCESSFUL 
Total time: 1 minute 29 seconds 

Un minuto e mezzo. Stiamo parlando di un'applicazione con la complessità di Hello-World qui. Non penso di poterlo sviluppare in questo modo. Ho bisogno di prendere lezioni di meditazione. ci

-injars ${out.absolute.dir}/classes:${scala-library.jar}(!META-INF/MANIFEST.MF,!library.properties) 
-outjars ${out.absolute.dir}/classes.min.jar 
-libraryjars ${android.jar} 
-dontwarn 
-dontoptimize 
-dontobfuscate 
-keep public class * extends android.app.Activity 

è un modo per accelerare il passo Proguard:

Questa è la configurazione proguard?

Modifica: Sto eseguendo questo in una macchina ram dual-core, 3GB abbastanza onesto, in cima a Linux a 64-bit. Una corsa di ant compile (scalac/javac) richiede 3 secondi. Un intero ant install richiede 1:30, come descritto sopra. È il passo proguard che "si blocca", in base all'output, molto probabilmente a causa delle dimensioni della lib di scala/android runtime.

+0

abbiamo bisogno ancora un po ' dettagli, ad esempio il set-up della macchina .. un numero di cpus, ram, ecc. –

+0

presumibilmente il compilatore sarebbe il collo di bottiglia che il compilatore stai usando? –

+0

Vedi anche: http://proguard.sourceforge.net/manual/examples.html # Scala. Penso che non sia il colletore del collo di bottiglia, ma solo gli 8,5 Mb di scala runtime impiegano un po 'di tempo a leggere e fare i bagagli. – Rogach

risposta

7

Utilizzo di Android Le build di Ant non sono probabilmente la soluzione giusta.

L'attuale "miglior consiglio" è quello di utilizzare SBT con la

plugin.

+1

concordato. Ma sii consapevole dei problemi con 2.9.1 che cito nel mio commento sopra. È possibile installare le librerie Scala (2.8.x) su un dispositivo ed evitare il passo Proguard, come descritto qui: http://zegoggl.es/2011/07/how-to-preinstall-scala-on-your- android-phone.html, ma tieni presente che ci sono alcuni problemi (non ancora risolti per quanto ne so) con la versione più recente di Android SDK. –

+1

Non ho ancora provato SBT, ma non capisco come possa essere d'aiuto. Non esegue automaticamente la stessa esecuzione di proguard programmata manualmente? – slezica

+0

Nota che la proguarding ora fa parte del plug-in sbt android (non aver paura del messaggio di licenza fuorviante e non corretto visualizzato, vedi https://github.com/jberkel/android-plugin/issues/129) – ron

5

ProGuard richiede molto più tempo per ridurre la libreria Scala 2.9.1 rispetto alla libreria Scala 2.8.1 (54 secondi contro 13 secondi, per 8.5 MB contro 6.2 MB). O la struttura delle classi della libreria è cambiata radicalmente, o alcune nuove classi stanno causando calcoli eccessivi. Dovrò capire se ProGuard o la sua configurazione possono essere migliorati per questo caso. Per ora, potresti essere in grado di lavorare con Scala 2.8.1.

Suppongo che la configurazione di ProGuard contenga anche le opzioni richieste per Android e per Scala, come discusso nello ProGuard manual. Se si utilizza il normale processo di build di Android, l'input (classes, libs) e le librerie (android.jar) sono già specificati per l'utente nel file di build Ant e non è necessario specificarli nuovamente nel file di configurazione di ProGuard. Leggendoli due volte ci vorrà del tempo e genererà molti avvertimenti (che tu hai spento completamente - è più sicuro spegnerli selettivamente).

+0

più a lungo, sto incontrando strani problemi con Proguard e Scala 2.9.1. Dopo l'offuscamento, il restringimento rimuove le cose di scala di base come Traversable o HashMap.foreach ecc. In questo modo il programma fallirà con classe ClassNotFoundError axy (ecc.) Proguard_map punta axy sugli oggetti Scala sopra menzionati e usati. – vertti

+0

@vertti Un programma HelloWorld elaborato (combinato con Scala 2.9.1) funziona bene quando lo provo, quindi avrò bisogno di maggiori dettagli sul codice. Se pubblichi una domanda separata qui o nel forum di assistenza di ProGuard, cercherò di esaminarla. –

+0

Grazie, ci proverò, ma il mio gioco attuale è di circa 6000 linee di scala e strappare una parte funzionale che ancora rompe proguard potrebbe rivelarsi difficile. – vertti