2010-10-11 43 views

回答

26

使用Scala應該是無痛的,因爲dex編譯器只是與字節碼一起工作 - 這正是Scala生產的。

那麼你最大的問題就是對scala庫的依賴,因爲dex希望每件事都在單個Jar中。這最好用Proguard的處理(這也將刪除未使用的代碼,給你一個小的可執行文件,非常適合移動)


目前最好的做法是使用SBT與Android插件;它會照顧你的一切:http://github.com/jberkel/android-plugin

如果你必須使用Eclipse和谷歌提供的插件,那麼你將有一個非標準的目錄結構。我還寫了一篇關於如何處理這個問題的文章:http://www.assembla.com/wiki/show/scala-ide/Developing_for_Android

但是要警告......這樣做需要更多的努力!

+3

主要問題是那些庫使用反射(類似於myClass.getMethod()),因爲proguard無法檢測到它們,您需要宣佈手動保留這些類/函數。有些庫很難使它與Scala/Proguard/Android一起工作,例如。 GDATA-Java的客戶端。或者在proguard處理JAR之後,你需要做一些調整來保存文件。 ical4j。否則,圖書館通常可以很容易地處理這種結合。 – 2010-10-11 15:11:01

+0

這是真的!警惕的反思... – 2010-10-11 15:46:28

5

上週五我們在Scala Lift Off London上討論過這個問題,並且一致認爲,只要你避開演員,它一般都能正常工作。另外,強烈建議使用sbt-android-plugin。 Nathan Hamblen的博客有many posts on Android,還有那些標籤爲Scala的人有很多值得關注的問題。

+0

http://code.technically.us/post/824974287/rewiring-android-for-type-safe-layout-resources是一個很酷(如果次要)的優勢,在Android Scala中進行編程的Java。 – 2010-10-11 18:29:48

15

There is上斯卡拉日2011年

免責聲明談話的人從bu.mp:雖然他們談了很多關於他們所面臨的問題,整體的經驗肯定是積極的。而且,這是一個特定團隊的問題,他們是小問題。

摘要:

  • 內存使用情況。閉包吃東西。斯卡拉已經關閉了所有的地方。雖然在臺式個人電腦上它不是一個相對大的問題(內存開銷),但在開發移動電話時應該考慮它。你可能會問:他們是如何解決它的?他們尋找一個緊密的循環,然後優化它們(重寫爲無閉包的scala/java)。 (第26分鐘)我認爲具有本機關閉支持的Java 8將緩解此問題下一個scala發行版將針對具有新後端的Java 8平臺,並且旨在獲得更好的性能。討論路線圖is here
  • 更慢的編譯器(Michal Galpin說他們有15秒的Java代碼編譯,大約1分鐘的Scala和Proguard更大的一個訂單,但請注意它取決於您的代碼庫和機器,但我懷疑比例將是相同的)。當您製作用戶界面時,特別是移動像素,按鈕等,並希望快速查看結果時,它尤其惱人。 (第7分鐘)
  • Android的內部類有一些相當普遍的問題(詳情請看23:00)。
  • 罕見 scalac(scala編譯器)中的錯誤在scala-java-collections interop中。通過明確地寫出這些問題解決了問題(我懷疑這根本不是很多樣板)。

雖然他對IDE的話太多,我不認爲這是一個問題(外觀this後,約斯卡拉環境)。那些做Scala IDE和IntelliJ的人做得很好,IDE支持越來越好。

對於單元測試,可以使用RoboSpecs(允許您在JVM內部運行單元測試,而不是在模擬器內部),速度更快。

我偶然發現的最大問題之一是dex格式的limitations(每個dex文件不超過65536個方法引用)。斯卡拉圖書館根本不符合限制,所以你必須通過以下方法解決:

  • 使用Proguard將修剪scala lib中的脂肪。但是我的筆記本電腦的速度真的很慢,而且只是在開發階段浪費時間(但是當您將應用發佈到Google Play時,它會非常有幫助)
  • 使用predexed library。壞事是這個項目有點遺棄,只包含2.9.0-1版本。
  • preinstalling斯卡拉您的手機上

一些人聲稱有與IDE問題,但事情得到快速改變:在IntelliJ IDEA的當前版本12不僅具有良好的支持斯卡拉作爲一個插件,還包含適用於Android的UI Designer。此外,您可以使用Eclipse,它支持Android(由Google)和Scala(由Typesafe)支持。 Android Studio(基於IDEA的新IDE在Google IO '13上發佈並由Google開發)支持IDEA插件,從而支持Scala。

相關問題