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

Androidアプリケーション開発中級研修 後編

 Androidアプリケーション開発中級研修 後編

NTTソフトウェア社内のソフト道場研修で実施した、Android研修テキスト後半です。

More Decks by NTTテクノクロス株式会社

Other Decks in Technology

Transcript

  1. Copyright © 2016, NTT Software Corporation. 2 本スライドは、NTTソフトウェア社内技術者育成研修(ソフト道場研修)テキストです。 ※ 実際の研修では演習を実施しますが、本テキストには演習に関する内容は含まれていません。

    【著作権・免責事項】 • 本セミナーコースの内容、本資料のすべての著作権は、NTTソフトウェア株式会社に帰属します。 • 無断での本資料の複写、複製、再利用、転載、転用を禁じます。 • 本資料と演習等で利用するすべての教材は、NTTソフトウェア株式会社からの保証なしに提供されます。 • 本書に記載されている会社名および製品名は、一般に各社の商標または登録商標です。
  2. Copyright © 2016, NTT Software Corporation. 4 ▪端末の位置情報取得が可能  方式1:GPSによる位置情報取得

     方式2:ネットワーク(WiFi/3G)による情報取得 【ロケーション】概要 緯度・経度を取得可能 方式2に影響 設定アプリ内の 「位置情報」メニュー 位置情報取得方式 =プロバイダ 方式1に影響 方式1 + 方式2
  3. Copyright © 2016, NTT Software Corporation. 5 【ロケーション】位置情報取得の流れ 概要 実装

    1 ロケーションマネージャの取得 LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 2 位置情報取得リスナの登録 manager.requestLocationUpdates(LocationManager.GP S_PROVIDER, 0, 0, this); 3 位置情報取得リスナの解除 manager.removeUpdates(this); ▪リスナ登録により、位置情報の定期更新開始 ▪リスナ解除により、同定期更新停止 コールバック契機 実装 a 位置情報を取得した時 public void onLocationChanged(Location location) b 位置情報の状態が更新された時 public void onStatusChanged(String provider, int status, Bundle extras) c プロバイダが有効になった時 public void onProviderEnabled(String provider) d プロバイダが無効になった時 public void onProviderDisabled(String provider) ▪位置情報取得等のイベントでコールバック発生
  4. Copyright © 2016, NTT Software Corporation. 7 ▪位置情報取得のプロバイダ比較 【ロケーション】位置情報取得の方式比較 方式1:GPS

    (LocationManager.GPS_PROVIDER) 方式2:ネットワーク(WiFi/3G) (LocationManager. NETWORK_PROVIDER) 特徴 GPSを用いて位置情報を特定する。 通信ネットワークの情報を用いて位置情報を 特定する。 長所 正確な位置情報を取得できる。 短時間で位置情報を取得できる。 短所 位置情報取得に時間がかかる。 建物の中では取得できない場合がある。 取得できる位置情報の誤差が大きい。 注意点 以下のpermissionを追加する必要がある。 android.permission.android.permission.A CCESS_FINE_LOCATION 以下のpermissionを追加する必要がある。 android.permission.android.permission. ACCESS_COARSE_LOCATION ※より詳細な情報は、Google公式Webサイトを参照のこと。 http://developer.android.com/guide/topics/location/strategies.html ※ただし、プロバイダとして、方式1、2の両方を用いる場合は、 ACCESS_FINE_LOCATIONのみを指定で良い。
  5. Copyright © 2016, NTT Software Corporation. 8  GPSやネットワーク情報を用いた位置情報取得可能 (複数方式があるので、シーン毎での使い分け)

     LocationManager.GPS_PROVIDER  LocationManager.NETWORK_PROVIDER  位置情報取得には、パーミッション設定が必須  位置情報取得のバッテリー消費は大きいので、 適切な取得間隔/アプリ終了後の取得停止等の 工夫が必要  バッテリー消費や取得間隔を設定可能な高機能APIとして、 「GooglePlayServices」を利用することが推奨されている 【ロケーション】まとめ
  6. Copyright © 2016, NTT Software Corporation. バージョン別に対象デバイスが異なる 主にスマホ 向け す

    【タブレット】OSバージョン毎の位置付け 2.x 4.x以降 3.x タブレット 向け スマホ・タブレット の共存
  7. Copyright © 2016, NTT Software Corporation. 各端末の特徴の違いを理解することが必要 スマホ タブレット 

    画面サイズ小(~5inch)  ハンドセット向けUI  Android 2.x / 4.x  画面サイズ大(7~10inch)  タブレット向けUI  Android 3.x / 4.x(※) ※初代Galaxy Tab(2.2)はタブレットに分類されるが、本研修では、例外として除外する。 【タブレット】端末の多様化
  8. Copyright © 2016, NTT Software Corporation. 2pane化して 無駄なく表示 ①2pane化して スペースの有効活用

    ②メニュー の常時表示 【タブレット】タブレット向けアプリ開発のポイント 特に重要な2点
  9. Copyright © 2016, NTT Software Corporation. マルチPaneの構成にかかせないもの 【Fragment】概要 Activityという箱の中に、 Fragmentという複数の

    小箱を入れるイメージ ※Fragment=Android3.0 から追加されたクラス Fragment A Fragment B Activity
  10. Copyright © 2016, NTT Software Corporation. 具体的には、どんなXML? <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal"

    android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:name="jp.co.ntts.android.sample.MainFragment" android:id="@+id/wordListFragment" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name="jp.co.ntts.android.sample.DetailFragment" android:id="@+id/wordFragment" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" /> </LinearLayout> Fragment A(左側) 【Fragment】レイアウト定義例 Fragment B(右側)
  11. Copyright © 2016, NTT Software Corporation. 具体的に、FragmentはどんなJavaソース? /** * 詳細情報を表示するフラグメントです。

    */ public class DetailFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // LayoutInflater.inflate(int, ViewGroup, boolean) // を使って、レイアウトXMLで定義したビューを実体化してreturnする。 // レイアウトXMLファイル名は「detail.xml」 return inflater.inflate(R.layout.detail, container, false); } } 【Fragment】Javaソース例 Fragmentクラスを 継承する FragmentへUIを ひもづける UIを持つFragmentの場合 →onCreateVierwの戻り値で、 Fragmentに割り当てるViewを返却する
  12. Copyright © 2016, NTT Software Corporation. 『Fragment』=Activityを分割するための機構  1Activityを複数Fragmentに分けて開発可能 (今回は、2pane⇒2Fragmentで実現)

     FragmentはActivityにひもづいて動作  FragmentにもActivity同様ライフサイクルあり  FragmentもActivity同様にStackを保持可能 (Activityにひもづくバックスタック領域で管理)  スマホとタブレット向けのソースコードを共通化 するときにも有効 【Fragment】まとめ
  13. Copyright © 2016, NTT Software Corporation. Action Barのエリア 【ActionBar】構成① ベースメニュー

    (常時表示される) オーバーフローメニュー (タップにより表示される)
  14. Copyright © 2016, NTT Software Corporation. XMLファイルで定義可能 <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item

    android:id=“@+id/item_add” android:title=“@string/add” android:icon="@drawable/icon_menu_add" android:showAsAction="ifRoom|withText" /> <item android:id=“@+id/item_delete” android:title="@string/delete" android:icon="@drawable/icon_menu_delete” android:showAsAction="ifRoom|withText" /> <item android:id=“@+id/item_mail” android:title="@string/mail" android:icon="@drawable/icon_menu_mail“ android:showAsAction="never" /> </menu> ▪android:showAsAction=“表示パラメータ” ・ifRoom:スペースがあれば、Action Barにアイコンを表示 ・withText:テキストを表示 ・always :必ずAction Barに表示(使わない方が良い) ・never :必ずオーバーフローメニューとして表示 追加 削除 メール送信 メニュー定義XML 【ActionBar】メニュー定義例 res¥menuフォルダ に格納する
  15. Copyright © 2016, NTT Software Corporation. 26 Android最新機能 ※本ファイルからは削除しております。ご了承ください。 <省略スライドに含まれる内容例>

    ・Lollipop: マテリアルデザイン、Smart Lockなど ・Marshimallow: 新パーミッションモデル、指紋認証など ・N:マルチウィンドウ、VRモードなど
  16. Copyright © 2016, NTT Software Corporation. 28 ▪GoogleMaps連携を比較的容易に実現可能  MapFragmentという専用フラグメントを画面に配置するイメージ

     拡大縮小/スクロールに関する面倒な実装は不要 【GoogleMaps】概要(1/2) 拡大縮小可能 タッチ操作で スクロール可能
  17. Copyright © 2016, NTT Software Corporation. 29 ▪GoogleMaps上にマーカーを描画  地点(緯度経度)で描画位置を指定

     マーカーの色や描画アイコンの変更が可能  吹き出しに表示するテキストも指定可能 【GoogleMaps】概要(2/2) デフォルトのマーカーと吹き出しの例 独自アイコンと吹き出しの例
  18. Copyright © 2016, NTT Software Corporation. 30 【GoogleMaps】地図表示に必要な作業(概要) ▪地図表示には、実装以外に3つの設定が必要。 •

    パーミッション • Google Play Servicesバージョン番号 • API Key keytoolコマンド (by JavaSE) デバッグ 証明書 フィンガー プリント API Key 発行サイト Android Manifest API Key ①API Keyの取得 ②Google Play Serviceライブラリの利用設定 ③AndroidManifest.xmlへの各種設定
  19. Copyright © 2016, NTT Software Corporation. 31 概要 詳細 1

    証明書の フィンガープリント 取得(※) • デバッグ証明書のありか(Windows 7の場合) C:¥Users¥%USERNAME%¥.android¥debug.keystore • 証明書のフィンガープリントの表示 > keytool -list -keystore debug.keystore • 「SHA1」の値をメモしておく。 (例) SHA1: BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:XX:YY:ZZ 2 API Keyの発行 • WebブラウザでGoogle Developers Consoleにアクセスする。 https://console.developers.google.com/ • [プロジェクトを作成]ボタンを押し、規約に同意し、プロジェクトを作成する。 • 当該プロジェクト詳細の[APIと認証]>[API]から [Google Maps Android API]のリンクを辿り、 表示されるダイアログで[APIを有効にする]ボタンを押す。 • [APIと認証]>[認証情報]から [認証情報を追加]>[APIキー]>[Android key]の順にボタンを押す。 • 「SHA1フィンガープリント」と、「アプリのパッケージ名」を入力し、 [作成]ボタンを押すとAPI Keyが表示される。 ▪地図表示には、API Keyの発行手続きが必要 【GoogleMaps】API Key発行手順(1/5) ※Google Play配布を行う場合、リリース証明書を用いてフィンガープリントを生成すること。
  20. Copyright © 2016, NTT Software Corporation. 36 【GoogleMaps】ライブラリ利用設定  ビルドにはGoogle

    Play Serviceライブラリが必要  SDKマネージャーからダウンロード [Extras]→[Google Play services]
  21. Copyright © 2016, NTT Software Corporation. 37 【GoogleMaps】Android Studioを使った雛形作成 

    プロジェクト新規作成時のActivity選択画面で [Google Maps Activity] を選択するだけで、ほとんどの設定は完了する。 ① 【自動設定済】 (app/build.gradle) Google Play servicesライブラリを依存ライブラリに追加 ② 【自動設定済】 (app/src/main/AndroidManifest.xml) パーミッション宣言 ③ 【自動設定済】 (app/src/main/AndroidManifest.xml) Google Play servicesバージョン番号の宣言 ④ 【手動設定が必要】 (app/src/debug/res/values/google_maps_api.xml) デバッグ証明書向けのAPIキー ⑤ 【手動設定が必要】 (app/src/release/res/values/google_maps_api.xml) リリース証明書向けのAPIキー
  22. Copyright © 2016, NTT Software Corporation. 【GoogleMaps】APIキーの設定  取得したAPIキーを、以下のファイルに書く 

    デバッグ証明書向け app/src/debug/res/values/google_maps_api.xml  リリース証明書向け app/src/release/res/values/google_maps_api.xml <resources> <!-- TODO: Before you run your application, you need a Google Maps API key. .... Once you have your key (it starts with "AIza"), replace the "google_maps_key" string in this file. --> <string name="google_maps_key" translatable="false" templateMergeStrategy="preserve"> YOUR_KEY_HERE </string> </resources> この部分を実際のAPIキーに置き換える
  23. Copyright © 2016, NTT Software Corporation.  GoogleMaps連携により、比較的容易に地図連携可能 以下の機能について、面倒な実装不要 

    拡大縮小  スクロール  GoogleMaps連携にはいくつかの準備が必要  動作確認用の実機の用意 現状エミュレータでの動作確認はできていない  APIキーの取得(デバッグ版/リリース版)  Google Play Serviceライブラリ利用準備  AndroidManifest.xmlへの設定追加 【GoogleMaps】まとめ
  24. Copyright © 2016, NTT Software Corporation. Androidアプリ配布方式  (1)Google Play※で公開(3rd-Partyマーケット含む)

     アカウント作成後、マーケットにアプリをアップロード  アプリが誰にでも見える状態となる点に注意  課金の仕組みがあり、有料アプリが公開可能  (2)自前Webサーバで公開  Webサーバを構築し、その中でアプリ配布  アプリ配布対象を制限するには、Webサーバ側で適切な対処を実施  端末側で設定変更の必要あり 開発したアプリを配布するには、 2つの方式がある ※Google Playは、以前、Android Marketという名前で運用されていた。
  25. Copyright © 2016, NTT Software Corporation. Androidアプリ配信の流れ ソース ファイル (Java)

    Google Playサーバ クラス ファイル (class) Dalvik実行 ファイル (dex) Android SDK コンパイル バイナリ変換 画像 音声 XML リソース パッケージング リソース 製造元 証明書 署名済み パッケージ (apk) 署名 Android端末 署名済み パッケージ ①Google Play方式 ②Webサーバ方式 アップロード アップロード ダウンロード 任意サーバ アプリ説明&配布用 HTML アプリ説明&配布用 ページ アプリ説明 署名済み パッケージ アプリケーション パッケージ (apk)
  26. Copyright © 2016, NTT Software Corporation. 45 ①Google Play方式(サービス概要) 全世界のアプリを

    利用可能 アプリ名による検索 ユーザ評価(5段階) レビュー閲覧/投稿が可能 開発者がAndroid向けアプリを 登録/公開できるGoogle運営のサービス アプリ説明画像
  27. Copyright © 2016, NTT Software Corporation. ①Google Play方式(公式Web版) Google PlayはWeb版も存在する

    PCからアプリを選択して端末にインストール可能 アプリ名による検索 Webでインストール指示す ると端末に自動インストー ル
  28. Copyright © 2016, NTT Software Corporation. ①Google Play方式(アプリ登録条件) Google Playにアプリを登録するには

    事前に開発者アカウントの取得が必要 (1)開発者アカウントの登録費用(初期費用$25) →必要なのは、初期費用のみ(年間費用は発生しない)。 →アプリを何本登録する場合でも、$25のみ (2)Googleアカウント → (3)の手続きを行うために必要 (3)Googleチェックアウトに対応した決済手段(クレジットカード) →初期費用の支払いに必要 無料アプリを登録するために必要なもの
  29. Copyright © 2016, NTT Software Corporation. ①Google Play方式(アプリ登録フロー) アプリに署名後、Webブラウザ経由で Google

    Playにアクセスし、アップロード Google Playサーバ 製造元 証明書 署名済み パッケージ (apk) 署名 Android端末 署名済み パッケージ アップロード ダウンロード アプリ説明 アプリケーション パッケージ (apk) アップロード後、 Google Playのダウン ロード画面に数時間後に反映 Google Playからの配布には、署名必須 証明書は、自己署名でOK(CA証明書は不要)
  30. Copyright © 2016, NTT Software Corporation. ②Webサーバ方式(アプリ登録フロー) アプリに署名後、インターネット上の 任意Webサーバにアップロード 製造元

    証明書 署名済み パッケージ (apk) 署名 Android端末 アップロード ダウンロード 任意サーバ アプリ説明&配布用 HTML アプリ説明&配布用 ページ 署名済み パッケージ アプリケーション パッケージ (apk) Google Play方式と同じ ▪◦◦アプリ ダウンロード →hoge.apk ダウンロードサイト apkファイルへのリンク
  31. Copyright © 2016, NTT Software Corporation. 50 ②Webサーバ方式(注意点) アプリをダウンロードさせるには、 端末の設定変更が必要

    •設定を変更しない場合は、 アプリのダウンロードが不可 •設定を変更しない状態で、 アプリをダウンロードしようと した場合、「設定変更が必要」の警告 ダイアログ表示