Scala 語言開發(fā)Andorid 襟锐,開發(fā)環(huán)境的搭建
厭倦 Java 繁瑣的語法撤逢,為了更優(yōu)雅的開發(fā) Android 程序,Scala 代替 Java 是一個不錯的嘗試粮坞。 開發(fā)前可以學(xué)習(xí) Scala 的基本語法蚊荣,某些部分和 Java 非常類似,但又聚合了其他先進語言的特性莫杈。與 Java 不同的是互例,在你熟悉函數(shù)式編程的情況下能寫出更加優(yōu)雅的代碼。
SBT 構(gòu)建工具
現(xiàn)在絕大多數(shù)的 Android 開發(fā)者是官方提供的 Android Studio 筝闹,這個 IDE 使用的是基于 Gradle 的自動化建構(gòu)工具媳叨,通過 Gradle 可以配置 Project 各種參數(shù),生產(chǎn) APK 等操作关顷。
SBT 是和 Gradle,Ant,Maven 一樣的自動化建構(gòu)工具糊秆,SBT 方便管理我們用 Scala 編寫的 Android 工程。
和使用 Java 開發(fā) Andoird 一樣议双,首先要安裝 Scala痘番, 下載 官方文件,在此之前先確定電腦已經(jīng)安裝配置好 Java 環(huán)境平痰。如果 macOS 已經(jīng)安裝有 Homebrew 只需要一行代碼即可安裝配置成功
brew install scala
接著安裝 SBT 同一也一行代碼搞定(趕緊換一臺 mac 吧~~
brew install sbt
其他系統(tǒng)的配置大可直接看 [Scala]((http://scala-lang.org/) 和 SBT 官網(wǎng)夫偶,里邊有詳細的安裝配置教程
項目結(jié)構(gòu)
和使用 構(gòu)建工具一樣界睁,Gradle 有一種固定的文件分類方式,不同的文件夾安放不同類型的文件兵拢。同樣的翻斟,SBT 也是有固定的文件結(jié)構(gòu)。其實 SBT 的結(jié)構(gòu)和 Gradle 的結(jié)構(gòu)類似说铃。
scala-android/
|- project/
| |- plugins.sbt
|- src/
| |- main/
| |- assets/
| |- java/
| |- res/
| |- layout/
| |- main.xml
| |- values/
| |- strings.xml
| |- scala/
| |- com/
| |- fortysevendeg/
| |- scala/
| |- android/
| |- SampleActivity.scala/
| |- AndroidManifest.xml
| |- test/
| |- java/
| |- res/
| |- scala/
|- build.sbt
結(jié)構(gòu)文件
根目錄下访惜,src 文件夾內(nèi)存放的有源碼的文件,布局文件腻扇,以及另外一些資源文件债热。java 文件存放的是 java的源代碼文件,scala文件夾里存放的當(dāng)然是 scala 源代碼文件幼苛,和 java 編寫的結(jié)構(gòu)一樣窒篱,倒序域名包命名的管理方式。text存放的是測試文件舶沿。
build.sbt 和 app 中Gradle build 文件類似墙杯,可以配置一些項目信息,例如管理包名括荡,應(yīng)用名高镐,編譯的目標(biāo)版本,最低限制版本畸冲,開啟混淆的嫉髓。使用的語法與 gradle 的語法略有不同。下面是一些常用的配置信息邑闲。
build.sbt
// 申明使用 Android 插件算行,讓構(gòu)造工具知道這是一個Android 工程
android.Plugin.androidBuild
// 生命 Android 目標(biāo) API
platformTarget in Android := "android-21"
// 應(yīng)用名
name := """scala-android"""
// 應(yīng)用版本號
version := "1.0.0"
// Scala 版本
scalaVersion := "2.11.4"
// 項目中依賴的庫
resolvers += Resolver.jcenterRepo
libraryDependencies ++=
"com.android.support" % "cardview-v7" % supportLibsVersion ::
"com.android.support" % "customtabs" % supportLibsVersion ::
"com.android.support" % "design" % supportLibsVersion ::
"com.android.support" % "gridlayout-v7" % supportLibsVersion ::
"com.android.support" % "preference-v14" % supportLibsVersion ::
"com.futuremind.recyclerfastscroll" % "fastscroll" % "0.2.5" ::
"com.evernote" % "android-job" % "1.1.4" ::
"com.github.jorgecastilloprz" % "fabprogresscircle" % "1.01" ::
"com.google.android.gms" % "play-services-ads" % playServicesVersion ::
"com.google.android.gms" % "play-services-analytics" % playServicesVersion ::
"com.google.android.gms" % "play-services-gcm" % playServicesVersion ::
// 開啟 Scala 混淆
proguardScala in Android := true
// 開啟 Android 混淆
useProguard in Android := true
// 設(shè)置混淆規(guī)則
proguardOptions in Android ++= Seq(
"-ignorewarnings",
"-keep class scala.Dynamic")
project/plugins.sbt文件是項目中構(gòu)建工具使用到的插件
project/plugins.sbt
addSbtPlugin("org.scala-android" % "sbt-android" % "1.7.2")
addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.1.10")
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.8.2")