Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Nächste SlideShare
What to Upload to SlideShare
What to Upload to SlideShare
Wird geladen in …3
×
1 von 45

20170618 Google I/O報告会in福岡

0

Teilen

Herunterladen, um offline zu lesen

2017年6月18日のGoogle I/O 報告会 in 福岡で発表したスライドだよー
Kotlin編の動画は通常スライドに変更してます

Ähnliche Bücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Ähnliche Hörbücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

20170618 Google I/O報告会in福岡

  1. 1. Android Studio 3.0 with Kotlin 〜 Google I/O 2017 報告会〜
  2. 2. @mokelab ● モバイルアプリの 受託開発 ● 技術情報発信 ● グッズ販売
  3. 3. Tech Sheets
  4. 4. 本がでます 初心者〜中級者向けに アプリ開発時の落とし穴を50個ほど紹介 (おとなの事情で7月中旬予定)
  5. 5. ● IntelliJ 2017.1 ● Kotlinサポート ● サンプルデータ ● Downloadable fonts ● Device explorer ● Android Profiler ● APK Analyzerの改善 ● エミュレータ ● etc
  6. 6. サンプルデータ プレビューにサンプルデータ表示機能 tools:src=”@sample/xxxx” JSONやtxtファイルで用意 (画像はだめっぽい。。。)
  7. 7. フォント XMLでフォントが指定できるようになった! <TextView android:id="@+id/body_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/aclonica" tools:text="@tools:sample/lorem"/>
  8. 8. フォント Android Studioもいい感じに対応
  9. 9. Device explorer 地味だけど便利
  10. 10. Android Profiler Chrome dev toolのAndroid版みたいなやつ 動画でどうぞ
  11. 11. APK Analyzer 地味〜に改善
  12. 12. エミュレータ Playストア入りエミュレータ ただしRootはとれません
  13. 13. Gradle dependenciesの書き方が変更に compile 'com.android.xxxxx' ↓ implementation 'com.android.xxxxx' api 'com.android.xxxxx'
  14. 14. ● JVM言語 ○ Scalaとか、Groovyとか ● Javaと混ぜて使える ○ ブリッジを書く必要なし! ○ ただしAPTが混ざるとアヤシイ ● モダンな機能いろいろ入ってる ● コンパイルはそれなりに早い ○ というかSwiftが遅すぎや。。
  15. 15. 変数 val name : String = "moke" var age : Int = 5 [val|var] 名前 : 型 という形式 valだと変更できません
  16. 16. if式 var message = "" if (Build.VERSION.SDK_INT >= Build.VERSION_CODE.M) { message = "Supported" } else { message = "not supported" }
  17. 17. if式 式なので、こんな風にかける var message = if (Build.VERSION.SDK_INT >= Build.VERSION_CODE.M) "Supported" else "not supported"
  18. 18. 繰り返し(for) Javaの拡張for文と同じかたち val a = arrayOf(1, 2, 3, 4, 5) for (item in a) { Log.v("tag", "value=$item") }
  19. 19. 繰り返し(for) for (int i = 0 ; i < 10 ; ++i) はどうやって書く? for (item in 0..9) { Log.v("tag", "value=$item") }
  20. 20. 繰り返し(while) Javaとまぁ同じ val k = 10 while (k >= 10) { …. --k }
  21. 21. 繰り返し(do-while) Javaとまぁ同じ val k = 10 do { …. --k } while (k >= 10)
  22. 22. when式 switch文のちょいいい版 var name = "" when (Build.VERSION.SDK_INT) { Build.VERSION_CODE.M -> name = "M!" Build.VERSION_CODE.N -> name = "N!" else -> { name = "Unknown" } }
  23. 23. when式 式なので右辺に使える else は必須 var name = when (Build.VERSION.SDK_INT) { Build.VERSION_CODE.M -> "M!" Build.VERSION_CODE.N -> "N!" else -> { "Unknown" } }
  24. 24. プロパティ Kotlinのクラスではプロパティになる class KotlinClass { var name : String = "" }
  25. 25. プロパティ Javaだとsetter/getter valなプロパティだったらgetterのみ public class JavaClass { private void moke() { KotlinClass c = new KotlinClass(); c.setName("moke"); } }
  26. 26. コンストラクタ その1:constructorで定義する class KotlinClass { val name : String constructor(name : String) { this.name = name } }
  27. 27. コンストラクタ その2:プライマリコンストラクタで定義する class KotlinClass(n : String) { val name : String = n } ※その1の方法はセカンダリコンストラクタと呼ぶよ
  28. 28. コンストラクタ その3:プロパティも一緒に定義しちゃえ class KotlinClass(val name : String) { … }
  29. 29. コンパニオンオブジェクト staticメソッドはどうやって定義する? // これはだめ class KotlinClass { static fun newInstance() : KotlinClass { return KotlinClass() } }
  30. 30. コンパニオンオブジェクト コンパニオンオブジェクトを使う class KotlinClass { companion object { fun newInstance() : KotlinClass { return KotlinClass() } } }
  31. 31. コンパニオンオブジェクト Javaではこう見える void moke() { KotlinClass c = KotlinClass.Companion.newInstance(); }
  32. 32. コンパニオンオブジェクト @JvmStatic をつけると、staticメソッドっぽく class KotlinClass { companion object { @JvmStatic fun newInstance() : KotlinClass { return KotlinClass() } }
  33. 33. コンパニオンオブジェクト Javaではこう見える void moke() { KotlinClass c = KotlinClass.newInstance(); }
  34. 34. null安全 nullが入る可能性がある変数は 型に?をつける fun moke(val name : String?) { if (name != null) { Log.v("tag", "name=$name") } }
  35. 35. null安全 nullだったらnullを返してメソッドを呼ばない fun moke(val name : String?) { Log.v("tag", "length=" + name?.length) }
  36. 36. null安全 nullがはいらない場合は強制的にNon-Nullにでき る もし実行時にnullだったらクラッシュ fun moke(val name : String?) { Log.v("tag", "length=" + name!!.length) }
  37. 37. null安全 Javaのメソッドの戻り値は?があってもなくてもOK fun moke(val name : String?) { val version : String = JavaClass.getVersion() val version2 : String? = JavaClass.getVersion() }
  38. 38. null安全 Javaのメソッドに@Nullableや@NonNullをつける と、Kotlin側で忖度してくれる @Nullable public static String getVersion() { /* */ } fun moke(val name : String?) { // エラー、NullableはNon-Nullにセット不可 val version : String = JavaClass.getVersion() }
  39. 39. ラムダ式 メソッド1つで、その引数が1つの場合はいろいろ省 略できる val b = Button(this) b.setOnClickListener { Log.v("tag", "id=" + it.id) }
  40. 40. Thanks!

×