從2011年開始寫Android ApiDemos 以來,Android的版本也更新了很多,目前的版本已經是4.04。ApiDemos中的例子也增加了不少,有必要更新Android ApiDemo示例解析系列文章(當然之前的文章還是有用的,依然可以作為參考)。為了不重複之前的内容,我們準備使用Scala語言開發Android應用,随着例子的逐漸解析,我們會把ApiDemos的例子的代碼依次修改為Scala代碼,并使用Robujuice 來注入View,關于Scala程式設計可以參考部落格scala開發教程 ,關于Robujuice的介紹可以參考Android RoboGuice 使用指南
我們開發Android應用使用的IDE為Intellij (這也是新版Android Studio 基于的版本)。
1. 安裝Scala開發環境 ,請參考開始神奇的Scala程式設計之旅
2. 安裝IDEA Scala插件 使用IntelliJ IDEA開發Scala應用
3. 安裝Android SDK
4. 導入ApiDemos示例到Intellij,這裡我們使用Android-17 目錄下
為友善起見,ApiDemos的項目可以在github網站上複制 https://github.com/guidebee/ApiDemos 一般來說每次更新都會打上當天的日期作為标記,以便參考。
5.為Android項目配置Scala Facet,在導入的ApiDemos項目,使用File -> Project Structure -> Facets
6. 為項目添加Scala 庫檔案, 使用 File -> Project Structure -> Libraries
scala-library.jar 檔案可以在Scala安裝目錄 的libs下找到
7. 确認之前添加的Scala Facet為module的dependency. 你可以檢視子產品的dependency File -> Project Structure -> Modules -> Dependencies
并配置compiler plugins (可選)
注意:選取的Android平台需要使用JDK7 ,這是因為目前最新版的proguard還不支援JDK8.
8. 配置proguard ,使用下面的proguard-project.txt 檔案,這個檔案可以使用大多數的項目,你将這個檔案添加到Android項目中
對于Intellij 12 ,使用 File → project settings → modules → select module(s) → compiler tab → enable proguard
對于Intellij 13 ,使用 File → project settings → modules → select module(s) → compiler tab → check Run Proguard checkbox
注意在配置proguard清單時,同時也需添加Android SDK預設的檔案 /android-sdk-home/tools/proguard/proguard-android.txt 預設情況已經在項目的配置中了。
之後我們就可以和編譯普通Java開發的Android應用一樣編譯Scala代碼,使用這種配置,你可以任意混合使用scala 和 Java 語言,當然你不能在同一個檔案中混合使用,如有Scala代碼存放在.scala檔案中,所有java代碼還是存放在.java檔案中,在github的項目中,有兩個執行個體的.java檔案 ExampleActivity.java 和 SignInActivity.java .我們把它們先修改成scala代碼
1 | import android.app.Activity |
2 | import android.os.Bundle |
4 | class ExampleActivity extends Activity { |
6 | override def onCreate(savedInstanceState : Bundle) { |
7 | super .onCreate(savedInstanceState) |
8 | // The activity is being created. |
11 | protected override def onStart() { |
13 | // The activity is about to become visible. |
16 | protected override def onResume() { |
18 | // The activity has become visible (it is now "resumed"). |
21 | protected override def onPause() { |
23 | // Another activity is taking focus (this activity is about to be "paused"). |
26 | protected override def onStop() { |
28 | // The activity is no longer visible (it is now "stopped") |
31 | protected override def onDestroy() { |
33 | // The activity is about to be destroyed. |
其實這兩個檔案ApiDemos并沒有用到它們,我們正好可以用它們來測試下Scala的開發環境是否配置好,編譯這個項目,如果你在編譯後的目錄out/production/ApiDemos找到 ExampleActive.class 說明IDE編譯Scala代碼成功了。
最後項目可以在github.com 下載下傳 https://github.com/guidebee/ApiDemos