こんにちは、開発の小野知之です。
今回は、私が実際にAndroidアプリを開発していて遭遇した体験を、前後編の2回にわたってお送りします。アプリ開発される方はもちろん、Androidの内部動作について興味ある方にも、何かの参考になるかもしれません。
なお、挿し絵や説明図は全部、私が コミPo! で作りました。
こんにちは、開発の小野知之です。
今回は、私が実際にAndroidアプリを開発していて遭遇した体験を、前後編の2回にわたってお送りします。アプリ開発される方はもちろん、Androidの内部動作について興味ある方にも、何かの参考になるかもしれません。
なお、挿し絵や説明図は全部、私が コミPo! で作りました。
ゲームプラットフォームとして今や一大勢力となった「iPhone」「iPad」。かつてのコンシューマゲーム機レベルの『しっかりと身の詰まった』面白いゲームやコンテンツが目白押し!
ですが、どうしても通信回線を使ってダウンロードという工程が挟まる、またストアアプリとしての厳しい容量制限があることなどから、『しっかりと詰めた身』を泣く泣く削る必要があります。その『削られる身』の代表格が左様、画像リソース。悩ましいところです。
『枯れた技術の水平思考』とは、故・横井軍平さんの哲学だそうですが、ツール開発にもその哲学が。ソリューション営業部の浅井です。
ある日、弊社の開発から『面白いこと考えた!』という叫び声が上がったのが本年の7月。聞けば『24bitのPNGを、24bitのまま小さく』となぞなぞっぽいアイデア・・・だったんですが、ここ1年くらい、スマートフォンアプリを制作しているお客様から『PVRTCやETCなどの圧縮テクスチャをどーしても使いたくない局面』があること、またその場合は『フルカラーのPNGを仕方なしに使っている』と聞いていたこともあって、こここ、これはッ!
と色めき立ちまして、弊社製品“OPTPiX imesta 7 for Mobile & Social”に「OPTPiX Labs」印で実験的にリリースしたことを、ここにお知らせいたします。
こんにちは、開発の小野知之です。
Androidアプリを開発・公開している方は、ユーザーさんから原因不明の不具合報告をもらって頭を抱えたことはありませんでしょうか。
今回は、そんなAndroidアプリの中でも、「ウィジェット」でよく報告されるトラブルと、その原因と解決方法についてのお話です。
一般の、Android スマホ・タブレットのユーザーさんも、知っておくときっと役に立つ知識だと思いますので、是非「解決方法 その1」だけでも読んでみてください。
ウィジェットをGoogle Playからインストールしたユーザーさんから、こんな報告を受けたことはありませんか?
『ウィジェット一覧にアイコンが出てこないんですけど。』
中には、自分自身でこのような経験をした方もいると思います。ウィジェットをホーム画面に配置しようとして、ウィジェット一覧を開いても、そこには目的のウィジェットのアイコンが見つからないのです。
きっと、この現象に遭遇したほとんどの方は『ちくしょう、このアプリ、バグってやがる!』などと思うのではないでしょうか。
しかし、アプリ開発者やユーザーサポートの方々は、『いや、そんなバグは無いと思うんだけど…』と、頭を抱えてしまうことと思います。
そうなんです。
この現象は、ほとんどの場合、ウィジェットのバグではないのです。
「なに言ってるんだ?」って思われるかもしれませんが、とにかく試してもらってください。
端末を回転して画面の縦横が変わると、ウィジェット一覧のアイコンが並び替えられます。そうすると、さっきまで無かったアイコンが一覧に出てくるのです。今回の質問のようなトラブルの場合、ほとんどの場合はたったこれだけで解決してしまいます。
原因は、『Android OSが、ウィジェット一覧を更新しそこねることがある』ためです。
Android OSは通常、インストールしたウィジェットのアイコンをすぐにウィジェット一覧に追加します。ところが、まれに一覧が更新されず、以前の一覧のままになることがあるのです。当然ですがこのときは、インストールしたばかりのウィジェットのアイコンは表示されません。
私が試した範囲では Android 2.3.3 と 4.0.3 で複数回ずつ、発生を確認しています。もちろん、端末を回転したらアイコンが出てきました。他の方の話を聞くと、どうやら Android OSのバージョンはあまり関係なく発生するようです。
この現象、案外遭遇するわりには、原因と解決方法についてほとんど知られていないようです。つまりそれだけ「アプリのバグ」として片づけられているんですね(涙)。
『ウィジェットが一覧に追加されなかったら、とりあえず回転』。
みなさんの周囲の Android を使っている方に、是非ともどんどん広めてください。困っているユーザーさんがいたら、教えてあげてください。
※なお、端末を再起動しても改善します。また、アプリを再インストールすることでも改善することがありますが、いずれにしろ、回転するのが一番簡単です。
★ 開発者向け情報 その1 ★
せっかくなので、Androidアプリ開発者向けのお話を補足。
今回紹介したこの「ウィジェット一覧に追加されない現象」ですが、なんと、開発用の Android エミュレータでも発生します。エミュレータがいかにしっかり作られているかがよく解り、ちょっぴり感動します。
もちろん、端末(エミュレータ画面)を回転させれば、ちゃんと出て来ます。
ちなみにエミュレータの画面回転は、[Ctrl]+[F11] または [Ctrl]+[F12] です。
Android OSの仕様により、どんなウィジェットでも、SDカードにインストールすると使用できません。ウィジェットは必ず本体メモリーにインストールしてください。もしも、手動でSDカードにインストールや移動をしてしまった場合は、本体メモリーに移動させてみてください。
通常は、ウィジェットは自動的に本体メモリーにインストールされるので、この問題はほとんど発生しません。
ところが、一部の機種では設定次第でSDカードへインストールできてしまう場合があります。また、ファイル管理アプリなどを使ってSDカードへ移動することもできます。こうしたウィジェットは使用できなくなり、ウィジェット一覧にもアイコンが表示されません。端末を回転してもウィジェットのアイコンが追加されない場合は、このケースにあてはまらないか確認してみてください。
ではなぜ、Android OSがこのような仕様になっているかというと、それは『SDカードは取り外せるから』です。
ウィジェットのような、常駐して動き続けるアプリがSDカードにあると、SDカードを外した時に困ったことになります。どんな挙動をするかわかりません。
これはSDカードを抜かなければ良いというものでもありません。Android OSの起動時には、SDカードがOSに認識されるまでの間は一時的に「SDカードが無い(抜かれたのと同じ)」状態になります。また、USBケーブルでPCと接続した場合も、SDカードをOSからマウント解除(切り離し)しますので、同様のことが発生します。
ついでにもう一つ覚えておいてほしいのは、ウィジェットに限らず、「常駐して動き続けるアプリはすべて」、SDカードにインストールすると動作に問題が生じる可能性があるということです。
本体メモリーの空き容量が減ってきた場合でも、アプリをSDカードへ移動するときは注意が必要です。もしも、SDカードへ移したアプリがおかしな挙動をするときは、そのアプリは本体メモリーへ戻して使ってください。
★ 開発者向け情報 その2 ★
ここでも Androidアプリ開発者向けのお話を一つ紹介します。
Androidアプリを開発するときに、Android 2.2 以降では、そのアプリのインストール先メモリーを指定しておくことができます。 具体的には、AndroidManifest.xml の manifest タグ内に、下記のような定義を追加します。
android:installLocation=”internalOnly”
この右側部分の文字列には、下記の3つのいずれかを指定します。
internalOnly | 常に本体メモリーへインストールします。 インストール後でもSDカードへは移動できません。 |
preferExternal | なるべくSDカードへインストールしますが、空き容量が少ないかったりSDカードが外されている場合などは本体メモリーへインストールします。 インストール後に相互のメモリーへ移動できます。 |
auto | なるべく本体メモリーへインストールしますが、 空き容量が少ない場合はSDカードへインストールします。 インストール後に相互のメモリーへ移動できます。 |
ウィジェットなどの常駐して動き続けるアプリでは “internalOnly” を指定します。
installLocation の指定が無かった場合は、通常はこの “internalOnly” を指定したものとして扱われますが、「解決方法 その2」で紹介したようにSDカードへインストールできてしまう場合もあるので、必ず明示的に指定したほうが良いです。
ゲームなどのような、常駐しないアプリでファイルサイズが大きいものは、”preferExternal” を指定しておくと親切で良いと思います。
なお、Android 2.1 以前ではこの指定は無視され、常に本体メモリーにインストールされます。Android 2.1 もサポートしたい場合は注意してください。
Google Playに公開されているウィジェットには、こんな評価コメントが付いているのをよく見かけます。
『インストールしたのに画面に出ません』
私は最初、これは「解決方法 その1、その2」のいずれかのことだと思っていましたが、そうではなかったんです。
これらのコメントを付けたみなさんは、ウィジェットがどういうものかを、そもそも知らないのです。インストールしたらホーム画面にポンと現れるものと思っているのです。
Android のスマホのユーザー数は劇的に増え続けていますから、必然的にこういったユーザーさんの数もどんどん増えているわけですね。開発者の視点だけでは、なかなか気付きにくいことだと思います。
みなさんの周囲にAndroidのスマホを買った方がいたら、ウィジェットの使い方をさりげなく教えてあげてください。
特に、ウィジェットを開発・公開する側の方は、「ウィジェットはこう使うんですよ」ということをユーザーさんにしっかり教えてあげなくてはならないと思います。たとえば、Google Playで公開するなら、説明文にウィジェットの基本的な使い方まで解説しておくと良いのではないでしょうか。
Androidのウィジェットを使用する場合によく発生するトラブルと、その原因・解決方法について、紹介しました。これらを、中でも特に「回転してみる」を、是非とも Androidユーザーさんの間にどんどん広めていってください。
そして…無実の「★1つ」が、少しでもGoogle Playから減りますように…。
あ、そうそう。これらの3つのどれにもあてはまらない場合は、やっぱりアプリ側のバグの可能性が高いと思いますよ(汗)。開発者の方は、AndroidManifest.xml のタイプミスなどを疑ってみてください。
ちょうどこの原稿を書いている最中に、海外の方から「ユーのウィジェットをインストールしたけど、ウィジェット一覧に出て来ないんだけどっ!」(意訳) という内容のメールが来ました。アプリ管理画面には出るのにウィジェット一覧には出ないらしいです。まさに「原因と解決方法 その1」の件そのものですね。
で、なによりも驚いたのは、この方の Android がつい先日発表されたばかりの「4.1」だったということです。そうか、4.1 でもまだ改善されていないのかこれ…。
あ、ところでこのユーザーさん、私が「回転してプリーズ」ってメールを出した直後に、「ユーにメール送った直後に、リブートしたら出てきたよ! また他のウィジェットでなったらトライしてみるよ! サンクス!」(意訳) という返事がありました。回転して改善するというところまでは確認できなかったのが残念です(まぁ間違いないでしょうけれども)。
Google Playで、個人的に「TOMOYUKI ONO」名義でいくつかウィジェットを公開しています。気が向いたら検索してみてください(コソコソ…)。
ウェブテクノロジ開発部の山崎です。こんにちは。
今回は、スマートフォンアプリ(アンドロイド(Android)アプリ)と、iOSアプリ(iPhoneアプリ/iPadアプリ)で綺麗な画像を軽く扱いたい開発者の方のために、解決策をご紹介いたします。
※ 本エントリーはブログ掲載時点の情報をまとめたものです。将来的に仕様が変更になる可能性もあるのであらかじめご了承ください。
さて、スマートフォンアプリでは、アプリケーションのファイルサイズに制限があります。「Android Market」ではアップロード可能なアプリの上限サイズが「50MBまで」と制限されていますし、
「App Store」では3G回線経由にてダウンロード可能なアプリの上限サイズは「20MBまで」と制限されています。
ちなみに、iOSでは、WiFi経由でダウンロード可能なアプリの上限サイズは2GBとのことです。
また、それぞれの端末のメモリストレージの量も現段階では「PCのように豊富にある」「湯水のように使える」とは言えない状況です。「Android Market」や「App Store」の制限もさることながら、アプリケーションは少しでも軽いほうがユーザーに喜ばれるのは確かです。
努力してソースコードを短くしてもアプリケーションのサイズが劇的に小さくなることはほとんど無いと言えるでしょう。
アプリケーションの中で大きくサイズを使っているのは「画像データ」なのです。
スマートフォンの画面の解像度は、昔のPCに匹敵するほど大きく(広く)なっています。最近は、WVGA:800×480以上の端末が増えています。この大きさの画像データを複数枚持つだけでアプリの容量はどんどん増えていきます。
画像の数を減らすことなく、アプリの容量を抑えようとして画像データを必要以上に圧縮すると画像内にモスキートノイズが増えてしまい、スマートフォンのキレイで広い画面のメリットを損なう結果になってしまいます。
写真の画像はJPEG形式が最適です。キレイに小さく圧縮できます。しかし、図表やイラストの画像はJPEG形式で圧縮(保存)するとモスキートノイズだらけのひどい結果になります。
図表の画像を使う場合はPNG形式で圧縮(保存)してください。圧縮には減色で対応するとキレイな画像のまま軽くすることができます。
写真と図表が混在している画像は、JPEG形式?PNG形式?どちらで保存すればキレイなまま軽くできるでしょうか。
手間を惜しまないのであれば、写真の画像と図表の画像を分離するとよいでしょう。
次の図のように、写真の部分を切り出してJPEG形式で保存し、図表や文字の部分はPNG形式で保存します。そして、表示するときに1つの画像に見えるようにくっつけるわけです。
特にモスキートノイズの入りやすい文字周りはPNG形式で保存するとJPEG形式と同じバイトサイズにまで圧縮しても表示がクッキリとキレイになります。
しかし、この作業。技術や理論が理解できても実際にやってみるととても大変です。
特に、画像の枚数が多かったり、何度も改修がかかるような画像に対してこの作業を手でやるのは・・・コスト的にも品質的にも問題があります。
この作業を確実に全自動で計算&分割&保存してしまうのが「ハイブリッドフォーマット」で画像を保存できる「OPTPiX imesta 7 for Mobile & Social」です。
詳しくは「電子書籍・雑誌やコミックをキレイに!軽く!ハイブリッド画像作成ツール – OPTPiX imesta 7 for Mobile & Social」のページをご覧ください。
「・・・で、そのハイブリッド画像をアプリで表示するには、どうしたらいいの?」
アプリとして動作実績のあるアンドロイド(Android)アプリのサンプルソースコードと、iOSアプリ(iPhoneアプリ/iPadアプリ)のサンプルソースコードともにご用意しています。
「サンプルソースコードを参考にしたい」開発者の方はお問い合わせフォームからお問い合わせください。