そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

Google I/O 2016。Keynote自分まとめ。Machine Learning、Google Home、Allo、Duo、Android N

Keynoteのライブ、見終わりました。

ここで録画が見られます。 www.youtube.com

Keynoteのメッセージの中心にはマシンラーニングがあったのかなと思います。 AlphaGoのようなマシンラーニングを活かすために、Google Assistantと、Assistantにテキストや、声でコミュニケーションするためのプロダクトが発表されました。

Google Home

Amazon Echoみたいなやつ。 f:id:begirama:20160519042558p:plain

家の中に置いておいて、声でGoogle Assistantに指示が出せます。

デモ中であったのは、「OK Google」って言って、音楽をかけたり(家中のスピーカーにも出力できる!)、宇宙について調べたり、スケジュールを変更したり。

リアルにどこまで使えるかやってみたい。 そのうち、Google Homeと連携するものを開発するためのツールが提供されるとのこと。

Google製メッセージアプリ「Allo」、ビデオチャットアプリ「Duo」

どちらもGoogleが出す、コミュニケーションアプリです。

  • Allo f:id:begirama:20160519043907p:plain 普通のメッセージアプリにない機能としては、ユーザーの振る舞いを学習して、相手の会話への回答の候補を出してくれます。それでよければ、タップして選ぶだけ。面白かったのが、相手が送ってきた犬の写真に対して、画像解析して、テキストへの返信と同じように「Cute dog!」などの回答候補がでること。

デモではチャットでレストランの予約をとっていました。 これも予約するためのプラットフォームに参加するお店がどのくらい日本で増えるかな。

個人的には、メッセージのフロントはLINEとか、FacebookメッセージやSlackなどなんでも良くって、後ろでGoogle Assistantが動いてて、会話のサジェスチョンもしてくれるし、レストランも予約してくれるってアーキテクチャがいいな。 きっとbotフレームワークもでるよね。

  • Duo f:id:begirama:20160519045543p:plain 娘さんのダンスが可愛いね。 電話をかけると、受ける方は取る前に相手の動画を見られる。誰かが家のインターフォンみたいなかんじだねって言ってた。確かに。

ハングアウトはどうなるんだろ。

Androidについて

Android Wear 2.0

これまでスマートフォンを母艦としないと何もできませんでしたが、スタンドアローンでいくつかの機能が動くようです。スタンドアローンで何ができて、何ができないのか、詳細はWearのセッションを楽しみにしたいと思います。

Android N

Android N自体は以前から発表されているので、知っている人は知っているという感じでした。 ここから誰でもNの名前を投票できるって。 Help name Android N

DaydreamっていうVRの仕組みでは、Android Nが前提となっているようです。

Android Studio 2.2

既にプレビュー版がダウンロード可能になっています。 Layout Designerが新しくなるみたいです。XCodeなみにUIの開発が楽になれば・・・。

Android Instant App

インストールしないNativeアプリ。このあたり眠くて記憶がない。

Introducing Android Instant Apps | Android Developers Blog

Android Instant Apps | Android Developers

Firebase2.0

Androidとは直接関係ないけど、バックエンドサービスのFirebaseにも触れていました。

Google I/O 2016 Live有りAndroidセッションまとめ

いよいよGoogle I/Oが今年も始まりますね。

events.google.com

ライブストリーミングがある予定の、Android関連セッションのうち、私が興味があるものをリストアップしてみました。 ちなみに私が興味があるのはAndroidの最新情報の概要と、AndroidアプリのUI、UX、アーキテクチャです。あと、Wearはどうなるのか?

May 18

キーノート

まずはキーノート。Androidについても何かしら発表があるでしょう。 goo.gl

What's new in Android" at #io16:

初日のキーノートの後は、Androidの最新情報のまとめから。キーノートと、What's newまでは生で見たい気がする。 goo.gl

Image compression for Android developers

What's newの後にいきなり、細かいトピックですが、画像の圧縮について。 goo.gl

Multi-Window mode

あんまり興味ないけど、一応、Android Nからサポートされるマルチウィンドウへの対応。 goo.gl

What the Fragment?

Fragmentについて。なんで今頃わざわざGoogle I/Oでやるんだろうか。 みんなどういう風に使うか、悩んでいるから? goo.gl

Android Auto: The Road Ahead

直近使うことはなさそうだけど、話題性としては、車の中で使用するためのプラットフォーム、Android Autoについて。 goo.gl

May 19

Android themes & styles demystified

テーマとスタイルについて。 goo.gl

What's new in Android development tools

Androidの開発ツールについて。最近2.xにバージョンアップしたAndroid Stuidioについてでしょうか。 goo.gl

What's new in Android Wear?

はっきり言って、Wearに関するセッションは少ないです。 今回のI/Oでも盛り上がりに欠けそうな予感はしていますが、新しい発表はあるでしょうか。 goo.gl

The experts' guide to Android development tools

Android Studioの深いところやTipsを教えてくれて、生産性があがるらしいです。 goo.gl

May 20

Android UI and layouts

UIとレイアウトについて。カスタムView、カスタムLayout、効率的なLayout階層構造などについて教えてくれるみたいです。 goo.gl

Android application architecture: Get ready for the next billion!

オフライン対応についてみたい。 goo.gl

A window into transitions

画面遷移のアニメーションなどについて。これ、iOSと比較して弱かったところなので、最新だとどうなっているのか興味がある。 goo.gl

Cordovaを6.xに、cordova-androidを5.xにバージョンアップしました

Cordovaをバージョンアップしました。

  • バージョンアップ前
$ cordova -version
5.4.1
  • バージョンアップ
$ sudo npm install  -g cordova@6.1.1
  • バージョンアップ後
$ cordova -version
6.1.1

Pluginのバージョン確認

$ cordova plugin version
com.phonegap.plugins.PushPlugin 2.5.0 "PushPlugin"
cordova-plugin-console 1.0.2 "Console"
cordova-plugin-device 1.1.0 "Device"
cordova-plugin-statusbar 2.0.0 "StatusBar"
cordova-plugin-whitelist 1.2.0 "Whitelist"

合わせてcordova platformのバージョンアップ

以前からcordova-androidのバージョンが古いと警告がでていたので、platformのバージョンアップもやります。

cordova-android 5についての公式のリリース情報はこちら。手順も載ってる。 Cordova Android 5.0.0 - Apache Cordova

 Using this version of Cordova with older version of cordova-android is being deprecated. Consider upgrading to cordova-android@5.0.0 or newer.
  • バージョンアップ前
$ cordova platform
Installed platforms:
  android 4.1.1
  browser 4.0.0
Available platforms: 
  amazon-fireos ~3.6.3 (deprecated)
  blackberry10 ~3.8.0
  firefoxos ~3.6.3
  ios ~4.1.0
  osx ~4.0.1
  webos ~3.7.0
  • バージョンアップ
$ cordova platform update android
Updating android project...
Android project updated with cordova-android@5.1.1
Discovered plugin "PushPlugin" in config.xml. Installing to the project
  • バージョンアップ後
$ cordova platform
Installed platforms:
  android 5.1.1
  browser 4.0.0
Available platforms: 
  amazon-fireos ~3.6.3 (deprecated)
  blackberry10 ~3.8.0
  firefoxos ~3.6.3
  ios ~4.1.0
  osx ~4.0.1
  webos ~3.7.0

android 5.1.1に上がってますね。

Android:Fragmentの画面遷移時にアニメーション

Androidで、Fragmentの画面遷移の時にアニメーションを付けるやりかたを書きます。 FragmentTransaction.setCustomAnimationsを使いました。 FragmentTransaction | Android Developers

進む時のみにアニメーションを付ける場合

setCustomAnimations(int enter, int exit)

  • enter: 次に表示されるFragmentのアニメーション
  • exit: 今表示されているFragmentのアニメーション

Backボタンなど、戻る時にもアニメーションを付ける場合

setCustomAnimations(int enter, int exit, int popEnter, int popExit)

popEnter、popExitに戻る時のアニメーションを指定します。

  • popEnter: 戻る時に次に表示されるFragmentのアニメーション
  • popExit: 戻る時に今表示されているFragmentのアニメーション

引数で指定するのは、アニメーションを指定したリソースIDです。 左からスライド・インさせるアニメーションであればこんな感じ。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="-100%"
        android:toXDelta="0" />
    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

Activityの画面遷移全体に付けるのなら、Themeに指定するのが一番楽です。 詳しくはこちらが参考になりました。 【Android】画面遷移時のアニメーション設定 - Furudateのブログ

参考にさせてもらったサイト

LollipopでFragmentをスライドインするアニメーションの適用 - Qiita

java.lang.RuntimeException: Unknown animator name: translateが発生した時の対応を書いてありました。同じエラーが発生したのですが、自分の場合は、FragmentTransactionはSupportライブラリを使うことで、回避しました。

EclipseからAndroid Studioへ移行しました

先週末、あるAndroidのプロジェクトをEclipseベースから、Android Studioに移行しました。

新規のプロジェクトや、小さめのプロジェクトはAndroid Studio化は完了していたのですが、一番大きいプロジェクトは社外の開発者の方の慣れもあって、踏み切れていなかったのですが、急遽やる必要があって、慌ててやった感じです。

Android Studioに移行するにあたって、一番大きいのはGradleベースでビルド、リリースをできるようにすることでした。

Gradleでのライブラリの取り込みにでは次の3つを使い分けました。

  1. リポジトリに登録されているライブラリの参照
  2. jarファイルで公開されているライブラリの参照 リポジトリに登録されていない、社内のライブラリなど
  3. ライブラリプロジェクトの参照 ライブラリのソースを編集するようなケース
dependencies {
    compile fileTree(dir: ‘libs’, include: [‘*.jar’])
    compile ‘com.android.support:support-v4:22.+’    // 1の例
    compile ‘com.google.code.gson:gson:2.2.4’
    compile files(‘libs/StaggLib.jar’)     // 2の例
    compile project(‘:subproject’)       // 3の例
}

1,2は特に問題がないと思いますが、3について、やり方を忘れるので、メモ。

「File -> New -> Import Project」を選択

settings.gradleに参照が追加されるGUIでの操作では対象のプロジェクトは、元プロジェクトにコピーして、インポートされるので注意が必要。必要に応じて、コピーされたファイル群を削除して、File('')のパスをオリジナルのプロジェクトを参照するように修正する。

後は、Jarファイルを直接参照していたいのを、リポジトリから取得するように変更して、コンパイルが通るまで、ライブラリの重複なんかを取り除いていく。

その他、移行中に発生したエラーはこんな感じ。

移行とは、直接関係ないけど、ハマったのがAndroid Studioがハングするという問題。

Macで開発していましたが、Applications以下のAndroid Studioを削除したり、別のフォルダに新規にインストールしましたが、解決せず。 結局、こちらの情報を元に、Applications以外の場所もキレイにして、再インストールで解決しました。Applicationsの下だけ消せば、綺麗にアンインストールできるというのが、Macの良いところだと思うんだけど、これだとWindowsと一緒だよー!

その他参考にさせていただいた記事。

基本をおさえる!Androidアプリで指定するバージョンについて(compileSdk,buildToolsVersion,....) - Qiita

Android Studioでproguard付きでビルドした時の`Duplicate zip entry`エラーの調査と対応 - Qiita

Android Studio で Build Variants - Qiita

移行そのものではないけど、Gradle化に合わせて、環境差異や、リリース版/テスト版の違いをBuild Typeなんかで切り分けるのも入れた。

2016年2月時点でのAndroidの各種情報

2016年2月時点でのAndroidの各種情報をまとめます。

Androidのバージョンシェア

Dashboards | Android Developers

f:id:begirama:20160211013341p:plain

KitKat(4.4)と Lollipop(5.x)で7割を占めています。 Jelly Bean(4.1, 4.2, 4.3)を加えると9割を超えます。 まだMarshmallow(6.0)は少ないけど、新規であればサポートするとして、KitKat以上は必須。日本だとJelly Beanの割合ももう少し高いと想定すると、なかなかサポートしないという訳には行かないかな。

開発ツール

Android Studioを使って開発します。Eclipseベースから、Android Studioに変わって、ツールはすごく進化したと思います。

Android Studio と SDK Tools のダウンロード | Android Developers

今、安定版はv1.5。2.0のベータ版が出ています。2.0ではInstant Runと呼ばれるコードの変更を、実行中に反映できるという機能や、エミュレータの高速化が個人的に目玉。 Android Studio 2.0 Preview | Android Developers Blog

デザイン

新規でAndroidに最適化したアプリをデザインするためには、マテリアルデザインを知っておくべきでしょう。 Introduction - Material design - Google design guidelines

次のStructure、Components、Patterns(特にナビゲーション!)は、設計者、デザイナーとも知っておくべきでしょう。知らないと、Androidでは一般的ではない(標準で機能が用意されていない)ことをやることになるのでUX的にも問題だし、開発のコストも上がります。

Structure - Layout - Google design guidelines

Bottom sheets - Components - Google design guidelines

Navigation - Patterns - Google design guidelines

複数の画面サイズ、複数

Devices and Displays | Android Developers

Supporting Multiple Screens | Android Developers

スマフォとタブレットは別のレイアウトを用意しておく、複数の解像度の画像を用意しておく、ピクセルじゃなくてdpを使おうぜ、みたいな話。

複数画面のデザイン | Android Developers

上の2つの記事のもうちょい詳しい資料。

Permission

Best Practices for App Permissions | Android Developers

Android 6.0 MarshmallowからPermissionの仕組みが変わっています。

端末ID

Best Practices for Unique Identifiers | Android Developers

Instance IDの利用が推奨されています。Instance IDとは何かとか、取得の方法はWhat is Instance ID?  |  Instance ID  |  Google Developersを参照。

Instance IDを使いたくない場合は、UUIDを自分で作ってねって書いてる。

便利なチェックリスト

発注側、受注側で合意しておくといいかも。

Core App Quality | Android Developers

Tablet App Quality | Android Developers

その他のNews

日本で唯一のグローバル端末ベンダーといってもいいSonyに、スマートフォン事業からの撤退という噂もあります。 Sony sees 25-fold profit jump by 2018; could exit TVs, phones | Reuters

2015年夏のAndroidのツール関連、個人的に気になるポイント

Android Mの名前はマカロンとか、M&Mとか噂になりましたけど、Marshmallowになりましたね。

Android Studioはバージョン1.3が安定版としてリリースされました。

Get your hands on Android Studio 1.3 | Android Developers Blog

Data Binding

これまではサードパーティのライブラリを使用していましたが、公式でサポートされました。 Data Bindingを使うことで、画面と、エンティティの間をひたすら値をコピーするしょうもない作業をする必要がなくなります。

Data Binding Guide | Android Developers

NDK

お試してきな感じで、Android Studio 1.3でサポートされているようです。 丁度、NDKを使用するプロジェクトが始まっているのですが、Qiitaとかで苦労されている人が多そうだったので、Android Studioでの開発は見送りました。

参考

Android Developers Blog 公式発表もここから発信されることが多いみたいです。

Android Developers マニュアル、サンプル、ガイドライン

Android Tools Project Site