Подтвердить что ты не робот

Android + Scala + Intellij 13

Android - отличная платформа. Scala - отличный язык. Intellij Idea - отличная среда разработки.

Как все они могут работать вместе?

Примечание. Это ответ сам. Но если у вас есть дополнительная информация, пожалуйста, поделитесь ею здесь.

4b9b3361

Ответ 1

Да, они могут.

Предпосылки: Установлен SDK Scala. Scala Установлен плагин Intellij. Включены плагины Android Intellij.

Не требуется SBT и сторонних плагинов. Нет Gradle. Поддержка Gradle еще не совместима с плагином Scala. Сообщите мне, если это так.

  • Создать новый проект: В Intellij > Новый проект > Android: Модуль приложения > ... Название проекта, Выберите уровень API, Создайте MyActivity, как предложено > Готово
  • Создать Scala Библиотека: Открыть структуру проектa > Настройки платформы > Глобальные библиотеки > Новая глобальная библиотекa > Java > Обзор Scala SDK/lib > Выбрать scala -library.jar [При необходимости добавить ссылку на документы и источники]
  • Создать Scala Библиотека компилятора: Открыть структуру проектa > Новая глобальная библиотекa > Java > Обзор Scala SDK/lib > Выбрать scala -library.jar, scala -compiler.jar, scala -reflect.jar
  • Добавить Scala в модуль проекта: Открыть структуру проектa > Модули > Развернуть [ваш основной модуль] > + Добавить > Scala > Выбрать ранее добавленную библиотеку компилятора (должен быть указан в выпадающем списке)
  • Добавить Scala Библиотека для проекта Модуль: Открыть структуру проектa > Модули > Выбрать [ваш модуль]: Зависимости > + Добавить > Библиотекa > Выбрать "Scala -lib" (ранее добавленные в глобальные библиотеки)
  • Добавить proguard (в последнее время обнаружил, что Proguard больше не требуется для тестирования): Добавьте в свой proguard-project.txt > Scala Proguard. Открыть Структура проектa > Модули > Развернуть [ваш основной модуль] > Android: Proguard > Включить "Run Proguard" > Добавить ваш proguard-project.txt(имеющий Android SDK android-proguard.txt по умолчанию)
  • Создать Scala Класс действия: (Примечание. У вас уже есть Java-версия MyActivity, созданная по шаблону:/src/[your_package]/[MyActivity.class]). Правильно нажмите /src/ [your_package] > Создать > Scala класs > Назовите его [MyActivity] > Хорошо. Скопировать весь код из java MyActivity.class во вновь созданный MyActivity.scala > Intellij предлагает "Преобразовать код из Java" > Хорошо. Теперь у вас есть полностью функциональный MyActivity.scala. Удалить java MyActivity.class(без безопасного удаления) > Проверить AndroidManifest.xml, все еще связанный с MyActivity.
  • Наслаждайтесь: Запустите приложение в эмуляторе или устройстве. Если что-то пойдет не так (как обычно), просмотрите свои шаги. Тогда подумай. Затем попросите помощи.

Ответ 2

Я использую successfuly Scala 2.11.7 + Android Studio + Gradle с этим плагином gradle-android-scala-plugin и текущей конфигурацией:

build.gradle

buildscript {
    repositories {
        jcenter()
        mavenCentral()
        maven {
            url "http://saturday06.github.io/gradle-android-scala-plugin/repository/snapshot"
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.1'
        classpath 'jp.leafytree.gradle:gradle-android-scala-plugin:1.3.2'
        classpath "org.scala-lang:scala-library:2.11.7"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

приложение/build.gradle

apply plugin: 'com.android.application'
apply plugin: "jp.leafytree.android-scala"


android {
    compileSdkVersion 22
    buildToolsVersion "19.1.0"
    defaultConfig {
        applicationId "com.example.adray.myapplication"
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

    lintOptions {
        abortOnError false
    }

    sourceSets {
        main {
            scala {
                srcDir "src/main/scala" // default: "src/main/scala"
            }
        }

        androidTest {
            scala {
                srcDir "src/androidTest/scala" // default: "src/androidTest/scala"
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.github.satyan:sugar:1.3'
    compile 'org.scala-lang:scala-library:2.11.7'
    compile 'com.google.android.gms:play-services:7.5.0'
    compile 'com.android.support:appcompat-v7:22.2.0'
}

repositories {
    mavenCentral()
    jcenter()
}

proguard-rules.pro

-dontoptimize
-dontobfuscate
-dontpreverify
-dontwarn scala.**
-dontwarn android.support.v4.app.**
-dontwarn android.support.v4.view.**
-dontwarn android.support.v4.widget.**
-ignorewarnings
# temporary workaround; see Scala issue SI-5397
-keep class scala.collection.SeqLike {
    public protected *;
}

Ответ 3

Смотрите эту дискуссию, чтобы узнать больше об этом вопросе.