回答
使用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
但是要警告......這樣做需要更多的努力!
主要問題是那些庫使用反射(類似於myClass.getMethod()),因爲proguard無法檢測到它們,您需要宣佈手動保留這些類/函數。有些庫很難使它與Scala/Proguard/Android一起工作,例如。 GDATA-Java的客戶端。或者在proguard處理JAR之後,你需要做一些調整來保存文件。 ical4j。否則,圖書館通常可以很容易地處理這種結合。 – 2010-10-11 15:11:01
這是真的!警惕的反思... – 2010-10-11 15:46:28
上週五我們在Scala Lift Off London上討論過這個問題,並且一致認爲,只要你避開演員,它一般都能正常工作。另外,強烈建議使用sbt-android-plugin。 Nathan Hamblen的博客有many posts on Android,還有那些標籤爲Scala的人有很多值得關注的問題。
http://code.technically.us/post/824974287/rewiring-android-for-type-safe-layout-resources是一個很酷(如果次要)的優勢,在Android Scala中進行編程的Java。 – 2010-10-11 18:29:48
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。
- 1. HTTP上傳有很多開銷嗎?
- 2. VBA類中涉及很多開銷嗎?
- 3. 在Jython上開發Django有問題嗎?
- 4. 在類上有很多方法會增加該類對象的開銷嗎?
- 5. PRADO有很多用戶嗎?
- 6. Plan 9的開發有很多嗎?
- 7. 在PHP中包含長時間函數收集有很多開銷嗎?
- 8. jQuery在Mac上工作得很好嗎?
- 9. 有太多setTimeout()很好嗎?
- 10. Mysql連接池問題:值得嗎?
- 11. 多次調用:: AfxInitRichEdit2有問題嗎?
- 12. (iphone)有很多AVAudioPlayer實例很好嗎?
- 13. 在Android應用程序中使用java.util.regex - 這有問題嗎?
- 14. 使用Scala與Apache Camel存在已知問題嗎?
- 15. 在@ISA上使用拼接在perl 5.12.2中有問題嗎?
- 16. 在android中使用AsyncTask中的sqlite時有問題嗎?
- 17. 值得使用sqlalchemy-migrate嗎?
- 18. JDEE值得使用嗎?
- 19. 您在虛擬PC上開發有問題嗎?
- 20. 在Scala中使用模式匹配時真的很簡單嗎?
- 21. 我的Android手機上的開發會導致問題嗎?
- 22. 在Android上使用AUTOINCREMENT for SQLite的開銷是多少?
- 23. 「ColumnDefinitions」有問題嗎?
- 24. 面試問題:IDisposable很難理解嗎?
- 25. Android 2.1中的ActivityInstrumentationTestCase2有問題嗎?
- 26. 使用Niceforms有什麼問題嗎?
- 27. Android上的Sqlite - 它使用穩定,並且它工作得很快嗎?
- 28. 有沒有很好的資源將mod_perl移植到Catalyst上,值得嗎?
- 29. 可以在MySQL數據庫中有很多空值嗎?
- 30. 有很多通過問題
http://www.assembla.com/wiki/show/scala-ide/Developing_for_Android – 2010-10-11 13:20:04