Androidで互換性の高いアプリを書くための最悪ではない程度のプラクティス

っつーても1.6~4.0までぼちぼち対応しているって程度。
一般アプリ向け。ゲームは知らん。


・プロジェクトそのもののAPI Versionは最新のもの(今なら14)を指定
・android:minSdkVersionは当然V4
・android:targetSdkVersionは二択。3.x以上の端末でMenuボタンを出したいならV10、腹を括ってモダン設計で行くなら最新のもの(今ならV14)
・android-support-v4.jarを使うのは今時常識。Fragment使わず全部ベタActivityとか使う輩はこの先生mashroomあたわず
・基本的にV4のAPIしか使ってはいけない。それ以上を使う時はリフレクションするかクラスローダの例外を拾ってスタブクラスでゴニョゴニョ。
・V5以上のAPIを使ってもコンパイルは通ってしまう。そのくせV4のマシンで動かすとクラスロード時に死ぬので注意。まあ大抵すぐ死ぬから気づくけど
・V5以上のAPIにある定数は使ってもいいけどxmlはV4互換で書かないとダメ。例えばmatch_parentは使わずfill_parentで書くとか
・drawable-xhdpiとかlayout-xlargeとかは使っていいよ。じゃんじゃん作れ
・values-v11とか書けばその中はどうせv11以上でしか読まれないからその中のxmlは本気出しても良い。
例えばstyle.xmlとかtheme.xmlとかは下位互換用のvalues/style.xmlと最新版用のvalues-v11/style.xmlに分けて後者でHoloを使う
・support-v4とproguardが大ゲンカするので黙らせる
-dontwarn **CompatHoneycomb
-dontwarn **CompatCreatorHoneycombMR2
-dontwarn android.support.v4.view.**
-keep class android.support.v4.** { *; }
・タイトルバーを非表示にする時は要注意。targetSdkVersion=11以上にするとHoneycomb以上でメニューボタン出ないからメニュー押せなくなるぞ
・メニューでは適宜MenuCompat.setShowAsActionを使おう。なんかかっこいいし
・drawableはldpi/mdpi/hdpi/xhdpiの4種類全部用意すること。楽がしたいならhdpiとxhdpiの2種類でもまあ良い
・公式UIガイドラインがコロコロ変わっているのでdrawableに-v11と-v14を作っても良い(Googleを罵倒しながら)
そこまで拘らないなら解像度違いの2~4種類だけでも十分
・shape drawableで作れるものはなるべく画像ではなくshapeを使う。だって楽だし綺麗だし
・layoutはlayout/layout-land/layout-large/layout-large-landの4つはとりあえずフォルダだけでも作っておけ。
全レイアウトに対して4種類用意する必要はないけど心構えとして、ね。
includeやmergeを駆使して記述を最小化するとメンテしやすい→しかしレイアウトエディタ涙目
・RelativeLayoutとかlayout_weightとかを制して目くるめくリキッドレイアウトの世界へ
・string.xmlはvaluesとvalues-jaの2個。当然valuesは英語。下手でも片言でもいいから英語
・theme.xmlはvaluesとvalues-v11に作る。Holoは癖が強いので。
タブレットだとフォントサイズを少し大きめにした方がいいこともあるのでその場合はstyle.xmlだけvaluesとvalues-largeに分ける
・タブレットを想定するとペイン数が変わるためActivityはペインの管理とキー入力などだけを受け持ち、画面のロジックはFragmentに書く。Fragmentはいまや常識
landとportでFragment配置が異なると画面回転が鬼門なので回転して死ぬ時はonCreate内で帳尻を合わせる。
FragmentTransactionをcommitしてもcommitされずステート不正で死ぬことがある。commitという言葉について小一時間語り合いたくなったらexecutePendingTransactions。
・キーボード対応。まあ、一応ね。カーソルキーくらいはちゃんと使えるようにしておくとデキル子だと思って貰えるよ。IS01ユーザとかに。
・SDカードにデータ類を置く時はgetExternalFilesDirをリフレクションで呼び、呼べない時はgetExternalStorageDirectory下の”/Android/data/” + context.getPackageName() + “/files/”を指定する。
Android2.2以上の端末ではアンインストール時に自動的にデータが削除でき、2.1以下では自動削除はされないけどとりあえずGoogleオススメの場所に保存はされる。
・とにかくFragmentがキモ。Activityとはまた違ったライフサイクルを持つので慣れるまではまた苦労させられる。慣れたらすごく便利だよ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.