• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Programming Android Application in Scala.
 

Programming Android Application in Scala.

on

  • 11,644 views

Presentation at OSDC.tw 2010.

Presentation at OSDC.tw 2010.

Statistics

Views

Total Views
11,644
Views on SlideShare
11,084
Embed Views
560

Actions

Likes
24
Downloads
306
Comments
1

15 Embeds 560

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 49
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

11 of 1 previous next

  • 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. Programming Android Application in Scala. Presentation Transcript

    • Programming Android Application in Scala BrianHsu / OSDC.2010
    • 關於我
    • 墳墓 (BrianHsu)
    • 表面上 軟體工程師
    • 實際上 萌系阿宅
    • 入用 侵萌 藍化 星的 是手 也機
    • 僕我 了最  寫 !喜   Android 歡 女       全我 都要 是讓 是萌 女手 僕上 燃程 !機 的式
    • 用 Java 寫程式卻燃不起來
    • 高手大師兄
    • 聽說高手都要精通 Multiple Language……
    • ASE+Ruby/Python/Perl
    • 寫作 Dynamic Scripting Language
    • 唸作 快、狠、準
    • 等等
    • 還要先裝 Runtime 啊?
    • 等等
    • 動態型別?
    • def boom puts "Hello World" end puts " 一個小小的 typo" booom 執行期爆炸
    • 結論
    • 我是懦夫 不敢用 ASE
    • What is Scala?
    • 樓 梯
    • A Postfunctional Programming Language on Java Virtual Machine
    • Compile to JVM .class Byte Code
    • 理論上 Full Java Interoperability
    • 可以直接拿來寫 Android Application
    • What is Scala?
    • A Scalable Language
    • 會隨 User 變形的程式語言
    • A Scalable Language
    • A Scalable Language
    • Why Scala?
    • 三個願望一次滿足
    • REPL Scripting Compiling
    • REPL
    • Scripting
    • Compiling
    • 三個願望一次滿足
    • Procedure Object Oriented Functional
    • Procedure Programming
    • Object Oriented Programming
    • Functional Programming
    • 三個願望一次滿足
    • Concise Static Typing Duck Typing
    • Concise (Ruby)
    • Concise (Scala)
    • Static Typing (Ruby)
    • Static Typing (Scala)
    • 真、 Duck Typing (Ruby)
    • 偽‧ Duck Typing (Scala)
    • 結論
    • 有 Scala 、無懦夫
    • 僕我  用 了最   Scala !喜 歡 女      寫 全我 都要 是萌 是讓 女手 燃程 僕上 !機 的式
    • Scala vs Java
    • 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, …
    • 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
    • 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
    • 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; } }
    • 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
    • 當機器人爬上樓梯
    • Android Application 開發流程
    • Java / ANT
    • $ android create project -p … $ vim ..... $ ant install
    • 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/
    • 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/
    • How?
    • XML 地獄 ANT
    • Perfect SBT
    • Simple Build Tool
    • 以 Scala 為 Host Language
    • Rake=>Ruby SBT =>Scala
    • 不用任何設定 支援連續編譯
    • Android-Plugin
    • android-plugin http://github.com/jberkel/android-plugin project/build/MyProject.scala
    • android-plugin
    • 我不會用 功能完整
    • 阿宅的通病 自己寫一個
    • sbt-android project/build/MyProject.scala
    • sbt-android project/plugins/Plugins.scala
    • Live Demo
    • 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
    • Create Android/Scala Project ● Create SBT project ● $ mkdir AndroidTest ● $ cd AndroidTest ● $ sbt ● Edit project/build/MyProject.scala ● Edit project/plugins/Plugins.scala ● $ sbt update
    • Android/Scala Project Struture
    • Build Scala/Android Project ● $ sbt action ● $ sbt install ● $ sbt android-compile ● $ sbt proguard ● $ sbt zipalign ● $ ...
    • Scala in Android
    • Trait 是好幫手
    • SQL 再見! Collection 最高!
    • 善用偽 Duck Typing
    • 結論 可以把 Java 丟了……應該唄?
    • 等等,這是孔明的陷阱!
    • 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 唄
    • Thanks!