2012年8月4日土曜日

自動起動

カスタムROMを業務で使うのはいかがなものか…なところだけど、デモ用だとこれも都合がよかったりするのです。
  • 電源ONしたら最初から特定のアプリが起動している
  • ステータスバーやナビゲーションバー(ICS以降Phone UI)、システムバー(HoneyComb以降Tablet UI)を非表示にする
なんてことができたら、特定のアプリしか動かない端末が作れます。

※Phone UIなら 全画面アプリ + ホームアプリ化 で他アプリに遷移できなくすることができるけれど、Tablet UIの場合は設定画面に遷移できてしまうのです。

2012年7月30日月曜日

HTTP logging

Android上で行われるHTTP通信のログを取りたいことがあります。主にデバッグとか。動作確認とか。
カスタムROMを作ればアプリのコードに手を入れなくてもヘッダくらいはロギングできます。
(ストリームに手を入れれば送受信データもロギングできますが、サイズが大きかったりバイナリデータだったりするのでファイル出力するなどの対応が必要でしょう。今回はリクエストヘッダだけをlogcatに出力します)

SIMエミュレーション

Androidは android.telephony.TelephonyManager からSIMの事業者や接続している通信網の事業者情報を取得します。
これらを使ったアプリを作って動作確認する場合、実際に各事業者のSIMを用意したり渡航して目的の通信事業者に接続するか、ラッパクラスを作ってテスト(動作確認)用にスタブのような固有の応答を返すなどの対策をする必要があります。

カスタムROMなら、TelephonyManager 自体にそういう「デバッグ用固定応答」の機能を持たせることができます。
というわけでやってみました。(差分1 差分2

2012年7月22日日曜日

最初からADBデバッグON

初回起動時のデフォルト言語を日本語にしたのと同様、最初からUSBデバッグが有効だったらいちいち設定画面でチェック入れなくていいから楽になる…
という思いでサクッと対応差分を作ってみたのですが、、、
frameworks/base/services/java/com/android/server/usb/UsbDeviceManager.java
                         setAdbEnabled(false);
                     }
                     SystemProperties.set("persist.service.adb.enable", "");
+                } else if (Settings.System.getInt(mContentResolver, "jcrom_adb_inited", 0) == 0) {
+                    // first boot
+                    setAdbEnabled(true);
+                    Settings.Secure.putInt(mContentResolver, Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 1);
                 }
+                Settings.System.putInt(mContentResolver, "jcrom_adb_inited", 1);
 
                 // register observer to listen for settings changes
                 mContentResolver.registerContentObserver(

build/core/main.mk とか調べてみたら、 full_maguro-user のかわりに full_maguro-userdebug 使えばデフォルトでADBデバッグ有効になるぽいorz
そんなわけでビルドに使ってるシェルスクリプトを少し書き換えただけでこの差分は破棄 ( ゚∀゚)ノボーイ

初回起動時のデフォルト言語を日本語に

JCROMの JC は Japanese Custom らしいです。
だったら初回起動時から日本語表示して欲しい…!
(選択するだけなんだけど wipe するたびに設定し直すの面倒くさいんだもの)

というわけで調べてみました。
JCROM でも AOSP でも同じはずです。

結論だけ知りたい方は build/target/product/full_base.mk
PRODUCT_LOCALES := en_US

PRODUCT_LOCALES := ja_JP
にしてください。

2012年7月21日土曜日

AndroidでアニメGIF表示

AndroidでアニメGIF表示と言えば明日の鍵さんがブログ記事にしてみえましたが
もっと短いコードでそれなりに動くものを作りました。

ソースはこれ。使い方はこんな感じサンプルプロジェクト
リソースや外部ファイルのアニメGIFを android.graphics.drawable.AnimationDrawable にします。各フレームをDrawableに展開してメモリに持つので、大きな画像やフレーム数が多いファイルはOOMになるかもしれません。

アニメーションの途中で pause したり resume したりする場合はこちらのブランチを使ってください。ただし AnimationDrawable の privateメンバにアクセスするためにリフレクションを使っています。

無保証ですがちょっとした用途なら使える、、カナ? 自己責任でご自由にお使いください。(Galaxy Note と Galaxy Nexus でしか確認していませんが API Level 4(1.6)でも動くと思います)

ピクトのテーマ設定

JCROMネタが続きます。

ガラケーの頃、きせかえと言えばメニュー画面のほかに電池残量や電界強度を示すピクト表示が定番だったように思います。
でも今のJCROMはピクトのテーマ設定に未対応… ナンデ?

というわけでピクトのテーマ設定対応をしてみました。(差分差分
※bitbucketのリポジトリはICS-JCROM版。JB-JCROMでも同様の対応ができそうです。