Programming Android Application in Scala.
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Programming Android Application in Scala.

on

  • 11,829 views

Presentation at OSDC.tw 2010.

Presentation at OSDC.tw 2010.

Statistics

Views

Total Views
11,829
Views on SlideShare
11,268
Embed Views
561

Actions

Likes
24
Downloads
307
Comments
1

15 Embeds 561

http://blog.lifetaiwan.net 124
http://bone.twbbs.org.tw 121
http://jimmynote.blogspot.com 121
http://www.slideshare.net 70
http://endroid.blogspot.com 50
http://www.jingege.me 35
http://jimmynote.blogspot.tw 24
http://paper.li 3
http://jimmynote.blogspot.hk 3
http://webcache.googleusercontent.com 3
http://twitter.com 2
http://bone.forestlife.info 2
http://static.slidesharecdn.com 1
http://coderwall.com 1
http://reader.youdao.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Programming Android Application in Scala. Presentation Transcript

  • 1. Programming Android Application in Scala BrianHsu / OSDC.2010
  • 2. 關於我
  • 3. 墳墓 (BrianHsu)
  • 4. 表面上 軟體工程師
  • 5. 實際上 萌系阿宅
  • 6. 入用 侵萌 藍化 星的 是手 也機
  • 7. 僕我 了最  寫 !喜   Android 歡 女       全我 都要 是讓 是萌 女手 僕上 燃程 !機 的式
  • 8. 用 Java 寫程式卻燃不起來
  • 9. 高手大師兄
  • 10. 聽說高手都要精通 Multiple Language……
  • 11. ASE+Ruby/Python/Perl
  • 12. 寫作 Dynamic Scripting Language
  • 13. 唸作 快、狠、準
  • 14. 等等
  • 15. 還要先裝 Runtime 啊?
  • 16. 等等
  • 17. 動態型別?
  • 18. def boom puts "Hello World" end puts " 一個小小的 typo" booom 執行期爆炸
  • 19. 結論
  • 20. 我是懦夫 不敢用 ASE
  • 21. What is Scala?
  • 22. 樓 梯
  • 23. A Postfunctional Programming Language on Java Virtual Machine
  • 24. Compile to JVM .class Byte Code
  • 25. 理論上 Full Java Interoperability
  • 26. 可以直接拿來寫 Android Application
  • 27. What is Scala?
  • 28. A Scalable Language
  • 29. 會隨 User 變形的程式語言
  • 30. A Scalable Language
  • 31. A Scalable Language
  • 32. Why Scala?
  • 33. 三個願望一次滿足
  • 34. REPL Scripting Compiling
  • 35. REPL
  • 36. Scripting
  • 37. Compiling
  • 38. 三個願望一次滿足
  • 39. Procedure Object Oriented Functional
  • 40. Procedure Programming
  • 41. Object Oriented Programming
  • 42. Functional Programming
  • 43. 三個願望一次滿足
  • 44. Concise Static Typing Duck Typing
  • 45. Concise (Ruby)
  • 46. Concise (Scala)
  • 47. Static Typing (Ruby)
  • 48. Static Typing (Scala)
  • 49. 真、 Duck Typing (Ruby)
  • 50. 偽‧ Duck Typing (Scala)
  • 51. 結論
  • 52. 有 Scala 、無懦夫
  • 53. 僕我  用 了最   Scala !喜 歡 女      寫 全我 都要 是萌 是讓 女手 燃程 僕上 !機 的式
  • 54. Scala vs Java
  • 55. Scala compared to Java Scala adds Scala removes + a pure object system - static members + operator overloading - primitive types + closures - break, continue + mixin composition with traits - special treatment of interfaces + existential types - wildcards + abstract types - raw types + pattern matching - enums Modeled in libraries: assert, enums, properties, events, actors, using, queries, …
  • 56. Scala cheat sheet (1): Definitions Scala method definitions: Java method definition: def fun(x: Int): Int = { int fun(int x) { result return result } } def fun = result (no parameterless methods) Scala variable definitions: Java variable definitions: var x: Int = expression int x = expression val x: String = expression final String x = expression
  • 57. Scala cheat sheet (2): Expressions Scala method calls: Java method call: obj.meth(arg) obj.meth(arg) obj meth arg (no operator overloading) Scala choice expressions: Java choice expressions, stmts: if (cond) expr1 else expr2 cond ? expr1 : expr2 if (cond) return expr1; else return expr2; expr match { case pat1 => expr1 switch (expr) { .... case pat1 : return expr1; case patn => exprn ... } case patn : return exprn ; } // statement only
  • 58. Scala cheat sheet (3): Objects and Classes Scala Class and Object Java Class with statics class Sample { class Sample(x: Int, val p: Int) { private final int x; def instMeth(y: Int) = x + y public final int p; } Sample(int x, int p) { this.x = x; object Sample { this.p = p; def staticMeth(x: Int, y: Int) = } x*y int instMeth(int y) { } return x + y; } static int staticMeth(int x, int y) { return x * y; } }
  • 59. Scala cheat sheet (4): Traits Java Interface Scala Trait trait T { interface T { int abstractMth(String x) def abstractMth(x: String): Int } def concreteMth(x: String) = x + field (no concrete methods) var field = “!” (no fields) } Java extension + implementation: Scala mixin composition: class C extends Super implements T class C extends Super with T
  • 60. 當機器人爬上樓梯
  • 61. Android Application 開發流程
  • 62. Java / ANT
  • 63. $ android create project -p … $ vim ..... $ ant install
  • 64. http://asantoso.wordpress.com/2009/09/15/how-to-build-android-application-package- apk-from-the-command-line-using-the-sdk-tools-continuously-integrated-using- cruisecontrol/
  • 65. http://asantoso.wordpress.com/2009/09/15/how-to-build-android-application-package- apk-from-the-command-line-using-the-sdk-tools-continuously-integrated-using- cruisecontrol/
  • 66. How?
  • 67. XML 地獄 ANT
  • 68. Perfect SBT
  • 69. Simple Build Tool
  • 70. 以 Scala 為 Host Language
  • 71. Rake=>Ruby SBT =>Scala
  • 72. 不用任何設定 支援連續編譯
  • 73. Android-Plugin
  • 74. android-plugin http://github.com/jberkel/android-plugin project/build/MyProject.scala
  • 75. android-plugin
  • 76. 我不會用 功能完整
  • 77. 阿宅的通病 自己寫一個
  • 78. sbt-android project/build/MyProject.scala
  • 79. sbt-android project/plugins/Plugins.scala
  • 80. Live Demo
  • 81. Install SBT/SBT-Android ● Install SBT ● http://code.google.com/p/simple-build-tool/ ● Download SBT-Android ● $ git clone http://github.com/brianhsu/sbt-android.git ● Install SBT-Android ● $ cd sbt-android ● $ sbt publish-local
  • 82. Create Android/Scala Project ● Create SBT project ● $ mkdir AndroidTest ● $ cd AndroidTest ● $ sbt ● Edit project/build/MyProject.scala ● Edit project/plugins/Plugins.scala ● $ sbt update
  • 83. Android/Scala Project Struture
  • 84. Build Scala/Android Project ● $ sbt action ● $ sbt install ● $ sbt android-compile ● $ sbt proguard ● $ sbt zipalign ● $ ...
  • 85. Scala in Android
  • 86. Trait 是好幫手
  • 87. SQL 再見! Collection 最高!
  • 88. 善用偽 Duck Typing
  • 89. 結論 可以把 Java 丟了……應該唄?
  • 90. 等等,這是孔明的陷阱!
  • 91. Scala 的限制與臭蟲 ● 限制 ● Cannot acess static protected Java field. – 對不起, Google Maps API 用到了。 ● 臭蟲 ● Static Java Inner class 造成 classfile borken / Missing dependency missing dependcy – Google Maps API 踩到地雷了 ● Cyclic dependcy – Google Data API 中計了 – 以於 Scala 2.8 main trunk 中修正 ● 解決方式 ● 用 Java 寫個 Wrapper 唄
  • 92. Thanks!