最直接的想法就是:
-
先把Scala当作更好的Java用
-
保护好对Scala语言的已有投资
-
看看别人怎么说:Scala on Android
- 已经习惯了Eclipse
- Scala-IDE for Eclipse 有了很大改进
- ...
下载页面: http://developer.android.com/sdk/index.html。
通过SDK Manager按需下载相关的packages。(我这里主要有Tools, Android 4.1, Android 2.2, Extras/Android support library)
使用AVD Manager创建一个avd, Target为Android 4.1, 选中SNAPSHOT为enabled
将tools和platform-tools目录添加到PATH环境变量
使用Eclipse indigo JEE版, 下载页面是: http://www.eclipse.org/downloads/packages/release/indigo/sr2
具体说明参考 http://developer.android.com/sdk/installing/installing-adt.html
Update Site是: https://dl-ssl.google.com/android/eclipse/
使用Scala IDE 2.1 Milestone 1版, 参考http://scala-ide.org/download/milestone.html#scala_ide_21_milestone_1
我使用的是For Scala2.9.x的版本, Update Site 是:http://download.scala-ide.org/releases-29/milestone/site
AndroidProguardScala这个插件集成了Proguard, 主要用来去掉工程依赖包中用不到的类, 有了它,就算引入Scala运行时库和其他依赖包, 也能保证发布包apk足够的苗条(等下我们通过一个实际的工程来验证)
安装方式参考https://github.com/banshee/AndroidProguardScala
Update Site是:https://androidproguardscala.s3.amazonaws.com/UpdateSiteForAndroidProguardScala
使用Eclipse向导创建一个"Android Applicaton Project", 选择创建一个Blank Activity即可
-
给工程添加"Scala Nature"
工程, 右键 -> Configure -> Add Scala Nature
-
给工程添加"AndroidProguardScala Nature"
工程, 右键 -> Add AndroidProguardScala Nature
-
修改res/layout/activity_main.xml, 给TextView设置一个id android:id="@+id/hello"
-
将MainActivity.java删除, 用Scala重写
代码如下:
package com.example.helloworld
import android.os.Bundle import android.app.Activity import android.view.Menu import android.widget.TextView
class MainActivity extends Activity {
override def onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val hello = findViewById(R.id.hello).asInstanceOf[TextView] hello.setText(hello.getText + " 世界!") } override def onCreateOptionsMenu(menu: Menu): Boolean = { getMenuInflater().inflate(R.menu.activity_main, menu) true }
}
工程右键 -> Run As -> Android Application
默认会使用之前创建的Android Virtual Device 仿真器运行
工程右键 -> Android Tools -> Export Singed Application Package ..., 按向导一步一步走即可.
导出的apk大概300k, 可以与Java版的做一个对比, Java版的大概150K. Scala版的HelloWorld 体积上个人是可以接受的.
有人将Android的samples用Scala重写, 然后专门做了一个对比, 详细信息请参考: http://lampwww.epfl.ch/~michelou/android/library-code-shrinking.html
用Scala开发Android应用算是走通了. 从上面看, 生成的apk体积方面完全不用担心, 至于像memory footprint等问题, 要等深入之后再来看.