Intereting Posts
АБР не отвечает. Вы можете подождать больше или уничтожить процесс «adb.exe» вручную и нажать «Перезагрузить», Размер кучи Android на разных телефонах / устройствах и версиях ОС Пользовательский макет для элемента Spinner Плохое качество изображения при использовании пользовательской камеры TypeError «Не удается установить соединение свойств # <Navigator>» в консоли при обновлении проекта до последней версии Cordova 4.0.0 На вкладке галактики onCompletionListener videoView не получает вызов Gps статус включен / отключен широковещательный приемник Espresso соответствует первому элементу, найденному, когда многие из них находятся в иерархии Индикатор / значок Android ExpandableListView всегда растягивается ViewPager обнаруживает, когда пользователь пытается вывести из пределов Что означает ic_launcher? Извлечение только первых 100 строк изображения из медиасторы Изображения изображений на Android ImageGetter, перекрывающиеся Как обращаться с Touch вне представления в Android? Установка приложения Android Market на эмуляторе

Ориентация на Android с Scala 2.8.

Определяющая ссылка на использование Scala на андроиде, похоже, находится здесь: http://www.scala-lang.org/node/160

К сожалению, все ссылки на использование scala с android основаны на Scala 2.7 и ссылаются на пользовательскую сборку android-library.jar с несколькими загадочными ссылками, предполагающими, что эта пользовательская сборка не нужна для более поздних версий android (I ' М с использованием 2.1 / API v7)

Итак … Каковы шаги, необходимые для использования Scala 2.8 в проекте Android? Предпочтительно использовать eclipse и инструменты Android, которые Google предоставляет для этой среды.

Solutions Collecting From Web of "Ориентация на Android с Scala 2.8."

Редактировать:

Мой новый способ сделать это – использовать мой плагин Eclipse: https://github.com/banshee/AndroidProguardScala (в readme есть инструкции по установке и указатель на обычный сайт обновления Eclipse).

Старый ответ по-прежнему работает, но новый способ только лучше.

[Старый путь] Мой подход:

  • Используйте обычные инструменты Android / eclipse для создания Java-проекта.
  • Добавьте второй проект, содержащий код Scala. Таким образом, я получаю сгенерированный код для будущей справки (я новичок в Android и Scala). Этот проект может ссылаться на android.jar.
  • Проект scala создает файл jar, который используется в проекте java
  • Используйте proguard для разметки библиотеки. Я считаю, что это позволяет избежать необходимости в scala-android.jar, который использовался в 2.7

Я не использовал это для чего-то более амбициозного, чем привет, мир, хотя, так что возьмите его как больше набора намеков.

В проекте scala я добавляю построитель (Builder> New), который представляет собой только скрипт оболочки pguard в корневой директории проекта, содержащий:

#!/bin/sh cd $1 PROGUARD=$HOME/dev/proguard/lib/proguard.jar LIBS= OUTPUT=lib/proguard.jar rm -f $OUTPUT AJAR=/Users/jamesmoore/dev/android-sdk-mac_86/platforms/android-7/android.jar # java -jar $PROGUARD -injars 'bin:lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties)' -outjar $OUTPUT -libraryjars @proguard.txt java -Xmx1g -jar $PROGUARD -injars 'bin:lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties)' -outjar $OUTPUT -libraryjars $AJAR @proguard.txt 

У конструктора Location установлено значение:

 ${build_project}/pguard 

И как рабочий каталог, так и аргументы, установленные для

 ${build_project} 

Также в корне проекта scala есть аргумент proguard file @ proguard.txt:

 -dontwarn -dontoptimize -dontobfuscate -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -keepattributes Exceptions,InnerClasses,Signature,Deprecated, SourceFile,LineNumberTable,*Annotation*,EnclosingMethod -keep public class com.banshee.** { public protected *; } 

Конечно, вы захотите изменить аргументы -keep, чтобы сохранить свой собственный код.

В проекте java я добавляю файл jar, созданный проектом scala (я использую lib / proguard.jar в сценарии выше).

Однако не добавляйте проект scala в качестве требуемого проекта в путь сборки проекта java. Это добавит файлы класса scala в дополнение к файлу jar и смущает dex (так как он получит как файлы .class, так и те же вещи в банке). Насколько я могу судить, Eclipse построит все в рабочей области, поэтому, когда вы нажмете кнопку go, оба проекта будут построены.

После долгих исследований это действительно похоже на то, что Proguard имеет важное значение для поддержания размера и скорости развертывания приложения на разумных уровнях.

К сожалению, нет подходящего способа встраивания proguard в качестве шага сборки. Использование сценариев может быть возможным, но мне также необходимо поддерживать среды Windows, Linux и OSX.

Я также не был уверен в решении с двумя проектами, поскольку он не позволял Scala-коду использовать сгенерированный файл ресурсов R.java, который я хотел бы сделать.

В конце концов, я смог сделать как SBT, так и Ant сборки приложения Android 2.1 с помощью Scala 2.8. Ant был излюбленным окончательным решением, поскольку он работает с той же файловой организацией, что и плагин eclipse от Android. Я написал решение здесь: http://scala-ide.assembla.com/wiki/show/ae55a-oWSr36hpeJe5avMc/Developing_for_Android

Затем Eclipse запускает Ant как внешний инструмент для упаковки и установки приложения.

Теперь я использую модификацию моего предыдущего ответа для запуска в Windows: просто переместите все в @ proguard_windows.txt, чтобы вам не пришлось беспокоиться о запуске в качестве скрипта.

Мой новый файл @ proguard_windows.txt выглядит так:

 -injars bin;lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties) -outjar gen/scandroid.jar -libraryjars lib/android.jar -dontwarn -dontoptimize -dontobfuscate -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -keepattributes Exceptions,InnerClasses,Signature,Deprecated, SourceFile,LineNumberTable,*Annotation*,EnclosingMethod -keep public class com.banshee.** { public protected *; } -keep public class org.xml.sax.EntityResolver { public protected *; } 

И обратите внимание, что в окнах вам нужно использовать точку с запятой для -injars. Насти.

Строитель выглядит так:

 (running cygwin here, so the cat option path takes a slash) James@Greine:/cygdrive/c/Users/james/workspace/Scala2$ cat .externalToolBuilders/proguard.launch <?xml version="1.0" encoding="UTF-8" standalone="no"?> <launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType"> <booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="C:\Windows\System32\java.exe"/> <stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,"/> <stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-Xmx1g -jar lib/proguard.jar @proguard_windows.txt"/> <booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> <stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${build_project}"/> </launchConfiguration> 

Вы хотите поместить это в .externalToolBuilders / proguard.launch.

Интересно, что это просто команда java, а не какой-либо сценарий оболочки, поэтому довольно легко переносить между Windows / Mac (и я предполагаю Linux, но еще не сделал этого), так как вы Просто изменив местоположение фактического двоичного кода Java.

(Отправляя это как новый ответ, потому что он немного отличается от того, который был отмечен как правильный (иш) ответ)

Я использую Proguard для поиска библиотеки Scala в сборниках Eclipse / ADT, но это оставляет желать лучшего. Он медленный, и он испортит другие .class-файлы, поэтому вам нужно чаще перестраивать проект.

Вдохновленный этими вопросами и некоторыми проблемами в трекерах для Android, я сделал еще один инструмент (основанный на Jar Jar Links), который я теперь использую, чтобы treeshake библиотека scala. На этом этапе сборки я действительно доволен всей Eclipse + ADT Scala в ситуации на Android. Возможно, это сработает и для вас, дайте ему вращение, оно доступно на http://code.google.com/p/treeshaker/

Если вам удобно использовать инструмент сборки Gradle, плагин Android для Gradle делает весь этот процесс чрезвычайно простым. См .: http://wiki.github.com/jvoegele/gradle-android-plugin/