スキップしてメイン コンテンツに移動

DroidKaigi (2015/4/25) 資料とかメモ

個人的なメモや感想です。まだ全部に目を通しきれてないです...


公式サイト:http://droidkaigi.github.io/
※マテリアルデザインなサイトですね。

twitter:https://twitter.com/DroidKaigi
facebook:https://www.facebook.com/DroidKaigi
togetter:http://togetter.com/li/812559
カンファレンスアプリ:https://play.google.com/store/apps/details?id=com.droidkaigi.conference2015s




Activity, Fragment, CustomView の使い分け -マッチョなActivityにさよならする方法-

基調講演 (開発テクニック) あんざいゆき

あんざいゆきさんによる基調講演です。 #DroidKaigi
Posted by DroidKaigi on 2015年4月24日





開発を効率的に進めるられるまでの道程

@cattaka_net
■概要
Androidアプリケーション開発でテストコードが無い状態から書き始めるまでにどのようなことを行うかをお話しします。
Androidアプリケーション開発では様々なツールや仕組みを使うことができます。JUnitでテストコードを書けることはもちろんのこと、UIテストを便利にするEspresso、JVMでのテストの実行を可能にするRobolectricなど便利なツールやライブラリがあり、これらを使わない手はありません。そしてテストコードがあればJenkins等でCIを使い、開発をより効率的に進められるようになります。
しかしながら、テストコードを書くことはCIを使った自動化による開発効率の向上の第一歩でありながら最初の壁となっています。これはテストコードを書きながら成長したプロダクトはともかく、後からテストコードを書くことは非常に困難だからです。
テストコードを書くには残念ながらプロダクトのコードにある程度の配慮が必要になります。このため後からテストコードを書くときには様々なリファクタリングが必要になります。それらの対象は通信処理、データベース、プリファレンスなど様々で、ときにはコードの大きな構造変更が必要になる事もあります。
このような問題について、どのようにすれば後からユニットテストを書くことが巧くいくのか、経験を元にそれらアプローチ方法を紹介します。
■対象者
テストコードを書きたい初級〜中級のアプリ開発者

  • アプリの開発効率化について
    • JUnitでのテストがボトルネックになる
  • テストを書くに至った経緯
  • 開発途中からテストを導入する話
    • ひたすらテストを書く
      • どうやって差し替えるか
        • DaggerなどのDIライブラリを使う
        • オレオレDIを使う
        • SharedPreferencesの差し替え
          • 直接呼ぶのではなく、Factoryクラスを作る
        • SQLiteOpenHelperの差し替え
          • RenamingDegatingContextを使えば、一時的に別のDBファイルに
          • オンメモリのデータベース
          • 上記と同じようにFactoryクラスの作成
        • 通信処理の差し替え
          • 通信処理は一つにまとめておく
          • 偽の通信データはandroidTest下のassetsに入れる
    • まずはテストを書くところから始める
    • サンプルアプリ:cattaka/FastCheckList

絶対落ちないアプリの作り方

白山 文彦
なぜあなたのAndroidアプリはクラッシュするのでしょうか。Androidで最も重要な概念はライフサイクルと非同期処理に関する厳密な理解です。何を当たり前のことをと言われそうですが、実に多くの方がこのことを本当に理解しているのか疑わしいコードを書いてしまいます。
ActivityやFragmentのライフサイクルと陥りやすい罠、よく利用される非同期処理ライブラリであるAsyncTaskとLoaderの違いと使いどころ、Serviceからのコールバックなどを通じて、いくつかのタブーを犯さないようにするとアプリは驚くほど安定します。
非同期処理のコールバックでFragmentTransactionを伴う処理でのクラッシュなど、Android開発者が1度は陥ったことのあると思われる実例を挙げながら、クラッシュしづらいAndroidアプリについて考察します。
  • サンプルコード:srym/DroidKaigiSample
  • ActivityでIntentの中身を保存しわすれてクラッシュ
    • 開発者向けオプション
      • アクティビティを保存しないにチェックで漏れを検知できる
  • Androidの非同期ライブラリ
    • Activityより長生きする(クラッシュの罠)
    • AsyncTask
      • 長くて数秒の非同期処理のみ使うことを推奨されている
    • AsyncTaskLoader
      • 画面回転等でも非同期処理を引き継げるような書き方が簡単にできる
  • Context
    • アプリケーションの様々な情報にアクセスするためのインタフェース
    • ActivityContextが長く参照される=深刻なメモリリーク
    • 全部ApplicationContextでいいの?
  • Fragment
    • インスタンスにsetしない
    • リスナもsetできない
  • 静的解析のチカラを借りる
    • アノテーション
      • @Nullable(nullチェックがないと警告)
      • @NonNull(nullを渡すと警告)

ゲームアプリケーションのアップデートサイクル

飯塚健太郎(@iizukak)
「いかにして開発するか」も重要ですが,「いかにして運用するか」も同様に重要な課題です.数百万人規模のユーザを抱えるゲームアプリの運用を担当するエンジニアが,アプリのアップデートサイクルの実状をお話します.
アップデートのためのスケジュールは? いかにして障害を防ぐのか? コードレビューは? テストは? アプリのクラッシュをどう把握するか? レガシーOSを切り捨てられるのか?
日頃あまり明かされない「運営」の舞台裏をちらっとお見せしたいと思います.
  • クラッシュレポートコレクターになろう
    • リリース後はクラッシュレポートでユーザの手元で起ったクラッシュを監視
    • Developer Consoleのクラッシュレポートはあまり参考にならない
    • クラッシュレポートツールを使う

新言語KotlinでAndroidプログラミング

長澤 太郎 (@ngsw_taro)
■趣旨
あのJake Whartonも注目するAndroidのSwiftと名高いKotlinを紹介します!
ゴールは、Kotlinという新しい言語を使って楽しく簡単にAndroidアプリ開発したい!と思ってもらうこと。
■対象者
Android: 初心者〜
Java: 中級者〜
■目次
・Kotlinの概要
Kotlinは2011年にIntelliJ IDEAなどで有名なJetBrains社により発表されたプログラミング言語です。
Java仮想マシンやJavaScriptに加えて、Androidがターゲットです。
誕生のモチベーションは、Javaや既存のJVM言語(Groovy, Scalaなど)に満足できないことです。
Kotlinの特徴を列挙すると、シンプル、安全、Javaとの完全な相互運用性、Javaと同等以上のコンパイル速度、オブジェクト指向などです。
シンプル: 文法や記法そのものが簡潔です。また、高階関数やラムダ式などによるモダンなスタイルのコーディングが可能です。
安全: 型安全性がJavaよりも強いです。Null安全と呼ばれるNPEが起こらないユニークな仕組みをサポートしています。
Javaとの完全な相互運用性: 既存のJavaコードをKotlinから呼び出すことも、その逆もできます。
Javaと同等以上のコンパイル速度: JetBrainsが掲げているKotlinの目標のひとつです。Scalaを意識していると思われます。
オブジェクト指向: Javaプログラマには親しみやすいです。トレイト、プロパティ、委譲などJavaにはない多くの機能があります。
・文法、機能
Javaとの対比をしたり、Androidにおける例を交えながら文法と言語機能を紹介します。
特に関数、クラス、Null安全を詳しく取り挙げます。
各トピックの主なキーワード↓
関数: 高階関数やラムダ式、メソッド参照、関数型
クラス: 継承・トレイト、委譲、プロパティ、拡張メソッド、ジェネリクス
Null安全: Null許容型(Nullable)、非Null型(NotNull)、PlatformType
・ライブラリの活用
Kotlin + Android用ライブラリの紹介をします。
KotterKnife: Kotlin版ButterKnife。作者はJake。ViewInjectionライブラリ。
RxJava(RxAndroid): RxのJVM実装。ことりんとの相性はいいかも。
  • Kotolinとは
    • Better Java
    • 2011年夏にJetBrainsにより発表
    • サポート
      • JVM言語
      • altJS
      • Android
    • 静的型付けオブジェクト指向言語
  • Javaと比べる

ARTのメモリ管理

@haru067
Android 5.0では,ARTという新しいランタイムがDalvik VMに替わって搭載されました.
ARTはDalvik VMと比べてメモリ管理で多くの変更があり,マルチコアCPUに向けた並列GCや,並行メモリ割当てに対応した独自のメモリアロケータ,世代別GCなどが新たに実装されています.
本セッションでは,ARTの登場によってメモリ管理がどう変わるのかを説明し,
メモリ管理が変わることでアプリケーション開発者にどのような影響があるのか,
例えば,
「どういったタイミングでどのようなGCが発生するのか」
「その際のGCによるアプリケーションの停止時間はどの程度なのか」
「デフラグなど,メモリの利用効率はどうなのか」
といったことについて話したいと思います.
対象者については,メモリ管理に関する基礎知識があると理解し易いと思いますが,
知識が無い人でも問題ないよう説明したいと考えています.

アプリを公開する前に、最低限知っておきたいセキュリティ事項

Gaku Taniguchi
セキュリティホールがあるアプリケーションをを作らないようにするために、やりがちな例をあげながら、その対応策について解説致します。
また、不正のないアプリがマルウェアに間違われる事、他人の作成したライブラリを使用したために、意図せずマルウェアになってしまう事もあります。
個人情報の取扱い等、知っているだけで防げる例が数多く存在します。
アプリを公開する人に最低限知ってもらいセキュリティに関する事項をお話します。

JellyBeanとKitKatで実現するマテリアルデザイン

androhi
Android5.0から採用されたマテリアルデザインですが、Android5.xとAndroid4.xで同じように実装することが出来ません。原因としては、Android5.xからしか使えないAPIやAttributesが多く存在し、それがマテリアルデザインの実装の根幹に関わっているためです。後方互換としてSupportLibraryを使用することで、ToolbarやRecyclerView/CardViewといった代表的なUIは、ほぼ同じように使えるようになっています。
ところが、マテリアルデザインのガイドラインを参考にアプリを開発していくと、様々なUIでカスタマイズが必要になってきます。とりわけAndroid4.x(JellyBean/KitKat)では、それが顕著に現れます。
セッションでは、それらをどうのように実現するのか実例を交えて紹介することで、これからマテリアルデザインを取り入れたいと考えている開発者の方に、実装のイメージやコスト感を得る参考になるような内容を考えています。
  • 段階的なMaterialDesignの導入
    • AppCompatテーマを適用する
      • colorPrimaryやcolorAccentのやつ
      • AppCompatActivityを使う
      • UI Componentが置き換わる
        • AlertDialog
          • android.support.v7.AlertDialog
        • AppCompatButton
          • android.support.v7.widget.AppCompatButton
        • AppCompatCheckBox
        • AppCompatRadioButton
        • AppCompatRatingBar
        • AppCompatTextView
        • AppCompatEditText
        • AppCompatSpinner
        • SearchView
        • など
    • 新しいInterpolatorを使う

※これはGoogleのYoutubeでLive配信されたイベントでもGoogleの人が言ってた。例えばFloating Action Buttonは5.x系にしかないけど、オレオレボタンを作ってもいいんですかね。
  • Android 4.xでは頑張らない
  • 統一された 体 験 を可能にする
とのことで、見た目は同じにしなくてもいいのかな。まあアニメーションのないオレオレボタンは作ってNote Linkerというアプリに入れたんですけども。

参考:android - Materialデザインのボタンはどうやって実装したらよいでしょう? - スタック・オーバーフロー

Material Designを取り入れたデザインリニューアル

ninjinkun, yuki930
"フリマアプリFrilのデザインリニューアル(Google Play Best App 2014受賞)を事例として、Material Designをどのようにアプリに組み込むかについて、デザイナーとエンジニア両名で発表します。以下のトピックについてお話しする予定です。
- プロトタイピング
- ユーザーテスト
- Material Designガイドラインに準拠した箇所と、あえて破っている箇所
- 日本語のアプリでMaterial Designをどう見せるか
- アイコンの設計
- 配色の設計
- ActivityとFragmentの分離
- タブレット対応
- Scroll to fullscreen
- 5.0と4.4以下のMaterial Design実装の違い
- 使っているライブラリの紹介"

僕らのデータ同期プラクティス

Nkzn
"ユーザーがどんな場所にアプリを持っていこうと、私達はそれを制止できません。自分たちのWebサービスを携帯網もWi-Fiもない場所でも使ってほしいと思ったとき、私たち開発者には何ができるでしょうか。
GmailアプリやEvernoteアプリのように、オフライン時に閲覧・作成・編集されたデータをサーバーと同期させるための仕組みが、Androidには用意されています。
ただ、サーバーと同期する際のアルゴリズムについては開発者任せです。
自社サービスでの実例を挙げながら、サーバー側も視野に入れて同期アルゴリズム作成の観点を紹介します。"

  •  自社アプリをオフライン化
    • 2013年スタイル
      • AlarmManagerで定期的に実行→Intent
      • IntentService
        • データをダウンロード
      • つらみ
        • AlarmManager時々消える
        • マルチスレッドでDB叩く状態
        • など
    • Androidが提供するデータ同期機能
      • AccountAuthenticator + SyncAdapter + ContentProvider
  • mixi-inc/AndroidTrainingでSyncAdapterの勉強

Android と SELinux

androidsola
"Android 4.4 から有効化された SELinux は Android 5.0 で適用範囲が拡大されています。
Android 開発者は SELinux を知らないと適切なセキュリティポリシーの設定が出来ず、予期しない動作やセキュリティの甘い Android を作ってしまう事に繋がる可能性があります。
過去、Linux のインストール直後に無効化される事が多かった SELinux ですが、Android 開発においては無効化は通用せず、真剣に SELinux に向き合う時が来てしまいました。
しかし Android + SELinux に関する情報は多くありません。(特に日本語の情報)
そこで、これまで Android をカスタマイズしてきた経験の中で遭遇した内容や、調べてきた内容を共有したいと考えています。
対象は Android を使用した製品の開発者や Android のカスタマイズを趣味等で行っている開発者を想定しています。
Android 5.0 からは一般の Android アプリケーションに対してもセキュリティポリシーの定義が有効になっているので、アプリケーション開発者も知っていると良いかもしれません。"

結論


  • スライドだけ見るの辛い

関連

コメント

このブログの人気の投稿

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Eclipseの高速化メモ

Eclipseが重いと一言に言っても、いろいろな工程での話があると思いますが、過去記事のなども含めてこの記事にピックアップしておきたいと思います。以下はWindows環境での話です。