9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Android】Android with Scala 事始め【Scala】

Last updated at Posted at 2014-09-11

2014/09/11時点

タイトル通り。
今ならずいぶん簡単にできますよ~ということをアピールします。
なお私、JavaでのAndroid開発はやったことはありません...。

※注意
利用しているpfn/android-sdk-pluginはバージョンアップが激しいです。情報がすぐに古くなる可能性が有ります。

この手法のメリットは、下記です

  • Scalaで書ける(Better Java, OOPxFP)
  • sbtによるビルド管理(パッケージの追加など、比較的楽)

#検証環境

  • MacOSX 10.9.4
  • IntelliJ IDEA 14 EAP(Scalaプラグインインストール済み)
  • GenyMotion(エミュレータ)

#事前準備

  • android sdk インストール
  • sbtインストール

#プロジェクトの作成

  • 基本、ココの手順に沿って行くだけですが、一応順番に。

##ひな形ファイルの用意

sbtプロジェクトを配置するディレクトリつくって、その配下にsbtプラグインの記述をします。

$ mkdir [path/to/project]
$ mkdir [path/to/project]/project
$ cd [path/to/project]
$ vi project/plugins.sbt
plugins.sbt
addSbtPlugin("com.hanhuy.sbt" % "android-sdk-plugin" % "1.3.5")

resolvers += Resolver.sbtPluginRepo("snapshots")

addSbtPlugin("com.hanhuy.sbt" % "sbt-idea" % "1.7.0-SNAPSHOT")

↑IntelliJ用のプラグインも入れてます

##コマンドでプロジェクトのひな形作成

sbtコマンドと拡張コマンドで、プロジェクトのひな形を作ります


$ cd [path/to/project]
$ sbt
#~~~~~sbtコンソールが起動していろいろ入る
> gen-android android-19 com.takudo.hogehoge takudotest

gen-androidの引数は

  • APIレベル
  • パッケージ名
  • 名称

の順で↑の例のように渡す。

※この後 [error] java.lang.NoClassDefFoundError: sbt/Plugins が発生、sbtのバージョンを0.13.5に変更することでエラーが出なくなる

project/build.properties
sbt.version=0.13.5

##IntelliJ用設定ファイルを作る

$ sbt
> gen-idea

IntelliJで開いてみる

File > Openからプロジェクトのディレクトリを選択する

IntelliJ_IDEA__Cassiopeia__IU-138_1980_1.jpg

##エミュレータで動かしてみる

sbt でビルド

sbtコンソールでデバッグ用パッケージを作成します。

> ~android:package-debug

(頭の~でファイルの変更を監視してコンパイルかけてくれるようになります)

IntelliJ SDK設定

IntelliJのSDK設定ができていないはずなので、選択します

File > ProjectStructure

Project_Structure.jpg

Project_Structure.jpg

Project_Structure.jpg

IntelliJデバッグ設定

IntelliJのデバッグのEditConfigurationsで、
下記のようにデバッグ設定を作ります。

Run_Debug_Configurations.jpg

デバッグ実行

虫のアイコンをクリックするとデバイス選択画面が出るので、GenyMotionで動かしているエミュレータを選択します。

Choose_Device.jpg

おー動いた!

Genymotion_for_personal_use_-Google_Nexus_7-4_4_2-API_19-800x1280__800x1280__213dpi_-_192_168_57_100.jpg

ブレイクポイントでも止まります。

IntelliJ_IDEA__Cassiopeia__IU-138_1980_1.jpg

でもまだこれJavaのソースなんで、Scalaで書きます。

#Scalaでソースコード書いてみる

とりあえずデフォルトで出来上がるJavaのMainActivityをそっくりScalaに移植します。

src/main配下に、
src/main/scala/[パッケージ]/MainActivity.scala
を作りましょう。

(Javaのソースコードをコピーして、scalaのファイルに貼り付けると面白いので試してみてください)

scalaのコードはこんなかんじだと思います。

src/main/scala/[パッケージ]/MainActivity.scala

package [パッケージ]

import android.app.Activity
import android.os.Bundle

class MainActivity extends Activity {
  /** Called when the activity is first created. */
  override def onCreate(savedInstanceState: Bundle) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)
  }
}

で、忘れずにjavaのファイルを消しておきましょう
src/main/java/[パッケージ]/MainActivity.java

では虫アイコンからデバッグ開始!

Genymotion_for_personal_use_-Google_Nexus_7-4_4_2-API_19-800x1280__800x1280__213dpi_-_192_168_57_100.jpg

ブレークポイントでも止まります。

IntelliJ_IDEA__Cassiopeia__IU-138_1980_1.jpg

以上です。


Android始めたばかりというのもありますが、Scalaっぽいimmutableな書き方がしづらい場面が多々ある気がしています。
今後進めていく上で、Scalaでの開発上の良いプラクティスがあれば共有したいなと思っています。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?