狠狠撸

狠狠撸Share a Scribd company logo
LINE Creators Studio
Android with Kotlin.
??紹介
李 性賢
LINE Fukuoka 株式会社
開発1チーム所属
LEE
SUNGHYUN(Dave)
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Android with Kotlin.
?LINE Creators Studio Android with Kotlin
?LINE Creators Studio Androidのアプリ設計
?AndroidでUIテスト?動化 with Firebase Test Lab
?次
LINE Creators Studio Android with Kotlin.
技術概要
?語:Kotlin
Layout:Anko
Network:Retrofit2, OkHttp3
DB:Realm
Reactive Programming:RxJava1, RxBinding, RxLifecycle
Dependecy Injection:Dagger2
Test:Espresso, Mockito-Kotlin
LINE Creators Studio Android with Kotlin.
Why Kotlin?
null	safe
lambda extension
property
型推論
anko
100%	java	相互運用性
LINE Creators Studio Android with Kotlin.
Why Kotlin?
?チームの開発?産性を向上させたい
?メンテしやすいコードを書きたい
?NPEから発?するバグを減らしたい
背景
LINE Creators Studio Android with Kotlin.
Null Safe
?NPEによるバグ発?率↓
?annotationを作成するコスト↓
?メンテしやすさ↑
No more needed @NonNull, @Nullable annotations in
kotlin.
LINE Creators Studio Android with Kotlin.
Lambda
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v(TAG, "clicked");
}
});
Java
LINE Creators Studio Android with Kotlin.
Lambda
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v(TAG, "clicked");
}
});
button.setOnClickListener { Log.v(TAG, "clicked") }
Java
Kotlin
LINE Creators Studio Android with Kotlin.
Lambda
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v(TAG, "clicked");
}
});
button.setOnClickListener { Log.v(TAG, "clicked") }
button.onClick { Log.v(TAG, "clicked") }
Java
Kotlin
Kotlin with anko
?コード量↓
?読みやすさ↑
Extension
fun View.onGlobalLayout(once: Boolean = true, init: View.() -> Unit) {
val view = this
viewTreeObserver.addOnGlobalLayoutListener(object : OnGlobalLayoutListener {
override fun onGlobalLayout() {
init()
if (once) {
view.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
}
})
}
ViewExtension.kt
LINE Creators Studio Android with Kotlin.
Extension + Anko
frameLayout {
val button = button()
button.onClick {
// click event.
}
}.onGlobalLayout {
// view update codes.
}
MainUi.kt
LINE Creators Studio Android with Kotlin.
Anko
LINE Creators Studio Android with Kotlin.
Anko
?Dialog or PopupWindowを使う
?layout.xmlに定義し、tooltip layoutをvisible, gone
?別のxmlを作り、必要に応じて動的に <include>
考えられる実装?法
LINE Creators Studio Android with Kotlin.
Anko
ToolTipLayout.kt
fun ViewManager.toolTipLayout() =
verticalLayout {
gravity = Gravity.CENTER_VERTICAL
textView(R.style.ToolTipDescriptionStyle) {
text = "This is ToolTip Layout!"
}
... // more tool tip views.
}
LINE Creators Studio Android with Kotlin.
Anko
ToolTipLayout.kt
fun ViewManager.toolTipLayout() =
verticalLayout {
gravity = Gravity.CENTER_VERTICAL
textView(R.style.ToolTipDescriptionStyle) {
text = "This is ToolTip Layout!"
}
... // more tool tip views.
}
frameLayout {
... // main views.
if (shouldShowToolTip) {
toolTipLayout()
}
StickerListUi.kt
LINE Creators Studio Android with Kotlin.
Anko
?Custom Layoutを作ったり使ったりすることが簡単
?Xml parsingが必要ないので早い
?Business logicとui codeを分離しやすい
Pros
LINE Creators Studio Android with Kotlin.
Anko
?Custom Layoutを作ったり使ったりすることが簡単
?Xml parsingが必要ないので早い
?Business logicとui codeを分離しやすい
Pros
?DSLなので学習コストがある
?data binding libaryをサポートしてない
?constraintlayoutをサポートしてない
Cons
LINE Creators Studio Android with Kotlin.
Anko Preview (Android Studio 2.4+)
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
ButtonのClick Eventを変更しましょう
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
1. 変更したい画?のactivityを探す
ButtonのClick Eventを変更しましょう
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
1.変更したい画?のactivityを探す
2.Activityからlayout xmlを探してxmlを確認する
ButtonのClick Eventを変更しましょう
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
1.変更したい画?のactivityを探す
2.Activityからlayout xmlを探してxmlを確認する
3.変更したいボタンのidを覚えてactivityに戻る
ButtonのClick Eventを変更しましょう
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
1.変更したい画?のactivityを探す
2.Activityからlayout xmlを探してxmlを確認する
3.変更したいボタンのidを覚えてactivityに戻る
4.Activityで覚えたidとbindingされてるviewを探す
ButtonのClick Eventを変更しましょう
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
1.変更したい画?のactivityを探す
2.Activityからlayout xmlを探してxmlを確認する
3.変更したいボタンのidを覚えてactivityに戻る
4.Activityで覚えたidとbindingされてるviewを探す
5.Viewのclick listenerを探してeventを変更する
ButtonのClick Eventを変更しましょう
LINE Creators Studio Androidのアプリ設計
1.変更したい画?のactivityを探す
ButtonのClick Eventを変更しましょう with anko
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
1.変更したい画?のactivityを探す
2.Activityからui componentを探す
ButtonのClick Eventを変更しましょう with anko
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
1.変更したい画?のActivityを探す
2.Activityからui componentを探す
3.Ui componentの中でviewを探し、click eventを変更する
(click listenerはviewと?緒にあるので探す必要はありません)
ButtonのClick Eventを変更しましょう with anko
LINE Creators Studio Android with Kotlin.
Activity	/	Fragment
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
Ui	Component
Activity	/	Fragment
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
Ui	Component
Activity	/	Fragment
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
Ui	Component
Activity	/	Fragment
Repository Realm
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
Ui	Component
Activity	/	Fragment
Repository Realm
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
User	interaction
Ui	Component
Activity	/	Fragment
Repository Realm
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
var profileLayout : ProfileLayout
frameLayout {
button {
text = "save button"
}.onClick {
onwer.save(profile)
}
profileLayout = profileLayout()
}
fun updateLayout(profile: Profile) {
profileLayout.set(profile)
}
UserProfileUi.kt
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
var profileLayout : ProfileLayout
frameLayout {
button {
text = "save button"
}.onClick {
onwer.save(profile)
}
profileLayout = profileLayout()
}
fun updateLayout(profile: Profile) {
profileLayout.set(profile)
}
UserProfileUi.kt
var ui : UserProfileUi
fun save(profile: Profile) {
profileRepository.save(profile)
}
fun load() {
profileRepository.load()
.subscribe(ui.updateLayout(it))
}
UserProfileActivity.kt
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
?Layout, user interaction -> ui component
?Activity, fragment -> lifecycle管理, 窓?役割
?Business logic -> repository
ここまでのまとめ
LINE Creators Studio Android with Kotlin.
LINE Creators Studio Androidのアプリ設計
AndroidでUIテスト?動化 with Firebase Test
Lab
? LINE Creators Studio AndroidはAndroid 4.1からサポートしています
?端末種類やOS version依存のbugが多い
?たくさんの端末を?動で確認するのはコストがかかりすぎる
背景
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
?テストコードを書いといたら(あるいは書かない)
やりたいこと
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
?テストコードを書いといたら(あるいは書かない)
?コードの変更があった時に
やりたいこと
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
?テストコードを書いといたら(あるいは書かない)
?コードの変更があった時に
?いろんな端末とOSで
やりたいこと
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
?テストコードを書いといたら(あるいは書かない)
?コードの変更があった時に
?いろんな端末とOSで
??動的にテストして欲しい!!!
やりたいこと
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
?テストコードを書いといたら(あるいは書かない)- espressoで書く(あるいはroboテスト)
やるぞ!
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
?テストコードを書いといたら(あるいは書かない)- espressoで書く(あるいはroboテスト)
?コードの変更があった時に - Githubに新しいPull Requestが来たら
やるぞ!
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
?テストコードを書いといたら(あるいは書かない)- espressoで書く(あるいはroboテスト)
?コードの変更があった時に - Githubに新しいPull Requestが来たら
?いろんな端末とOSで - ざっくり44個の端末、api level 18~26までサポート
やるぞ!
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
?テストコードを書いといたら(あるいは書かない)- espressoで書く(あるいはroboテスト)
?コードの変更があった時に - Githubに新しいPull Requestが来たら
?いろんな端末とOSで - ざっくり44個の端末、api level 18~26までサポート
??動的にテストしてくれてます! - Jenkinsでビルド
やるぞ!
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
?正直全ての画?に対してUIテストを書くのは難しいと思います
テストコードについて
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
?正直全ての画?に対してUIテストを書くのは難しいと思います
?たとえすごく頑張って全画?に書いたとしても画?の変更があったらテストコードも変更しないとい
けないのでメンテコストがたくさんかかりますね
テストコードについて
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
テストコードの優先順位を決めましょう
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
1.お?にかかわる画?(決済画?や購?画?)
テストコードの優先順位を決めましょう
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
1.お?に関わる画?(決済画?や購?画?)
2.データ(状態)によってUIが変わる画?
- コードの変更によってバグが発?する可能性が?いです
テストコードの優先順位を決めましょう
LINE Creators Studio Android with Kotlin.
AndroidでUIテスト?動化 with Firebase Test
Lab
?Firebase test labのroboテストから使ってみてください
?テストコードなしで動きます
?いつも同じフローでテストしてくれます
?Edittextなどに任意のテキストを?れることも可能です
?テストの様?を画像や動画が?ることもできます
テストコード書く時間なんてないよ、、
LINE Creators Studio Android with Kotlin.
?指そう!バグのないアプリ!
(実現出来るとは?っていない)
発表は以上となります。
ご清聴ありがとうございました。
LINE Creators Studio Android with Kotlin.
Thank you.

More Related Content

What's hot (20)

building HTML hybrid app? with ionic
building HTML hybrid app? with ionicbuilding HTML hybrid app? with ionic
building HTML hybrid app? with ionic
Nakano Kyohei
?
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみた
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみたCordova を使って本気で商用ハイブリッドアプリ開発をやってみた
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみた
Shin Ogata
?
いま考えられる限り最も速く対话型アプリを开発する方法
いま考えられる限り最も速く対话型アプリを开発する方法いま考えられる限り最も速く対话型アプリを开発する方法
いま考えられる限り最も速く対话型アプリを开発する方法
Kenichiro Nakamura
?
颁辞谤诲辞惫补で础苍驳耻濒补谤闯厂アプリ开発
颁辞谤诲辞惫补で础苍驳耻濒补谤闯厂アプリ开発颁辞谤诲辞惫补で础苍驳耻濒补谤闯厂アプリ开発
颁辞谤诲辞惫补で础苍驳耻濒补谤闯厂アプリ开発
アシアル株式会社
?
贬罢惭尝5ハイブリッドアプリ开発のベストプラクティス
贬罢惭尝5ハイブリッドアプリ开発のベストプラクティス贬罢惭尝5ハイブリッドアプリ开発のベストプラクティス
贬罢惭尝5ハイブリッドアプリ开発のベストプラクティス
アシアル株式会社
?
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
Shinichiro Yoshida
?
CodePushとReact Nativeで緊急OTAリリース!了解!?
CodePushとReact Nativeで緊急OTAリリース!了解!?CodePushとReact Nativeで緊急OTAリリース!了解!?
CodePushとReact Nativeで緊急OTAリリース!了解!?
Masayuki Iwai
?
颁辞谤诲辞惫补で作る!センサと超小型叠尝贰モジュールを用いた简単滨辞罢アプリ开発
颁辞谤诲辞惫补で作る!センサと超小型叠尝贰モジュールを用いた简単滨辞罢アプリ开発颁辞谤诲辞惫补で作る!センサと超小型叠尝贰モジュールを用いた简単滨辞罢アプリ开発
颁辞谤诲辞惫补で作る!センサと超小型叠尝贰モジュールを用いた简単滨辞罢アプリ开発
Hikaru Ito
?
大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
Mori Shingo
?
础苍诲谤辞颈诲でもサクサク动く贬罢惭尝5ハイブリッドアプリの作り?
础苍诲谤辞颈诲でもサクサク动く贬罢惭尝5ハイブリッドアプリの作り?础苍诲谤辞颈诲でもサクサク动く贬罢惭尝5ハイブリッドアプリの作り?
础苍诲谤辞颈诲でもサクサク动く贬罢惭尝5ハイブリッドアプリの作り?
アシアル株式会社
?
エンタープライズ?モバイルアプリにおける ハイブリッドアプリ開発
エンタープライズ?モバイルアプリにおける ハイブリッドアプリ開発エンタープライズ?モバイルアプリにおける ハイブリッドアプリ開発
エンタープライズ?モバイルアプリにおける ハイブリッドアプリ開発
日本颁辞谤诲辞惫补ユーザー会
?
アプリエンジニアのデザインに対するこころがまえの话
アプリエンジニアのデザインに対するこころがまえの话アプリエンジニアのデザインに対するこころがまえの话
アプリエンジニアのデザインに対するこころがまえの话
Shingo Sato
?
はやわかり贬罢惭尝5ハイブリッドアプリ开発事情
はやわかり贬罢惭尝5ハイブリッドアプリ开発事情 はやわかり贬罢惭尝5ハイブリッドアプリ开発事情
はやわかり贬罢惭尝5ハイブリッドアプリ开発事情
Monaca
?
smartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用についてsmartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用について
剛志 森田
?
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについてネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
Kazuaki Hidaka
?
Visual Studio 2015 を使用した Cordova アプリの開発
Visual Studio 2015 を使用した Cordova アプリの開発Visual Studio 2015 を使用した Cordova アプリの開発
Visual Studio 2015 を使用した Cordova アプリの開発
Osamu Monoe
?
苍补苍补辫颈における継続的インテグレーション
苍补苍补辫颈における継続的インテグレーション苍补苍补辫颈における継続的インテグレーション
苍补苍补辫颈における継続的インテグレーション
晃 遠山
?
滨辞苍颈肠て?ハイフ?リット?アフ?リ入门①
滨辞苍颈肠て?ハイフ?リット?アフ?リ入门①滨辞苍颈肠て?ハイフ?リット?アフ?リ入门①
滨辞苍颈肠て?ハイフ?リット?アフ?リ入门①
Tomokatsu Iguchi
?
厂蹿素人が2週间でアプリケーションビルダーに挑戦してみた
厂蹿素人が2週间でアプリケーションビルダーに挑戦してみた厂蹿素人が2週间でアプリケーションビルダーに挑戦してみた
厂蹿素人が2週间でアプリケーションビルダーに挑戦してみた
政雄 金森
?
搁别补肠迟に蹿濒辞飞迟测辫别を组み合わせることで、我々は何を楽にできたか
搁别补肠迟に蹿濒辞飞迟测辫别を组み合わせることで、我々は何を楽にできたか搁别补肠迟に蹿濒辞飞迟测辫别を组み合わせることで、我々は何を楽にできたか
搁别补肠迟に蹿濒辞飞迟测辫别を组み合わせることで、我々は何を楽にできたか
LINE Corporation
?
building HTML hybrid app? with ionic
building HTML hybrid app? with ionicbuilding HTML hybrid app? with ionic
building HTML hybrid app? with ionic
Nakano Kyohei
?
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみた
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみたCordova を使って本気で商用ハイブリッドアプリ開発をやってみた
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみた
Shin Ogata
?
いま考えられる限り最も速く対话型アプリを开発する方法
いま考えられる限り最も速く対话型アプリを开発する方法いま考えられる限り最も速く対话型アプリを开発する方法
いま考えられる限り最も速く対话型アプリを开発する方法
Kenichiro Nakamura
?
颁辞谤诲辞惫补で础苍驳耻濒补谤闯厂アプリ开発
颁辞谤诲辞惫补で础苍驳耻濒补谤闯厂アプリ开発颁辞谤诲辞惫补で础苍驳耻濒补谤闯厂アプリ开発
颁辞谤诲辞惫补で础苍驳耻濒补谤闯厂アプリ开発
アシアル株式会社
?
贬罢惭尝5ハイブリッドアプリ开発のベストプラクティス
贬罢惭尝5ハイブリッドアプリ开発のベストプラクティス贬罢惭尝5ハイブリッドアプリ开発のベストプラクティス
贬罢惭尝5ハイブリッドアプリ开発のベストプラクティス
アシアル株式会社
?
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
~新しい着回しと出会おう~ 『XZ(クローゼット)』 を支える技術 -Cordova編-
Shinichiro Yoshida
?
CodePushとReact Nativeで緊急OTAリリース!了解!?
CodePushとReact Nativeで緊急OTAリリース!了解!?CodePushとReact Nativeで緊急OTAリリース!了解!?
CodePushとReact Nativeで緊急OTAリリース!了解!?
Masayuki Iwai
?
颁辞谤诲辞惫补で作る!センサと超小型叠尝贰モジュールを用いた简単滨辞罢アプリ开発
颁辞谤诲辞惫补で作る!センサと超小型叠尝贰モジュールを用いた简単滨辞罢アプリ开発颁辞谤诲辞惫补で作る!センサと超小型叠尝贰モジュールを用いた简単滨辞罢アプリ开発
颁辞谤诲辞惫补で作る!センサと超小型叠尝贰モジュールを用いた简単滨辞罢アプリ开発
Hikaru Ito
?
大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
大なごやJS vol.6 Titanium Mobile と Alloy の解説をするよ!
Mori Shingo
?
础苍诲谤辞颈诲でもサクサク动く贬罢惭尝5ハイブリッドアプリの作り?
础苍诲谤辞颈诲でもサクサク动く贬罢惭尝5ハイブリッドアプリの作り?础苍诲谤辞颈诲でもサクサク动く贬罢惭尝5ハイブリッドアプリの作り?
础苍诲谤辞颈诲でもサクサク动く贬罢惭尝5ハイブリッドアプリの作り?
アシアル株式会社
?
エンタープライズ?モバイルアプリにおける ハイブリッドアプリ開発
エンタープライズ?モバイルアプリにおける ハイブリッドアプリ開発エンタープライズ?モバイルアプリにおける ハイブリッドアプリ開発
エンタープライズ?モバイルアプリにおける ハイブリッドアプリ開発
日本颁辞谤诲辞惫补ユーザー会
?
アプリエンジニアのデザインに対するこころがまえの话
アプリエンジニアのデザインに対するこころがまえの话アプリエンジニアのデザインに対するこころがまえの话
アプリエンジニアのデザインに対するこころがまえの话
Shingo Sato
?
はやわかり贬罢惭尝5ハイブリッドアプリ开発事情
はやわかり贬罢惭尝5ハイブリッドアプリ开発事情 はやわかり贬罢惭尝5ハイブリッドアプリ开発事情
はやわかり贬罢惭尝5ハイブリッドアプリ开発事情
Monaca
?
smartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用についてsmartFXにおけるApache Cordovaの活用について
smartFXにおけるApache Cordovaの活用について
剛志 森田
?
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについてネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
Kazuaki Hidaka
?
Visual Studio 2015 を使用した Cordova アプリの開発
Visual Studio 2015 を使用した Cordova アプリの開発Visual Studio 2015 を使用した Cordova アプリの開発
Visual Studio 2015 を使用した Cordova アプリの開発
Osamu Monoe
?
苍补苍补辫颈における継続的インテグレーション
苍补苍补辫颈における継続的インテグレーション苍补苍补辫颈における継続的インテグレーション
苍补苍补辫颈における継続的インテグレーション
晃 遠山
?
滨辞苍颈肠て?ハイフ?リット?アフ?リ入门①
滨辞苍颈肠て?ハイフ?リット?アフ?リ入门①滨辞苍颈肠て?ハイフ?リット?アフ?リ入门①
滨辞苍颈肠て?ハイフ?リット?アフ?リ入门①
Tomokatsu Iguchi
?
厂蹿素人が2週间でアプリケーションビルダーに挑戦してみた
厂蹿素人が2週间でアプリケーションビルダーに挑戦してみた厂蹿素人が2週间でアプリケーションビルダーに挑戦してみた
厂蹿素人が2週间でアプリケーションビルダーに挑戦してみた
政雄 金森
?
搁别补肠迟に蹿濒辞飞迟测辫别を组み合わせることで、我々は何を楽にできたか
搁别补肠迟に蹿濒辞飞迟测辫别を组み合わせることで、我々は何を楽にできたか搁别补肠迟に蹿濒辞飞迟测辫别を组み合わせることで、我々は何を楽にできたか
搁别补肠迟に蹿濒辞飞迟测辫别を组み合わせることで、我々は何を楽にできたか
LINE Corporation
?

Similar to Line Creators Studio Android With Kotlin (20)

ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
bitbank, Inc. Tokyo, Japan
?
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
Takashi Okawa
?
新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ
慎一 古賀
?
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
Keiji Ariyama
?
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
?
Azure IoT Edge - EdgeAI #5
Azure IoT Edge - EdgeAI #5Azure IoT Edge - EdgeAI #5
Azure IoT Edge - EdgeAI #5
Jingun Jung
?
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
Yasuhiko Yamamoto
?
スマ研第2回レポート
スマ研第2回レポートスマ研第2回レポート
スマ研第2回レポート
Shinpei Niiyama
?
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
Akira Inoue
?
惭别迟谤辞アプリケーションの飞颈苍8/飞辫7の効率的ソース运用を考える
惭别迟谤辞アプリケーションの飞颈苍8/飞辫7の効率的ソース运用を考える惭别迟谤辞アプリケーションの飞颈苍8/飞辫7の効率的ソース运用を考える
惭别迟谤辞アプリケーションの飞颈苍8/飞辫7の効率的ソース运用を考える
Takahito Sugishita
?
Efsta cod2012 master_for_slideshare
Efsta cod2012 master_for_slideshareEfsta cod2012 master_for_slideshare
Efsta cod2012 master_for_slideshare
Takahito Sugishita
?
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
慎一 古賀
?
~ アプリ開発に新たな息吹を ~ クラウドが当たり前の今こそ知っておきたい Azure & Visual Studio コラボレーション
~ アプリ開発に新たな息吹を ~ クラウドが当たり前の今こそ知っておきたい Azure & Visual Studio コラボレーション~ アプリ開発に新たな息吹を ~ クラウドが当たり前の今こそ知っておきたい Azure & Visual Studio コラボレーション
~ アプリ開発に新たな息吹を ~ クラウドが当たり前の今こそ知っておきたい Azure & Visual Studio コラボレーション
Akira Inoue
?
IBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみようIBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみよう
Takuji Kawata
?
Android Studio 2.2の紹介@Google I/O 2016東京報告会
Android Studio 2.2の紹介@Google I/O 2016東京報告会Android Studio 2.2の紹介@Google I/O 2016東京報告会
Android Studio 2.2の紹介@Google I/O 2016東京報告会
mokelab
?
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
?
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
?
「颁补尘别濒辞驳」础苍诲谤辞颈诲开発秘话
「颁补尘别濒辞驳」础苍诲谤辞颈诲开発秘话「颁补尘别濒辞驳」础苍诲谤辞颈诲开発秘话
「颁补尘别濒辞驳」础苍诲谤辞颈诲开発秘话
Shoya Tsukada
?
碍濒辞肠飞辞谤办のご绍介
碍濒辞肠飞辞谤办のご绍介碍濒辞肠飞辞谤办のご绍介
碍濒辞肠飞辞谤办のご绍介
Masaru Horioka
?
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介
l_b__
?
ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
bitbank, Inc. Tokyo, Japan
?
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
Takashi Okawa
?
新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ
慎一 古賀
?
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
Keiji Ariyama
?
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
?
Azure IoT Edge - EdgeAI #5
Azure IoT Edge - EdgeAI #5Azure IoT Edge - EdgeAI #5
Azure IoT Edge - EdgeAI #5
Jingun Jung
?
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
Yasuhiko Yamamoto
?
スマ研第2回レポート
スマ研第2回レポートスマ研第2回レポート
スマ研第2回レポート
Shinpei Niiyama
?
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
Akira Inoue
?
惭别迟谤辞アプリケーションの飞颈苍8/飞辫7の効率的ソース运用を考える
惭别迟谤辞アプリケーションの飞颈苍8/飞辫7の効率的ソース运用を考える惭别迟谤辞アプリケーションの飞颈苍8/飞辫7の効率的ソース运用を考える
惭别迟谤辞アプリケーションの飞颈苍8/飞辫7の効率的ソース运用を考える
Takahito Sugishita
?
Efsta cod2012 master_for_slideshare
Efsta cod2012 master_for_slideshareEfsta cod2012 master_for_slideshare
Efsta cod2012 master_for_slideshare
Takahito Sugishita
?
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
慎一 古賀
?
~ アプリ開発に新たな息吹を ~ クラウドが当たり前の今こそ知っておきたい Azure & Visual Studio コラボレーション
~ アプリ開発に新たな息吹を ~ クラウドが当たり前の今こそ知っておきたい Azure & Visual Studio コラボレーション~ アプリ開発に新たな息吹を ~ クラウドが当たり前の今こそ知っておきたい Azure & Visual Studio コラボレーション
~ アプリ開発に新たな息吹を ~ クラウドが当たり前の今こそ知っておきたい Azure & Visual Studio コラボレーション
Akira Inoue
?
IBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみようIBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみよう
Takuji Kawata
?
Android Studio 2.2の紹介@Google I/O 2016東京報告会
Android Studio 2.2の紹介@Google I/O 2016東京報告会Android Studio 2.2の紹介@Google I/O 2016東京報告会
Android Studio 2.2の紹介@Google I/O 2016東京報告会
mokelab
?
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Shotaro Suzuki
?
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
?
「颁补尘别濒辞驳」础苍诲谤辞颈诲开発秘话
「颁补尘别濒辞驳」础苍诲谤辞颈诲开発秘话「颁补尘别濒辞驳」础苍诲谤辞颈诲开発秘话
「颁补尘别濒辞驳」础苍诲谤辞颈诲开発秘话
Shoya Tsukada
?
碍濒辞肠飞辞谤办のご绍介
碍濒辞肠飞辞谤办のご绍介碍濒辞肠飞辞谤办のご绍介
碍濒辞肠飞辞谤办のご绍介
Masaru Horioka
?
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介
l_b__
?

More from LINE Corporation (20)

JJUG CCC 2018 Fall 懇親会LT
JJUG CCC 2018 Fall 懇親会LTJJUG CCC 2018 Fall 懇親会LT
JJUG CCC 2018 Fall 懇親会LT
LINE Corporation
?
Reduce dependency on Rx with Kotlin Coroutines
Reduce dependency on Rx with Kotlin CoroutinesReduce dependency on Rx with Kotlin Coroutines
Reduce dependency on Rx with Kotlin Coroutines
LINE Corporation
?
碍辞迟濒颈苍/狈补迟颈惫别で础苍诲谤辞颈诲の狈补迟颈惫别メソッドを実装してみた
碍辞迟濒颈苍/狈补迟颈惫别で础苍诲谤辞颈诲の狈补迟颈惫别メソッドを実装してみた碍辞迟濒颈苍/狈补迟颈惫别で础苍诲谤辞颈诲の狈补迟颈惫别メソッドを実装してみた
碍辞迟濒颈苍/狈补迟颈惫别で础苍诲谤辞颈诲の狈补迟颈惫别メソッドを実装してみた
LINE Corporation
?
Use Kotlin scripts and Clova SDK to build your Clova extension
Use Kotlin scripts and Clova SDK to build your Clova extensionUse Kotlin scripts and Clova SDK to build your Clova extension
Use Kotlin scripts and Clova SDK to build your Clova extension
LINE Corporation
?
The Magic of LINE 購物 Testing
The Magic of LINE 購物 TestingThe Magic of LINE 購物 Testing
The Magic of LINE 購物 Testing
LINE Corporation
?
GA Test Automation
GA Test AutomationGA Test Automation
GA Test Automation
LINE Corporation
?
UI Automation Test with JUnit5
UI Automation Test with JUnit5UI Automation Test with JUnit5
UI Automation Test with JUnit5
LINE Corporation
?
Feature Detection for UI Testing
Feature Detection for UI TestingFeature Detection for UI Testing
Feature Detection for UI Testing
LINE Corporation
?
LINE 新星計劃介紹與新創團隊分享
LINE 新星計劃介紹與新創團隊分享LINE 新星計劃介紹與新創團隊分享
LINE 新星計劃介紹與新創團隊分享
LINE Corporation
?
?LINE 技術合作夥伴與應用分享
?LINE 技術合作夥伴與應用分享?LINE 技術合作夥伴與應用分享
?LINE 技術合作夥伴與應用分享
LINE Corporation
?
LINE 開發者社群經營與技術推廣
LINE 開發者社群經營與技術推廣LINE 開發者社群經營與技術推廣
LINE 開發者社群經營與技術推廣
LINE Corporation
?
日本开发者大会短讲分享
日本开发者大会短讲分享日本开发者大会短讲分享
日本开发者大会短讲分享
LINE Corporation
?
LINE Chatbot - 活動報名報到設計分享
LINE Chatbot - 活動報名報到設計分享LINE Chatbot - 活動報名報到設計分享
LINE Chatbot - 活動報名報到設計分享
LINE Corporation
?
在 LINE 私有雲中使用 Managed Kubernetes
在 LINE 私有雲中使用 Managed Kubernetes在 LINE 私有雲中使用 Managed Kubernetes
在 LINE 私有雲中使用 Managed Kubernetes
LINE Corporation
?
LINE TODAY高效率的敏捷測試開發技巧
LINE TODAY高效率的敏捷測試開發技巧LINE TODAY高效率的敏捷測試開發技巧
LINE TODAY高效率的敏捷測試開發技巧
LINE Corporation
?
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE Corporation
?
LINE Things - LINE IoT平台新技術分享
LINE Things - LINE IoT平台新技術分享LINE Things - LINE IoT平台新技術分享
LINE Things - LINE IoT平台新技術分享
LINE Corporation
?
LINE Pay - 一卡通支付新體驗
LINE Pay - 一卡通支付新體驗LINE Pay - 一卡通支付新體驗
LINE Pay - 一卡通支付新體驗
LINE Corporation
?
LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Platform API Update - 打造一個更好的Chatbot服務LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Corporation
?
Keynote - ?LINE 的技術策略佈局與跨國產品開發
Keynote - ?LINE 的技術策略佈局與跨國產品開發Keynote - ?LINE 的技術策略佈局與跨國產品開發
Keynote - ?LINE 的技術策略佈局與跨國產品開發
LINE Corporation
?
JJUG CCC 2018 Fall 懇親会LT
JJUG CCC 2018 Fall 懇親会LTJJUG CCC 2018 Fall 懇親会LT
JJUG CCC 2018 Fall 懇親会LT
LINE Corporation
?
Reduce dependency on Rx with Kotlin Coroutines
Reduce dependency on Rx with Kotlin CoroutinesReduce dependency on Rx with Kotlin Coroutines
Reduce dependency on Rx with Kotlin Coroutines
LINE Corporation
?
碍辞迟濒颈苍/狈补迟颈惫别で础苍诲谤辞颈诲の狈补迟颈惫别メソッドを実装してみた
碍辞迟濒颈苍/狈补迟颈惫别で础苍诲谤辞颈诲の狈补迟颈惫别メソッドを実装してみた碍辞迟濒颈苍/狈补迟颈惫别で础苍诲谤辞颈诲の狈补迟颈惫别メソッドを実装してみた
碍辞迟濒颈苍/狈补迟颈惫别で础苍诲谤辞颈诲の狈补迟颈惫别メソッドを実装してみた
LINE Corporation
?
Use Kotlin scripts and Clova SDK to build your Clova extension
Use Kotlin scripts and Clova SDK to build your Clova extensionUse Kotlin scripts and Clova SDK to build your Clova extension
Use Kotlin scripts and Clova SDK to build your Clova extension
LINE Corporation
?
The Magic of LINE 購物 Testing
The Magic of LINE 購物 TestingThe Magic of LINE 購物 Testing
The Magic of LINE 購物 Testing
LINE Corporation
?
UI Automation Test with JUnit5
UI Automation Test with JUnit5UI Automation Test with JUnit5
UI Automation Test with JUnit5
LINE Corporation
?
Feature Detection for UI Testing
Feature Detection for UI TestingFeature Detection for UI Testing
Feature Detection for UI Testing
LINE Corporation
?
LINE 新星計劃介紹與新創團隊分享
LINE 新星計劃介紹與新創團隊分享LINE 新星計劃介紹與新創團隊分享
LINE 新星計劃介紹與新創團隊分享
LINE Corporation
?
?LINE 技術合作夥伴與應用分享
?LINE 技術合作夥伴與應用分享?LINE 技術合作夥伴與應用分享
?LINE 技術合作夥伴與應用分享
LINE Corporation
?
LINE 開發者社群經營與技術推廣
LINE 開發者社群經營與技術推廣LINE 開發者社群經營與技術推廣
LINE 開發者社群經營與技術推廣
LINE Corporation
?
日本开发者大会短讲分享
日本开发者大会短讲分享日本开发者大会短讲分享
日本开发者大会短讲分享
LINE Corporation
?
LINE Chatbot - 活動報名報到設計分享
LINE Chatbot - 活動報名報到設計分享LINE Chatbot - 活動報名報到設計分享
LINE Chatbot - 活動報名報到設計分享
LINE Corporation
?
在 LINE 私有雲中使用 Managed Kubernetes
在 LINE 私有雲中使用 Managed Kubernetes在 LINE 私有雲中使用 Managed Kubernetes
在 LINE 私有雲中使用 Managed Kubernetes
LINE Corporation
?
LINE TODAY高效率的敏捷測試開發技巧
LINE TODAY高效率的敏捷測試開發技巧LINE TODAY高效率的敏捷測試開發技巧
LINE TODAY高效率的敏捷測試開發技巧
LINE Corporation
?
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE Corporation
?
LINE Things - LINE IoT平台新技術分享
LINE Things - LINE IoT平台新技術分享LINE Things - LINE IoT平台新技術分享
LINE Things - LINE IoT平台新技術分享
LINE Corporation
?
LINE Pay - 一卡通支付新體驗
LINE Pay - 一卡通支付新體驗LINE Pay - 一卡通支付新體驗
LINE Pay - 一卡通支付新體驗
LINE Corporation
?
LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Platform API Update - 打造一個更好的Chatbot服務LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Corporation
?
Keynote - ?LINE 的技術策略佈局與跨國產品開發
Keynote - ?LINE 的技術策略佈局與跨國產品開發Keynote - ?LINE 的技術策略佈局與跨國產品開發
Keynote - ?LINE 的技術策略佈局與跨國產品開發
LINE Corporation
?

Line Creators Studio Android With Kotlin

  • 2. ??紹介 李 性賢 LINE Fukuoka 株式会社 開発1チーム所属 LEE SUNGHYUN(Dave)
  • 3. LINE Creators Studio Android with Kotlin. LINE Creators Studio Android with Kotlin. ?LINE Creators Studio Android with Kotlin ?LINE Creators Studio Androidのアプリ設計 ?AndroidでUIテスト?動化 with Firebase Test Lab ?次
  • 4. LINE Creators Studio Android with Kotlin. 技術概要 ?語:Kotlin Layout:Anko Network:Retrofit2, OkHttp3 DB:Realm Reactive Programming:RxJava1, RxBinding, RxLifecycle Dependecy Injection:Dagger2 Test:Espresso, Mockito-Kotlin
  • 5. LINE Creators Studio Android with Kotlin. Why Kotlin? null safe lambda extension property 型推論 anko 100% java 相互運用性
  • 6. LINE Creators Studio Android with Kotlin. Why Kotlin? ?チームの開発?産性を向上させたい ?メンテしやすいコードを書きたい ?NPEから発?するバグを減らしたい 背景
  • 7. LINE Creators Studio Android with Kotlin. Null Safe ?NPEによるバグ発?率↓ ?annotationを作成するコスト↓ ?メンテしやすさ↑ No more needed @NonNull, @Nullable annotations in kotlin.
  • 8. LINE Creators Studio Android with Kotlin. Lambda button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.v(TAG, "clicked"); } }); Java
  • 9. LINE Creators Studio Android with Kotlin. Lambda button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.v(TAG, "clicked"); } }); button.setOnClickListener { Log.v(TAG, "clicked") } Java Kotlin
  • 10. LINE Creators Studio Android with Kotlin. Lambda button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.v(TAG, "clicked"); } }); button.setOnClickListener { Log.v(TAG, "clicked") } button.onClick { Log.v(TAG, "clicked") } Java Kotlin Kotlin with anko ?コード量↓ ?読みやすさ↑
  • 11. Extension fun View.onGlobalLayout(once: Boolean = true, init: View.() -> Unit) { val view = this viewTreeObserver.addOnGlobalLayoutListener(object : OnGlobalLayoutListener { override fun onGlobalLayout() { init() if (once) { view.viewTreeObserver.removeOnGlobalLayoutListener(this) } } }) } ViewExtension.kt LINE Creators Studio Android with Kotlin.
  • 12. Extension + Anko frameLayout { val button = button() button.onClick { // click event. } }.onGlobalLayout { // view update codes. } MainUi.kt LINE Creators Studio Android with Kotlin.
  • 13. Anko LINE Creators Studio Android with Kotlin.
  • 14. Anko ?Dialog or PopupWindowを使う ?layout.xmlに定義し、tooltip layoutをvisible, gone ?別のxmlを作り、必要に応じて動的に <include> 考えられる実装?法 LINE Creators Studio Android with Kotlin.
  • 15. Anko ToolTipLayout.kt fun ViewManager.toolTipLayout() = verticalLayout { gravity = Gravity.CENTER_VERTICAL textView(R.style.ToolTipDescriptionStyle) { text = "This is ToolTip Layout!" } ... // more tool tip views. } LINE Creators Studio Android with Kotlin.
  • 16. Anko ToolTipLayout.kt fun ViewManager.toolTipLayout() = verticalLayout { gravity = Gravity.CENTER_VERTICAL textView(R.style.ToolTipDescriptionStyle) { text = "This is ToolTip Layout!" } ... // more tool tip views. } frameLayout { ... // main views. if (shouldShowToolTip) { toolTipLayout() } StickerListUi.kt LINE Creators Studio Android with Kotlin.
  • 17. Anko ?Custom Layoutを作ったり使ったりすることが簡単 ?Xml parsingが必要ないので早い ?Business logicとui codeを分離しやすい Pros LINE Creators Studio Android with Kotlin.
  • 18. Anko ?Custom Layoutを作ったり使ったりすることが簡単 ?Xml parsingが必要ないので早い ?Business logicとui codeを分離しやすい Pros ?DSLなので学習コストがある ?data binding libaryをサポートしてない ?constraintlayoutをサポートしてない Cons LINE Creators Studio Android with Kotlin.
  • 19. Anko Preview (Android Studio 2.4+) LINE Creators Studio Android with Kotlin.
  • 20. LINE Creators Studio Androidのアプリ設計 ButtonのClick Eventを変更しましょう LINE Creators Studio Android with Kotlin.
  • 21. LINE Creators Studio Androidのアプリ設計 1. 変更したい画?のactivityを探す ButtonのClick Eventを変更しましょう LINE Creators Studio Android with Kotlin.
  • 22. LINE Creators Studio Androidのアプリ設計 1.変更したい画?のactivityを探す 2.Activityからlayout xmlを探してxmlを確認する ButtonのClick Eventを変更しましょう LINE Creators Studio Android with Kotlin.
  • 23. LINE Creators Studio Androidのアプリ設計 1.変更したい画?のactivityを探す 2.Activityからlayout xmlを探してxmlを確認する 3.変更したいボタンのidを覚えてactivityに戻る ButtonのClick Eventを変更しましょう LINE Creators Studio Android with Kotlin.
  • 24. LINE Creators Studio Android with Kotlin. LINE Creators Studio Androidのアプリ設計 1.変更したい画?のactivityを探す 2.Activityからlayout xmlを探してxmlを確認する 3.変更したいボタンのidを覚えてactivityに戻る 4.Activityで覚えたidとbindingされてるviewを探す ButtonのClick Eventを変更しましょう
  • 25. LINE Creators Studio Android with Kotlin. LINE Creators Studio Androidのアプリ設計 1.変更したい画?のactivityを探す 2.Activityからlayout xmlを探してxmlを確認する 3.変更したいボタンのidを覚えてactivityに戻る 4.Activityで覚えたidとbindingされてるviewを探す 5.Viewのclick listenerを探してeventを変更する ButtonのClick Eventを変更しましょう
  • 26. LINE Creators Studio Androidのアプリ設計 1.変更したい画?のactivityを探す ButtonのClick Eventを変更しましょう with anko LINE Creators Studio Android with Kotlin.
  • 27. LINE Creators Studio Androidのアプリ設計 1.変更したい画?のactivityを探す 2.Activityからui componentを探す ButtonのClick Eventを変更しましょう with anko LINE Creators Studio Android with Kotlin.
  • 28. LINE Creators Studio Androidのアプリ設計 1.変更したい画?のActivityを探す 2.Activityからui componentを探す 3.Ui componentの中でviewを探し、click eventを変更する (click listenerはviewと?緒にあるので探す必要はありません) ButtonのClick Eventを変更しましょう with anko LINE Creators Studio Android with Kotlin.
  • 29. Activity / Fragment LINE Creators Studio Android with Kotlin. LINE Creators Studio Androidのアプリ設計
  • 30. Ui Component Activity / Fragment LINE Creators Studio Android with Kotlin. LINE Creators Studio Androidのアプリ設計
  • 31. Ui Component Activity / Fragment LINE Creators Studio Android with Kotlin. LINE Creators Studio Androidのアプリ設計
  • 32. Ui Component Activity / Fragment Repository Realm LINE Creators Studio Android with Kotlin. LINE Creators Studio Androidのアプリ設計
  • 33. Ui Component Activity / Fragment Repository Realm LINE Creators Studio Android with Kotlin. LINE Creators Studio Androidのアプリ設計
  • 34. User interaction Ui Component Activity / Fragment Repository Realm LINE Creators Studio Android with Kotlin. LINE Creators Studio Androidのアプリ設計
  • 35. var profileLayout : ProfileLayout frameLayout { button { text = "save button" }.onClick { onwer.save(profile) } profileLayout = profileLayout() } fun updateLayout(profile: Profile) { profileLayout.set(profile) } UserProfileUi.kt LINE Creators Studio Android with Kotlin. LINE Creators Studio Androidのアプリ設計
  • 36. var profileLayout : ProfileLayout frameLayout { button { text = "save button" }.onClick { onwer.save(profile) } profileLayout = profileLayout() } fun updateLayout(profile: Profile) { profileLayout.set(profile) } UserProfileUi.kt var ui : UserProfileUi fun save(profile: Profile) { profileRepository.save(profile) } fun load() { profileRepository.load() .subscribe(ui.updateLayout(it)) } UserProfileActivity.kt LINE Creators Studio Android with Kotlin. LINE Creators Studio Androidのアプリ設計
  • 37. ?Layout, user interaction -> ui component ?Activity, fragment -> lifecycle管理, 窓?役割 ?Business logic -> repository ここまでのまとめ LINE Creators Studio Android with Kotlin. LINE Creators Studio Androidのアプリ設計
  • 38. AndroidでUIテスト?動化 with Firebase Test Lab ? LINE Creators Studio AndroidはAndroid 4.1からサポートしています ?端末種類やOS version依存のbugが多い ?たくさんの端末を?動で確認するのはコストがかかりすぎる 背景 LINE Creators Studio Android with Kotlin.
  • 39. AndroidでUIテスト?動化 with Firebase Test Lab ?テストコードを書いといたら(あるいは書かない) やりたいこと LINE Creators Studio Android with Kotlin.
  • 40. AndroidでUIテスト?動化 with Firebase Test Lab ?テストコードを書いといたら(あるいは書かない) ?コードの変更があった時に やりたいこと LINE Creators Studio Android with Kotlin.
  • 41. AndroidでUIテスト?動化 with Firebase Test Lab ?テストコードを書いといたら(あるいは書かない) ?コードの変更があった時に ?いろんな端末とOSで やりたいこと LINE Creators Studio Android with Kotlin.
  • 42. AndroidでUIテスト?動化 with Firebase Test Lab ?テストコードを書いといたら(あるいは書かない) ?コードの変更があった時に ?いろんな端末とOSで ??動的にテストして欲しい!!! やりたいこと LINE Creators Studio Android with Kotlin.
  • 43. AndroidでUIテスト?動化 with Firebase Test Lab ?テストコードを書いといたら(あるいは書かない)- espressoで書く(あるいはroboテスト) やるぞ! LINE Creators Studio Android with Kotlin.
  • 44. AndroidでUIテスト?動化 with Firebase Test Lab ?テストコードを書いといたら(あるいは書かない)- espressoで書く(あるいはroboテスト) ?コードの変更があった時に - Githubに新しいPull Requestが来たら やるぞ! LINE Creators Studio Android with Kotlin.
  • 45. AndroidでUIテスト?動化 with Firebase Test Lab ?テストコードを書いといたら(あるいは書かない)- espressoで書く(あるいはroboテスト) ?コードの変更があった時に - Githubに新しいPull Requestが来たら ?いろんな端末とOSで - ざっくり44個の端末、api level 18~26までサポート やるぞ! LINE Creators Studio Android with Kotlin.
  • 46. AndroidでUIテスト?動化 with Firebase Test Lab ?テストコードを書いといたら(あるいは書かない)- espressoで書く(あるいはroboテスト) ?コードの変更があった時に - Githubに新しいPull Requestが来たら ?いろんな端末とOSで - ざっくり44個の端末、api level 18~26までサポート ??動的にテストしてくれてます! - Jenkinsでビルド やるぞ! LINE Creators Studio Android with Kotlin.
  • 47. AndroidでUIテスト?動化 with Firebase Test Lab ?正直全ての画?に対してUIテストを書くのは難しいと思います テストコードについて LINE Creators Studio Android with Kotlin.
  • 48. AndroidでUIテスト?動化 with Firebase Test Lab ?正直全ての画?に対してUIテストを書くのは難しいと思います ?たとえすごく頑張って全画?に書いたとしても画?の変更があったらテストコードも変更しないとい けないのでメンテコストがたくさんかかりますね テストコードについて LINE Creators Studio Android with Kotlin.
  • 49. AndroidでUIテスト?動化 with Firebase Test Lab テストコードの優先順位を決めましょう LINE Creators Studio Android with Kotlin.
  • 50. AndroidでUIテスト?動化 with Firebase Test Lab 1.お?にかかわる画?(決済画?や購?画?) テストコードの優先順位を決めましょう LINE Creators Studio Android with Kotlin.
  • 51. AndroidでUIテスト?動化 with Firebase Test Lab 1.お?に関わる画?(決済画?や購?画?) 2.データ(状態)によってUIが変わる画? - コードの変更によってバグが発?する可能性が?いです テストコードの優先順位を決めましょう LINE Creators Studio Android with Kotlin.
  • 52. AndroidでUIテスト?動化 with Firebase Test Lab ?Firebase test labのroboテストから使ってみてください ?テストコードなしで動きます ?いつも同じフローでテストしてくれます ?Edittextなどに任意のテキストを?れることも可能です ?テストの様?を画像や動画が?ることもできます テストコード書く時間なんてないよ、、 LINE Creators Studio Android with Kotlin.