Android, Scala и Proguard - PullRequest
       28

Android, Scala и Proguard

12 голосов
/ 09 октября 2011

После того, как я столкнулся с таким количеством проблем, сколько существует перестановок набора инструментов командной строки Android, мне наконец удалось скомпилировать смесь исходного кода Scala и Java в пригодный для использования apk.предположим, я использовал proguard, чтобы сжать библиотеку Scala с помощью инструмента dex.Проблема в следующем:

BUILD SUCCESSFUL
Total time: 1 minute 29 seconds

Полторы минуты.Мы говорим о приложении со сложностью Hello-World здесь.Я не думаю, что смогу так развиваться.Мне нужно будет пройти курсы медитации.

Это конфигурация proguard:

-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

Есть ли способ ускорить шаг гвардейца?

Редактировать : Я использую это на довольно приличном двухъядерном компьютере с 3 ГБ оперативной памяти, поверх 64-битного Linux.Прогон ant compile (scalac / javac) занимает 3 секунды.Полный ant install занимает 1:30, как описано выше.Это proguard шаг, который "зависает", согласно выводу, скорее всего, из-за размеров библиотеки времени выполнения scala / android.

Ответы [ 3 ]

7 голосов
/ 09 октября 2011

Работа через сборку Android Ant, вероятно, не является правильным способом для этого.

Текущий «лучший совет» - использовать SBT с

плагинов.

6 голосов
/ 10 октября 2011

ProGuard сокращает библиотеку Scala 2.9.1 намного дольше, чем библиотека Scala 2.8.1 (54 секунды против 13 секунд, 8,5 МБ против 6,2 МБ). Либо структура библиотечных классов существенно изменилась, либо некоторые новые классы вызывают чрезмерные вычисления. Я должен выяснить, можно ли улучшить ProGuard или его конфигурацию для этого случая. Сейчас вы можете работать с Scala 2.8.1.

Я предполагаю, что ваша конфигурация ProGuard также содержит необходимые параметры для Android и для Scala, как описано в руководстве ProGuard . Если вы используете обычный процесс сборки Android, вход (classes, libs) и библиотеки (android.jar) уже указаны для вас в файле сборки Ant, и вам не нужно указывать их снова в файл конфигурации ProGuard. Чтение их дважды потребует времени и выдаст много предупреждений (которые вы полностью отключили - безопаснее их выборочно отключать).

4 голосов
/ 11 октября 2011

Если у вас есть рутированный телефон и вы хотите только протестировать его, вы можете установить библиотеки scala прямо на ваш телефон, чтобы вам больше не понадобился шаг proguard:

https://github.com/jrudolph/scala-android-libs

...