IntelliJ IDEAでScalaを使ってAndroid開発
Java IDEのIntellij IDEAで、JVM言語のScalaを使ってAndroidエミュレータを動かしてみました。
環境は、IntelliJ IDEA 2016.2とScala 2.11.8で、ビルドツールはsbt 0.13.12を使ってます。
ScalaとsbtはPCにインストールせずに、IntelliJ IDEAのプラグインのみで環境を構築しています。
目次
- 目次
- IntelliJ IDEAでAndroid開発の準備
- ScalaプラグインとSBTプラグインの確認
- sbtのJVM heap Sizeを変更
- Hello Scala
- IntelliJ IDEAでScala on Androidの気になる所
- 参考記事
- 開発環境
- 関連記事
IntelliJ IDEAでAndroid開発の準備
Mac OS XにIntelliJ IDEAを導入してAndroid開発の環境を整えるを参照下さい
ScalaプラグインとSBTプラグインの確認
Preferences > PluginsでScala
*1とSBT
が有効化*2されている事を確認
sbtのJVM heap Sizeを変更
Preferences > Plugins > Other Settings > SBTのIDE Settings
にあるVM parameters
を-Xmx2G -XX:MaxPermSize=2G
にする
sbtのビルドエラーでjava.lang.OutOfMemoryError
が出て処理が止まる事象が発生したため、sbt Reference Manualを参考に、初期設定値の-Xmx512M -XX:MaxPermSize=256M
から増やしました。
Hello Scala
Scala on Androidで提供されているテンプレートをIntelliJ IDEAにimportして、Hello Scala
をAndroidエミュレータに表示させます。
テンプレートにAndroid SDKを設定して開く
Open
かImport Project
でSBT projet
としてテンプレートを開きます*3
Project SDK
にAndroid API
を設定*4します
SBT project info
がBuild
*5されます
エディタが起動したら次の設定に進みます
Project StructureでModulesを設定
ビルドツールにsbt
を使うScalaのプロジェクトでは、Javaを使う一般的なAndroidプロジェクトとディレクトリの構成が異なりますので、Project Structure
でModules
にAndroid
を追加し、
Manifest file
や各種ディレクトリの場所を設定*6します。
Project StructureでAPK pathを設定
Androidアプリケーションが格納されるapkファイルの出力先も、通常のディレクトリと異なるようですので、Modules
のPackaing
からAPK path
*7を設定*8します。
通常のRun/Debugでパッケージされるapkファイルは、sbt.build
ファイルのname :=
の項目に設定したアプリ名に-debug.apk
を付加した名前になります。
Run/Debug ConfigurationsでRun SBTの設定
Run/Debug Configurations
でModule
を設定*9し、Before launch
の項目でビルドツールのsbt
をandroid:package
で設定します。
android:package
は、SBT Actionのドロップダウンのリストに表示されないので直接入力します。
RunでAndroidエミュレータを起動
Androidエミュレータの起動とコードのビルドが無事に完了して、apkファイルが生成されて、Androidエミュレータにアプリがインストールされれば、Hello Scala
が表示されます。
IntelliJ IDEAでScala on Androidの気になる所
Projectの作成からRunまで作業してみて、運用で対処する他の方法が見つからない箇所を記述しておきます。
Run/Debugでインデントが変わる
Scala Style GuideではScalaのインデントはスペース2つであり、IntelliJ IDEAのScalaのファイルのフォーマットもインデントはスペース2つなのですが、Run/Debugをすると、Androidアプリとして認識されるためか、Javaのフォーマットが適応されるようで、インデントが4に変わります。
Cmd + Opt + L
のショートカットを使えばファイルにフォーマットが適応されて修正できるので、ショートカットの利用で対処しています。
class MainActivity extends AppCompatActivity with TypedFindView { override def onCreate( savedInstanceState: Bundle ): Unit = { super.onCreate( savedInstanceState ) setContentView( R.layout.activity_main ) } }
が、
class MainActivity extends AppCompatActivity with TypedFindView { override def onCreate( savedInstanceState: Bundle ): Unit = { super.onCreate( savedInstanceState ) setContentView( R.layout.activity_main ) } }
に変わる。
RとかTRがcannot resolve symbolで赤くなる
新しいプロジェクトの作成直後や、ビルドファイルの編集後などに、R
とかTR
といったAndroidアプリのリソースに関わるクラスが、cannot resolve symbol
で赤くなる場合があります。
コードやプロジェクトの設定に間違いがない場合は、大抵は、ビルドしてみると解決されますが、ビルドが通るにもかかわらず赤いままの場合は、File -> invalidate cachesでInvalidate and Restartすると直る場合もあるらしいです。
参考記事
- Scala で Android を書きましょうという話
- Scala on Android The comprehensive documentation
- Scala on Android -★- Write Android apps in Scala!
- Scalacheat - Scala Documentation
- sbt Reference Manual
開発環境
- OSX 10.11.6 El Capitan
- IDE: InteiijJ IDEA Community Edition 2016.2
- Java Development Kit: Java SE Development Kit 8u101
- Android SDK Tools: android-sdk_r24.4.1-macosx
- Android Virtual Device: Android 6.0(Google APIs) API level 23 - Scala 2.11.8
- ビルドツール: sbt 0.13.12
関連記事
- IntelliJ IDEAのScala ConsoleでREPL - あかんわ
- IntelliJ IDEAでScala on Android using sbt Part.1[じゃんけんアプリ] - あかんわ
- IntelliJ IDEAでScala on Android using sbt Part.2[マシュマロパーミッション] - あかんわ
- IntelliJ IDEAでScala on Android using sbt Part.3[ギャラリーアプリ] - あかんわ
- IntelliJ IDEAでScala on Android using sbt Part.4[ビデオプレーヤー] - あかんわ
*1:IntelliJ IDEAのバージョンによってはIDEのインストール時に導入されるようです
*3:Checkout from Version Controlでgit cloneも可能です
*4:後からProject StructureのSDKsで設定することもできます
*5:sbtの起動が初めての場合はライブラリのダウンロードで10分前後かかります
*6:この設定を間違えるとno moduleとか言われます
*7:/projectdir/target/android/outputディレクトリ
*8:この設定を間違えるとThe APK file does not exist on diskとか言われます
*9:Project StructureでModulesを設定するとドロップダウンのリストに追加されます