Scala 語(yǔ)言開發(fā)Andorid ,開發(fā)環(huán)境的搭建(二)
什么是 sbt ?
上一篇文章介紹過(guò),sbt 就是和 maven ,ant 類似的自動(dòng)構(gòu)建工具。
那 sbt 有什么優(yōu)勢(shì)呢?
- 相對(duì)其他構(gòu)建工具更快的編譯速度,只編譯修改過(guò)的文件以及引用的第三方庫(kù)依賴
- triggered execution 特性方便做測(cè)試驅(qū)動(dòng)的開發(fā)
- 依據(jù)類和依賴使用 Scala 的解析器
- sbt 是基于 Scala ,所以可以靈活的使用 Scala 構(gòu)建工程
- 支持 java 和 Scala 的混合編程
基本目錄
工程的根目錄下的文件和文件夾,下面看看文件夾里面到底是什么東西。
源碼
根下的 src 目錄就是存放源碼文件的地方呢
src/
main/
resources/
<files to include in main jar here>
scala/
<main Scala sources>
java/
<main Java sources>
test/
resources
<files to include in test jar here>
scala/
<test Scala sources>
java/
<test Java sources>
sbt 配置文件
在一個(gè)小項(xiàng)目中一兩個(gè) sbt 文件已經(jīng)足夠了,當(dāng)時(shí)隨著項(xiàng)目的擴(kuò)展有可能要同時(shí)管理多個(gè) sbt 文件
一般情況下我們習(xí)慣使用 build.sbt 作為文件的名稱,當(dāng)然你也可以使用任何的名字。
根目錄下的 sbt 文件
build.sbt
project/
plugin.sbt
Build.scala
<Other Scala files>
看到這里你可能會(huì)還好奇,sbt 和 Scala 的配置文件有什么區(qū)別
一般推薦,sbt 文件作為項(xiàng)目的主要設(shè)定文件,而 scala 用于設(shè)置第三方依賴或者版本信息等
編寫build.sbt
下面一步一步寫出項(xiàng)目到build.sbt 文件
表達(dá)式
在我們的定義文件了,我們只需要關(guān)注設(shè)置的表達(dá)式
下面的實(shí)例顯示了項(xiàng)目版本號(hào)命名等基本信息,還有 項(xiàng)目中使用的 Scala 版本的配置信息
name := "scala-on-android"
organization := "com.fortysevendeg"
organizationName := "47 Degrees"
organizationHomepage := Some(new URL("http://47deg.com"))
version := 0.1.0
scalaVersion := 2.11.6
不難發(fā)現(xiàn)上面的例子 使用 := 作為連接符
另外還可以使用其他的連接符
+= 添加多一個(gè)元素
++= 添加多個(gè)元素
例如
scalacOptions ++= Seq("-feature", "-deprecation")
添加第三方庫(kù)依賴
和 gradle 一樣,其實(shí)庫(kù)的添加分兩種
一是添加本地 jar 包
二是添加遠(yuǎn)程倉(cāng)庫(kù)庫(kù)
添加 jar 包
使用 jar 包最簡(jiǎn)單到方式是直接把 jar 放到下面目錄,這樣項(xiàng)目就會(huì)自動(dòng)導(dǎo)入 jar 包
/src/main/libs
除此之外還能使用自定義到路徑
unmanagedBase := baseDirectory.value / "custom_lib"
遠(yuǎn)程依賴
遠(yuǎn)程依賴使用是 ivy 到遠(yuǎn)程管理倉(cāng)庫(kù),同樣你可以使用 += 或者 ++= 到導(dǎo)入一個(gè)或多個(gè)依賴
先看看導(dǎo)入一個(gè)到基本表達(dá)式
libraryDependencies += groupID % artifactID % revision [% configuration]
導(dǎo)入多個(gè)
libraryDependencies ++= Seq(
aar("com.android.support" % "cardview-v7" % "22.0.0"),
aar("com.android.support" % "appcompat-v7" % "22.0.0"),
aar("com.android.support" % "recyclerview-v7" % "22.0.0"),
aar("com.google.android.gms" % "play-services-base" % "6.5.87"),
"com.typesafe.play" %% "play-json" % "2.3.6",
"org.specs2" %% "specs2-core" % "2.4.15" % "test",
"org.specs2" % "specs2-mock_2.11" % "3.0-M2" % "test")
上面可見(jiàn),可以使用 % 作為分割符,那 %% 又代表上面意思呢。其實(shí)為何配合不同版本的 scala ,需要不同依賴, %% 就是解決這個(gè)問(wèn)題的,例如上面的 "org.specs2" %% "specs2-core" sbt 構(gòu)建工具就根據(jù)不同情況選擇合適的 org.specs2 或者 specs2-core 庫(kù)。
添加 sbt 插件
在目錄 project 下有一個(gè) plugin.sbt 文件,只需要 配置相關(guān)的信息就能方便安裝對(duì)應(yīng)的插件。為了更加方便使用 sbt 管理我們的 Android 工程,可以使用一些插件讓開發(fā)過(guò)程中更加方便,這里說(shuō)一個(gè)常用的插件
sbt-android,詳細(xì)使用和配置的可以看開發(fā)文檔。這里只演示如何最快的安裝。只需要在 plugin.sbt 添加一行便可以完成安裝
addSbtPlugin("org.scala-android" % "sbt-android" % "1.7.1")
接著在 根目錄下的 build.sbt 中使用我們的插件
android.Plugin.androidBuild
platformTarget in Android := "android-21"
這樣遍可以使用這個(gè)插件提供的一些功能,例如 compile(編譯),android:run(運(yùn)行),android:package-release(打包)等操作。
此外插件還提供了打包的配置方案如下面設(shè)置簽名文件的路徑等信息
packageRelease <<= (packageRelease in Android).dependsOn(setDebugTask(false))
apkSigningConfig in Android := Option(
PromptPasswordsSigningConfig(
keystore = new File(Path.userHome.absolutePath + "/.android/signed.keystore"),
alias = "my-password"))