[JP] How to start Android Dev

[JP] How to start Android Dev

[JP] How to start Android Dev

6dd0483f1353a4a359e92633cfd65c64?s=128

Daichi Furiya (Wasabeef)

January 30, 2019
Tweet

Transcript

  1. 4.

    IDE (Build tools) Java / Kotlin Architecture Jetpack KTX AAC

    Agenda DI Networking Testing CI Multi-platform
  2. 16.
  3. 20.
  4. 22.

    Java 8 - Unsupported features and APIs Java 8 Language

    API Compatible minSdkVersion java.lang.annotation.Repeatable Android 7 (API24) + AnnotatedElement.getAnnotationsByType(Class) java.util.stream java.lang.FunctionalInterface java.lang.reflect.Method.isDefault() java.util.function
  5. 23.
  6. 27.
  7. 29.
  8. 31.
  9. 32.
  10. 34.

    KTX

  11. 36.

    Samples view.viewTreeObserver.addOnPreDrawListener( object : ViewTreeObserver.OnPreDrawListener { override fun onPreDraw(): Boolean

    { viewTreeObserver.removeOnPreDrawListener(this) actionToBeTriggered() return true } } ) アニメーションの処理でよく見かけるコード
  12. 44.

    Samples class MyViewModel(private val repo: UserRepository) : ViewModel() { private

    val _user = MutableLiveData<User> val user: LiveData<User> get() = _user fun getUser() = return repo.getUser() } class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { val model = ViewModelProviders.of(this).get(MyViewModel::class.java) model.getUser().observe(this, Observer { user -> // update UI }) } } よく見かける ViewModel + LiveData のサンプルです
  13. 45.

    class MyViewModel(private val repo: UserRepository) : ViewModel() { private val

    _user = MutableLiveData<User> val user: LiveData<User> get() = _user fun getUser() = return repo.getUser() } class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { val model = ViewModelProviders.of(this).get(MyViewModel::class.java) model.getUser().observe(this, Observer { user -> // update UI }) } } Samples よく見かける ViewModel + LiveData のサンプルです
  14. 47.

    Navigation Fragment Transaction の簡易化 アニメーション ディープリンク BottomNavigation / Toolbar などと連携

    Fragment 間でデータを型安全に渡せる Navigation editor で GUI で設定可能
  15. 54.

    Android Injection Performance Library Setup Kotlin Setup Java Inject Kotlin

    Inject Java Koin 19.80 ms 20.43 ms 0.45 ms 0.35 ms Kodein 21.48 ms 21.02 ms 0.74 ms 0.62 ms Dagger 0.03 ms 0.03 ms 0.22 ms 0.15 ms Sloy/android-dependency-injection-performance
  16. 58.

    Retrofit (+ OkHttp) Square 社製 Android 5.0+ (OkHttp) JSON, Protobuf,

    XMLに対応 使いやすく、多くの人に使われている
  17. 59.

    interface SampleService { @GET("users/{user}") fun getUser(@Path("user") user: String): Deferred<User> }

    val retrofit = Retrofit.Builder().baseUrl("https://wasabeef.jp/").client(okHttpClient).build() val service = retrofit.create(SampleService::class.java) launch { val user = service.getUser("wasabeef").await() // Do something } Samples よくあるサンプルコード
  18. 60.

    interface SampleService { @GET("users/{user}") fun getUser(@Path("user") user: String): Deferred<User> }

    val retrofit = Retrofit.Builder().baseUrl("https://wasabeef.jp/").client(okHttpClient).build() val service = retrofit.create(SampleService::class.java) launch { val user = service.getUser("wasabeef").await() // Do something } Samples よくあるサンプルコード
  19. 61.

    interface SampleService { @GET("users/{user}") fun getUser(@Path("user") user: String): Deferred<User> }

    val retrofit = Retrofit.Builder().baseUrl("https://wasabeef.jp/").client(okHttpClient).build() val service = retrofit.create(SampleService::class.java) launch { val user = service.getUser("wasabeef").await() // Do something } Samples よくあるサンプルコード
  20. 62.
  21. 64.
  22. 68.

    Firebase Test Lab .apk をアップロードするだけで実行が可能 Instrument/Robo Test の指定が可能 実機・エミュレータの指定ができる iOS

    も対応 ユーザ名・パスワードのログインにも対応 動作ログ (Screenshot, Video) が見れる
  23. 74.

    CI

  24. 76.
  25. 80.
  26. 82.
  27. 88.

    Kotlin Multiplatform iOS, macOS, Android, Windows, Linux, WASM に対応 サーバも

    Kotlin にして、Backends for Frontends の流れで使われることがある UIを作れるものでは無い
  28. 89.

    Kotlin Multiplatform iOS エンジニアにも Kotlin を読めるよう になってもらったほうが良い iOS は Coroutines

    が Single Thread で しか使えない https://aakira.app/blog/2018/12/kotlin-mpp-reason/
  29. 90.
  30. 96.

    Conclusion.. 個人的な話 SingleActivity にして MVVM で良いと思います。
 AAC が MVVM 向きに作られてるような感じ。

    Koin の実行速度が Dagger くらいにならないと導入はしない。
 理解が難しいけど、慣れればそこまでかな。 RxJava はもう使わなくてもいいかな。Kotlin (Coroutines), LiveData で十分。 Firebase Test Lab は絶対いれたい。 Arrow で Null-safety より安全なコードを目指したい。
 Scala属性でモナドの人は是非。 そういえば、DroidKaigi に Arrow のプロポーザル出したけど落ちた。 デスクトップアプリ作るなら Flutter にしたいな。
  31. 97.

    References: - https://d.android.com - https://kotlinlang.org - https://flutter.io - https://danger.systems -

    https://bitrise.io - https://circleci.com Resources Photos: - https://unsplash.com - https://www.pexels.com Illustrations: - http://www.chojugiga.com - https://www.irasutoya.com