简体   繁体   English

Android + Scala + Intellij 13

[英]Android + Scala + Intellij 13

Android is great platform. Android是很棒的平台。 Scala is great language. Scala是很棒的语言。 Intellij Idea is great IDE. Intellij Idea是一款出色的IDE。

How all of them can work together? 他们如何一起工作?

Note: It's a self answer. 注意:这是一个自我回答。 But if you have more info, please share it here. 但如果您有更多信息,请在此处分享。

Yes they can. 是的他们可以。

Prerequisites: Scala SDK installed. 先决条件:已安装Scala SDK。 Scala Intellij plugin installed. 已安装Scala Intellij插件。 Android Intellij plugins enabled. 已启用Android Intellij插件。

No SBT and third party plugins needed. 不需要SBT和第三方插件。 No Gradle. 没有Gradle。 Gradle support is not yet compatible with Scala plugin. Gradle支持尚未与Scala插件兼容。 Inform me if it is. 如果是,请通知我。

  1. Create new project: In Intellij > New project > Android : Application module > ...Name project, Select API level, Create MyActivity as suggested > Finish 创建新项目:在Intellij>新项目> Android:应用程序模块> ...名称项目,选择API级别,按建议创建MyActivity>完成
  2. Create Scala Library: Open Project Structure > Platform Settings > Global Libraries > New Global Library > Java > Browse Scala SDK /lib > Select scala-library.jar [Optionally add link to docs and sources] 创建Scala库:打开项目结构>平台设置>全局库>新建全局库> Java>浏览Scala SDK / lib>选择scala-library.jar [可选择添加指向文档和源的链接]
  3. Create Scala Compiler Library: Open Project Structure > New Global Library > Java > Browse Scala SDK /lib > Select scala-library.jar, scala-compiler.jar, scala-reflect.jar 创建Scala编译器库:打开项目结构>新建全局库> Java>浏览Scala SDK / lib>选择scala-library.jar,scala-compiler.jar,scala-reflect.jar
  4. Add Scala to project module: Open Project Structure > Modules > Expand [your main module] > + Add > Scala > Select "Compiler library" previously added (should be listed in drop down list) 将Scala添加到项目模块:打开项目结构>模块>展开[您的主模块]> +添加> Scala>选择之前添加的“编译器库”(应列在下拉列表中)
  5. Add Scala Library to project Module: Open Project Structure > Modules > Select [your module] : Dependencies > + Add > Library > Select "Scala-lib" (previously added to Global libraries) 将Scala库添加到项目模块:打开项目结构>模块>选择[您的模块]:依赖关系> +添加>库>选择“Scala-lib”(之前添加到全局库)
  6. Add proguard (lately discovered that Proguard is not required for testing anymore) : Add the following to your proguard-project.txt > Scala Proguard . 添加proguard (最近发现不再需要Proguard进行测试)将以下内容添加到proguard-project.txt> Scala Proguard中 Open Project Structure > Modules > Expand [your main module] > Android : Proguard > Enable "Run Proguard" > Add your proguard-project.txt (having default Android SDK android-proguard.txt) 打开项目结构>模块>展开[您的主模块]> Android:Proguard>启用“Run Proguard”>添加您的proguard-project.txt(具有默认的Android SDK android-proguard.txt)
  7. Create Scala Activity class: (Note: You already have the Java version of MyActivity created by template: /src/[your_package]/[MyActivity.class]). 创建Scala Activity类:( 注意:您已经拥有由模板创建的MyActivity的Java版本:/src/ [your_package] / [MyActivity.class])。 Right click /src/[your_package] > New > Scala class > Name it [MyActivity] > Ok. 右键单击/ src / [your_package]>新建> Scala类>将其命名为[MyActivity]>确定。 Copy all code from java MyActivity.class into newly created MyActivity.scala > Intellij suggests to "Convert code from Java" > Ok. 所有代码从java MyActivity.class 复制到新创建的MyActivity.scala> Intellij建议“从Java转换代码”>确定。 Now you have fully functional MyActivity.scala. 现在您拥有功能齐全的MyActivity.scala。 Remove java MyActivity.class (without safe delete option) > Check AndroidManifest.xml still linked to MyActivity. 删除 java MyActivity.class(没有安全删除选项)>检查仍然链接到MyActivity的AndroidManifest.xml。
  8. Enjoy: Run you app in emulator or device. 享受:在模拟器或设备中运行您的应用程序。 If something goes wrong (as usual) please review your steps. 如果出现问题(像往常一样),请检查您的步骤。 Than think yourself. 想想自己。 Than ask help. 比问帮忙。

I use successfuly Scala 2.11.7 + Android Studio + Gradle with this plugin gradle-android-scala-plugin and current config: 我成功使用Scala 2.11.7 + Android Studio + Gradle与此插件gradle-android-scala-plugin和当前配置:

build.gradle 的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()
    }
}

app/build.gradle 应用程序/的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 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 *;
}

有关此问题的更多意见,请参阅此讨论

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM