Lionaroid

Lionasの技術ブログ

[書評] OpenGL ES 2.0 Android グラフィックスプログラミング


最近、仕事でOpenGL ES2.0を扱うようになったので、参考書を買いました。
OpenGL関連本は数多く出ていますが、AndroidOpenGLを扱うには、この「Open GL ES2.0 Android グラフィックスプログラミング」が最適だと思います。
1章の「OpenGL ES 2.0って何?」から始まり、2章では環境構築、3章で点の描画、4章で三角形の描画、5章ではテクスチャーの取り扱い、6章でOpen GL ES(シェーダ言語)など、丁寧な解説が一通り行われています。
7章以降は3Dに関する章ですが、個人的には2Dの取り扱いが必要だったので、6章まで読み込みました。

誤植は若干あるので、コードを写経しているとハマってしまう可能性大です(特に引数の値に注意!)。
ただ、それぞれのメソッドの意味を理解して記述していけば、誤植部分は避けられると思いますので、サンプルコードを打ちながら学ぶスタイルの方にもオススメできる本です。

OpenGL ES2.0+Androidを始めたい方に、自信を持ってオススメできる本です!

執筆した Android Studio 周辺記事まとめ

最近、仕事で Android Studio を本格的に触り始めたので、周辺技術の執筆した記事をまとめました。

Android Wear - UI概要

Android Wearが発表されましたね。早速、勉強ついでに UI Overview を翻訳してみました。

概要

新しいフォームファクターは、新しいUIモデルに相当します。高レベルでは、Android Wear UI は、サジェスト(Suggest)とデマンド(Demand)のコア機能に集中した2つのメインスペースで構成されます。アプリーケーションはこれらスペースの両方に重要な役割を持つでしょう。

サジェスト(Suggest): コンテキストストリーム

コンテキストストリームはカードの縦のリストで、それぞれが便利な、または、タイムリーな情報の部品として表示されます。
Android携帯電話とタブレット上のGoogle Nowのように、ユーザは、重要な更新が簡潔に分かりやすく書かれたカードから、他のカードへ遷移するために縦にスワイプします。
一度に画面に表示されるカードは1つのみで、背景画像は追加のビジュアルな情報を提供するのに役立ちます。
アプリケーションは、最も有用な時にカードを生成し、ストリーム中に挿入することができます。

ストリーム中のカードは単一の通知よりも多いです。水平方向にスワイプすることで追加のページを表示することができます。
さらに水平方向にスワイプすると、タップ可能なボタンが現れるかもしれません。これは通知に対して何かしらのアクションをユーザに許すことを意味します。
カードは左から右へスワイプすることで、次回に情報が表示されるまでストリームから除去することができます。
エミュレータでは、画面の上部にマウスオーバーすると、端末の上部の青いバーが表示され、クリックするとホームに戻ることができます。

デマンド(Demand): キューカード

コンテキストストリームでユーザが何をしたいか予想できないようなケースにおいて、キューカードはユーザが端末と話すことを許します。
キューカードは、"OK Google" または ホーム画面の "g" アイコンをタップすることで開くことができます。
キューカードを上方向にスワイプするとアクションのリストが表示され、それらはタップすることもできます。

アクションリストは、音声アクションの Android インテントを含みます。
来たる Android Wear SDK では、開発者のアプリケーションと、ユーザがボイスコマンドを使ってアクションを実行するインテントをマッチさせることが可能になります。
単一の音声インテントによって複数のアプリケーションが登録されるかもしれません。その際、ユーザはいずれのアプリケーションを使うかを目的に応じて選択するでしょう。

Androidテスト本を出版します

久々のブログ更新です。
本年 5/25にオライリー社から「O'Reilly Japan - 入門 Androidアプリケーションテスト入門Androidアプリケーションテスト」という本を出版します。
内容は、テストの設計方法の概要とAndroidのテスティングフレームワークの基礎です。
(※執筆から出版まで色々とあって、随分時間がかかってしまいました。。)


あくまでも入門書なので、新入社員の皆さんやテスト設計の方法を体系的に学んだことのない方に、おすすめします。逆に実務でTDDを実践しているような人には内容が簡単すぎるかも知れませんのであしからず。。

O'Reilly Japan - 入門 Androidアプリケーションテスト


個人的には、"TOYOTA86を10倍楽しむ本" とか書いてみたいんですけどねw
興味のある出版社さんいないかなー?

86峠セレクション2012アプリを公開しました

先日、TOYOTA 86を購入しました。納車待ちの期間があまりに長いので、TOYOTA 86サイトの86 SOCIETYで公開されている「86峠セレクション2012」の全ての峠を、簡単にカーナビに目的地として設定できる Android アプリを作りました。

元々は個人的なアプリとして作っていたのですが、もしかしたら他の86ユーザーにも需要があるかも?と思って公開しました。



アプリのダウンロードはこちら。アプリの説明はGoogle Playの説明文から。

TOYOTA 86 の 86 SOCIETYで公開されている "86峠セレクション"全120峠をNaviCon対応カーナビの「目的地」に簡単に設定することができるアプリです。お気に入りの峠を見つけて、実際に峠に出かけてみましょう!

トヨタ純正カーナビ(2012年版)は、NaviCon対応アプリに対応しています。
※ 本アプリはデンソー社製「NaviCon カーナビ連携」アプリと連携するため、本アプリ以外にNaviConアプリのインストールが別途必要です。アプリがインストールされていない場合は、Google Playのダウンロードページが表示されますので、NaviConアプリをダウンロードの上、ご利用下さい。
※ 本アプリは86オーナーが個人的に作成したアプリであり、トヨタ自動車並びに関連会社とは一切関係ございません。

ProGuardに関するまとめ

ADT17で変更になったProGuard(プログラム/リソースの圧縮・最適化・難読化ツール)について会社ブログの方に書いたついでに、過去のProGuardについて記事をまとめてみた。いずれも自分が書いたエントリです。

AndroidでProGuardを使わないと色々と損をすることがあるので、まだご存知でない方は一読することをオススメします。

AndroidでSDにアプリを移動した際に本体側の必要領域がゼロにならない理由

Android 2.2からアプリケーションを「携帯端末」から「SDカード」に移せるようになりました。これは携帯端末(本体)側のアプリの保存領域が限られているためで、インストールしたアプリをSDカードに移すことによって、本体側の空き容量を確保することができるようになるからです。

単純に考えると、アプリ移動後は本体側のアプリ保存領域はゼロになっても良いようにも思えますが、実際はゼロにはなりません。SDカード側に本来のアプリサイズの領域が必要な上に、本体側にも数百Kバイト〜数Mバイトの領域が必要になります。

この本体側の領域(正確には/data/以下)には「dalvik-cache」と呼ばれる、起動・実行・シャットダウンなどアプリの動作に必要なキャッシュファイルが保存されています。
dalvik-cacheは、端末の起動時にインストール済みアプリとフレームワークの情報を収集し、書き込み可能なファイルとして生成され最適化されたアプリのバイトコードを格納することで、アプリのスムーズな動作を実現しています。dalvik-cacheはAPKファイルに含まれるclass.dexからDalvikによってビルドされます。

dalvik-cacheのサイズを小さくする(=本体側の必要容量を小さくする)には、

  • プログラムのサイズを小さくする
  • Proguardでバイトコードを最適化する(難読化の他にも最適化機能があります)

などが有効です。

私が試した限りでは、proguardを適用した後にSDカードへ移す処理を行ったところ、本体側で13Mバイト程度消費していたアプリが、移動後は700Kバイト程度まで抑えられる結果となりました。

※dalvik-cacheの詳しい解説は、こちらのサイトが参考になるかもしれません。
※proguardの詳細はこちら