scala on-android
DESCRIPTION
TRANSCRIPT
![Page 1: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/1.jpg)
Android DevelopmentWithout Java
![Page 2: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/2.jpg)
Android DevelopmentWith Scala
![Page 3: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/3.jpg)
Scala
![Page 4: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/4.jpg)
Scala is
![Page 5: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/5.jpg)
Scala is
A Functional
![Page 6: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/6.jpg)
Scala is
A FunctionalObject Oriented
![Page 7: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/7.jpg)
Scala is
A FunctionalObject OrientedStatically Typed
![Page 8: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/8.jpg)
Scala is
A FunctionalObject OrientedStatically Typed
Scalable
![Page 9: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/9.jpg)
Scala is
A FunctionalObject OrientedStatically Typed
ScalableLanguage
![Page 10: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/10.jpg)
Scala is
A FunctionalObject OrientedStatically Typed
ScalableLanguage
Running on JVM
![Page 11: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/11.jpg)
Scala is
A FunctionalObject OrientedStatically Typed
ScalableLanguage
Running on JVM and DalvikVM
![Page 12: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/12.jpg)
Why Scala
![Page 13: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/13.jpg)
Javapublic class MyActivity extends Activity { ListView comments; Button newComment;
@Override void onCreate(Bundle bundle) { super.onCreate(bundle); comments = (ListView) findViewById(R.id.comments); newComment = (Button) findViewById(R.id.new_comment); //... }
public void sayHello() { Toast.makeText(this, “Hello”, Toast.LENGTH_LONG).show(); }}
Initialize context and views
![Page 14: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/14.jpg)
Java with RoboGuicepublic class MyActivity extends RoboActivity { @Inject Application context; @Inject SessionManager sessionManager;
@Inject(R.id.comments) ListView comments; @Inject(R.id.new_comment) Button newComment;
public void sayHello() { Toast.makeText(this, “Hello”, Toast.LENGTH_LONG).show(); }}
Inject views
![Page 15: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/15.jpg)
GO HOME ANDROID. YOU ARE DRUNK.
![Page 16: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/16.jpg)
Scalaclass MyActivity extends ScalaActivity {
lazy val SessionManager
lazy val comments = findView(TR.comments) lazy val newComment = findView(TR.new_comment)
def sayHello() = “Hello”.toast()
}
Lazily load views
Toast using implicit conversion
Implicit Context
![Page 17: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/17.jpg)
A Sample Project
![Page 18: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/18.jpg)
shadowsocks
![Page 19: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/19.jpg)
shadowsocks
• github/shadowsocks/shadowsocks-android• written in C/C++ and Scala
• modules– shadowsocks-libev: secured socks5 proxy in pure C– shadowsocks-android: UI/Android interface in Scala– lwIP/tun2socks: user space TCP/IP stack in C++– pdnsd/iptables/redsocks: native porting for android
![Page 20: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/20.jpg)
Project Structureproject/
Build.scala <SBT makefile> plugins.sbt <SBT plugin config>src/
main/res/ <resource files>assets/ <asset files>jni/ <native codes>libs/ <jar and native
libraries>scala/ <main Scala sources>java/ <main Java sources>AndroidManifest.xml <manifest template>
test/ <test sources>
![Page 21: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/21.jpg)
SBT
• Simple Build Tool for Scala / Java– Ant, Maven, Gradle like tool in Scala
• github/jberkel/android-plugin– SBT plugin for Android– Dependency management, unit test, instrumentation, auto
tasks, etc
![Page 22: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/22.jpg)
Components
• UI– ActionBarSherlock– SwitchBackport– Crouton– UnifiedPreference– UniversalImageLoader
• Libraries– DNSJava– Analytics– AdMob
![Page 23: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/23.jpg)
Components
![Page 24: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/24.jpg)
Best Practices
• Proguard– Aggressive default rules
• IntelliJ IDEA– Best IDE for Scala and Android
• Continuous Integration– Travis is best, Jenkins works well
![Page 25: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/25.jpg)
Questions?
![Page 26: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/26.jpg)
Thanks!
![Page 27: Scala on-android](https://reader033.vdocument.in/reader033/viewer/2022051819/54c892bf4a7959e51e8b45bc/html5/thumbnails/27.jpg)
About Me
• Max Lv– Member of Tangcha Project
• 字节社 for Android, http://zijieshe.com
– Major Contributor of GoAgent Project• github/madeye/gaeproxy
– Core maintainer of Shadowsocks Project• github/madeye/shadowsocks-libev • github/shadowsocks/shadowsocks-android