Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Androidアプリ開発のいろは

 Androidアプリ開発のいろは

社内勉強会にて講演したスライドです。社名等が出ている部分は削除してあります。

matsurihime

May 19, 2017
Tweet

Other Decks in Technology

Transcript

  1. Androidの歴史 バージョン コードネーム リリース日 概要 Beta 2007/11/5 1.0 (Alpha) 2008/9/23

    最初のAndroid端末「HTC Dream」 1.1 (Beta) 2009/2/9 1.5 Cupcake 2009/4/27 日本初のAndroid端末「HT-03A」 1.6 Donut 2009/9/15 iPhone3GS 発売 2.0/2.1 Eclair 2009/10/26 2.2 Froyo 2010/3/20 iPad発売 2.3 Gingerbread 2010/12/6 iPhone4発売 ガラスマの台頭 3.0/3.1/3.2 Honeycomb 2011/2/22 2.x系列と並行なタブレット向けOS
  2. Androidの歴史 ・コードネームはお菓子の名前 ・近年はiPhoneの発売(iOSのメジャーアップデート)を意識? バージョン コードネーム リリース日 概要 4.0 Ice Cream

    Sandwich 2011/10/18 iPhone4S発売 4.1/4.2/4.3 Jelly Bean 2012/7/9 iPhone5発売 4.4 KitKat 2013/10/31 iPhone5s発売 5.0/5.1 Lollipop 2014/11/12 iPhone6発売 64bit対応 6.0 Marshmallow 2015/10/5 iPhone6s発売 7.0/7.1 Nougat 2016/8/23 iPhone7発売 8.0 O (Oreo?) 2017/3/21(dev) 開発中
  3. デバイスの進化 NTT docomo HT-03A FREETEL SAMURAI 極2 OS Android 1.5

    Cupcake(updated to 2.2) Android 6.0 Marshmallow(will update to 7.0) CPU Qualcomm MSM7201A@528MHz (1Core) MediaTek Helio X20 [email protected](10Cores) RAM 192MB 4GB ROM 512MB 64GB ディスプレイ 3.2インチ液晶 ハーフVGA(320*480) 5.7インチ液晶 WQHD(1440*2560) カメラ 約320万画素CMOS 約1600万画素 4K対応 発売日 2009年7月10日 2016年12月22日
  4. シェアの増加 2017年3月時点で Android 37.93% Windows 37.91% iOS 13% OSX 5%

    →PC・モバイル合わせてのトップシェア
  5. Kotlin ・Kotlin - IntelliJ IDEAなどで有名なJetBrainsにより開発されているJVM言語 - 同じJVM言語のScalaやGroovyを強く意識した造り - Javaよりも簡潔で安全な記述を可能とする -

    既存資産を活用できる (Javaのソースコードと併用可能、コンバートもある程度自動化) 他にも色々と利点が盛り沢山!
  6. Kotlinは安全 ・(当然ですが)コンパイラ言語なのでコンパイル段階でエラーチェックが可能 ・NULL安全 - Javaの場合はすべての参照型変数がnullを持つことができる → NullPointerException - Kotlinの場合は変数の宣言時にNULL許容型とNULL非許容型を明確に区別し、 適切でない扱いをするとコンパイルエラーとなる

    - ?演算子と!!演算子とelvis演算子 → ? 演算子はnullならその後の処理を行なわずnullを返す obj?.getString(“abc”) → !! 演算子は強制的にnullでないとみなして処理をする obj!!.getString(“abc”) → ?: 演算子はnullの場合のデフォルト値を定義する obj?.getString(“abc”) ?: “”
  7. Google I/O 2017 ・ちょうど日本時間の昨日(5/18)から開催されているGoogleの年次イベント → 色々な発表がありましたが、その中でもAndroidに関する大きな発表が! - なんと、KotlinがAndroidの正式な開発言語になりました!! → Androidの第一級言語はこれまでJavaのみだった

    = 初の第一級言語追加 - Android Studio 3.0リリース(開発版: Android Studio 3.0 Canary 1)でKotlinサポート追加!! - Android O のpublic beta配布、及びAndroid O搭載低スペック端末「Android Go」の発表など
  8. 開発環境構築(エミュレータ) ・実機を用いた開発をする場合は関係ありませんが、 エミュレータでアプリを動かしたい場合はこの設定が必要です。 ・Intel x86 Emulator Accelerator(HAXM) Intel virtualization Technology

    (VT-x)を用いたエミュレータの高速化 →SDK Managerから選択してインストール (うまくいかない場合はCPUが対応しているかどうか、そしてBIOSの設定見直しを行う) ※だいたいみんなここで詰まるのでネットに大量に情報があります。
  9. イメージ選択 ・ここが難しい! ・最近のintel CPUを積んだマシン ならABIがx86_64でかつTargetに with Google APIsを選んでおけば 良い ・AMD

    CPU等の場合はarmeabiな どを利用する必要があるが windowsだと高速なエミュレータが 利用できません(Mac / Linuxでは 可)
  10. 画像登録 ・アプリページに用いられる画像 の登録 基本的には - ヘッダ画像 (1024*500px JPG or 24bit

    PNG) - 高解像度アイコン (512*512px 32bit 透過PNG) - スクリーンショット(2枚以上)
  11. ここからはちょっとだけ細かい話・・・ ・Java + SQLite + HttpClientで大体のことはできます。できますが・・・・。 → 表現が冗長。ソースコードが長くなって見づらい。(特に非同期処理や無名クラス) → null安全でないせいで至る所でぬるぽが起きる。

    → 非同期処理や並列処理を書くのが面倒。面倒なくせにしょっちゅう出てくる。 → 誰が何に依存しているのかよくわからなくなってpublic staticだらけになる。 → SQLiteがとにかく遅い。 → オブジェクト指向なのにオブジェクトをまるごとDBに保存しておけない。 とにかくイケてない!!
  12. リアクティブプログラミング ・RxJava / RxJava2 - リアクティブプログラミングをJavaで実装するためのライブラリ - Observable(観測対象)とObserver(観測者) → Observerパターン

    オブジェクトの状態変化を、それに依存する他のオブジェクトたちが監視。 観測対象から通知があったら各自が自動的に適切な振る舞いをしてくれる。 (実はjava.utilパッケージにもObserverインターフェースとObservableクラスはある) - Observableは登録されているすべてのObserverに対しupdateメソッドで通知を行える。 ※update時もObservableはその通知の中身については何も知らない。あくまで通知するだけ。 →通知の際にObservableをまるごと引数として渡すことで状態に関する情報も受け渡せる。
  13. じゃあどうしたら? ・全く外部に依存しないのはほぼ不可能 → 緩い依存は必要になる →インターフェースに依存させる(抽象への依存) = Interface Injection ・Singletonパターンの代替としてDIコンテナの利用 -

    Singletonパターンはsingletonオブジェクトが1つしか生成できないようにする実装 - DIコンテナによるSingletonの実現では、オブジェクト自体は複数生成できるが、 DIコンテナの制御により1つだけインスタンスを生成するようにしている
  14. データベース ・Realm - とにかく高速。SQLiteの2〜10倍高速と言われる。(特にデータ量が大きくなると顕著) - マルチプラットフォーム対応。iOSでも使われています。 ・Orma - Android向けのORM(Object relational

    mapping) →関係データベースにはスカラー値しか保存できない = オブジェクト指向と相性が悪い - SchemaDiffMigrationによる自動マイグレーション(SQLのDDLをパースし、差分を検出してSQLを発行) - 補完に優しく型安全なインターフェイス
  15. クロスプラットフォーム 名称 特徴 Unity javascript/C# ゲーム開発では最強の機能と知名度 Cocos2d-x 2Dゲーム作成ツール。これも知名度は高い。 Adobe AIR

    いわゆるFlash。昔からありますが、今更これで作る?感はあります。 Apache Cordova HTML5でハイブリッドなアプリを作成可能 Xamarin C#でクロスプラットフォーム開発 以前は高価だったがMSに買収されて無料化! 結局どれがいいの???
  16. Xamarin vs Cordova Xamarin Cordova 言語 C# HTML5 / CSS

    / javascript UI 各プラットフォームに合わせた実装 が必要(XAMLである程度はできる) HTMLとCSSを用いて統一的なレイアウト を記述できる(全てではない) ビジネスロジック C#で共通化できる Javascriptで共通化できる 速度・安定性 XAMLプリコンパイル、C#コードもコン パイル済みなので比較的高速 Webページのレンダリングがあるのでパ フォーマンス面では劣る
  17. なぜクロスプラットフォーム? ・モバイル向けOSのシェアがデスクトップ向けOSのシェアを遥かに凌ぐように! → iOS / Android / Windows 10 Mobileなどそれぞれが一定のシェアを得ている現状

    →それぞれのアプリの開発者を揃えて 予算と工数を確保して 実際に開発してみたらあるプラットフォームだけ遅れてしまって 結局、全体のリリースが遅れて・・・