2012年4月10日火曜日

Android 4.0 ICS tunaとmaguroとtoroの違い

基本全部Galaxy Nexusの関連ファイルで、maguroがGSM/HSPA+、toroがCDMA/LTEのカスタマイズ。tunaがその共通部分。

http://groups.google.com/group/android-building/browse_thread/thread/ab34b1144a96bcd8

tuna+maguroでGSM/HSPA+のGalaxy Nexusということ。

toroの方が脂が乗っているので、ファイルもでかい。

ちなみに魚の名前は前からコードネームとして利用されており、エミュレータはgoldfish(金魚)、G1はtrout(マス)、Nexus Oneはmahimahi(シイラ)、Nexus Sはherring(ニシン)、XOOMはstingray(アカエイ)とのこと。

2012年4月9日月曜日

Mac OS X LionでAndroid ICSをビルドする

メモ。

とにかくはまるしわからない。何がいけなかもわからない。
http://blog.sola-dolphin-1.net/archives/4059847.html
ここらへんを参考に。

途中ビルドにこけて一番はまったところは
https://groups.google.com/forum/#!topic/android-building/yd8I2aMbZZE
のlibbccを少し前のバージョンに戻すことで解決。

結局ビルドしたROMはカーネルを再コンパイルしないと上手く動かないそうなので、カーネルコンパイル中。

その他はまったら試すこと

  1. エミュレーターをコンパイルしない
    • 実機で確認するのであれば、どうせエミュレーターはいらないだろうってことで、external/qemu/Android.mkの中身をざっくりコメントアウト。行数はあまりないので、楽々コメントアウトできます。
  2. libSDLをがんばってインストールしてみる
    • libSDLの1.2.15では、Lionでのビルドができるようになっているので、ちゃんとやればインストールできます。
    • macportsからインストールしようとして、glib2でこける場合は、sudo port clean glib2で一度消してから、再インストールしましょう。
    • さらにそのあと、libelfをdeactivateしろと言われる場合には、sudo port deactivate libelfで一旦無効にして、正常にインストールしてからsudo port activate libelfで元に戻せます
  3. 何回かコンパイルしてみる
    • 理由はよくわかりませんが、実際のROMを作るところ以外でこけている場合は、分散ビルドでビルドがいろんな順番で進むため(?)何度もコンパイルしているといつの間にかROMができています。もしかしたら自分のその間の試行錯誤でうまくいったのかもしれませんが。。
    • とりあえず、成功した人は最後までやめなかった人だ、ということなので。
    • 少なくとも自分は成功しているので、Mac OS X LionでAndroid ICSをビルドすることは不可能ではありません

2012年4月6日金曜日

Android 4.0 でNavigationBarが表示されているか判定する方法

ICSのNavigationBarが画面内に表示されているかどうかを取得する方法が、あんまりみつからなかったのでメモ

Activityなどのなかで、

public static boolean isNavigationBarVisible(){
    return !ViewConfigration.get(this).hasPermanentMenuKey();
}

でとれます。

ViewConfigurationはstaticメソッドのgetにContextを引数として渡すことでインスタンスを取得でき、そのhasPermanentMenuKeyメソッドは、端末にビルトインされたメニューボタンがあるかどうかを返します。

なので、その否定がNavigationBarの有無と一致します。

2012年2月28日火曜日

RSD mode 3で文鎮になったxoomをはさみと輪ゴムとアルミホイルで復活させる!

いろいろいじくれることでおなじみのXoomですが、文鎮化してしまっていたので、Motorolaのファクトリーケーブル(factory cable)とやらを自作して復活させました。
ファクトリーケーブルというのは、通常のUSBケーブルとは少し異なる、端末をベンダー独自のモードに入らせるためのケーブルで、PSPで言うところのパンドラバッテリーみたいなものでしょうかね。Samsung端末にはダウンロードモードに入れるためのUSBケーブル等もあるそうですが。
で、Motorolaの場合は、micro USBの1ピンと4ピンをショートさせるだけでできます。
通常のmicro USBでは、1ピンは5Vで、4ピンはIDなので、モトローラの端末は4ピンにHighが来ているときだけ特別なモードに入るようです。
作るのに必要な道具は以下
はさみ、輪ゴム、アルミホイル
では手順を。
  1. micro USBの端子をはさみで丁寧に切り開く
  2. なかのケーブルが見えるまで、丁寧に金属のパーツやゴムを外す
  3. アルミホイルを5mm x 50mmくらいの長さに切り取る
  4. アルミホイルを折り畳みつつつぶして、糸のようにする。はじめのうちは折り畳み、これ以上たためないよ!ってところで親指と人差し指でよりよりするのがよい。
  5. 1ピンに繋がってる線の導線部分にアルミホイルを巻き付ける。通常5Vに繋がるケーブルは赤なので、チェックするとよい。
  6. 4ピンのあたりにアルミホイルを近づける。セロテープがあれば仮止めしておくとよい。たいてい4ピンには何も線が繋がっていない。
  7. ここだ、と思ったところで輪ゴムなどでしっかりとアルミホイルとピンを固定する。
  8. 完成
普通にはんだごてがある人はそれでやってください。僕はちょうど手元にはさみと輪ゴムとアルミホイルしかなかったので、それで頑張りました。
Xoomに接続し、電源+ボリューム上キーで再起動後、ボリューム下を押してあげると、今まで入れなかったfastbootモードに入ることができます。
うまくケーブルが作成できていないと、パソコンにつないだときに、電流を利用しすぎているのでUSBデバイスを停止しました、みたいなメッセージが出ますが、そんなに気にしなくても大丈夫です。

2012年2月24日金曜日

iPhone7行砂嵐アプリ


今話題のgumroadを使って、せっかくなのでなんか売ってみたいと思い、
試しに作ってみました。たった7行(横幅は80文字)で書かれたiPhoneの砂嵐表示アプリの
ソースコードです。

https://gumroad.com/l/lJbk ($1)

アプリを起動すると、左にあるような砂嵐が画面に表示されます。

まぁそれだけっちゃそれだけですが、せっかくなので売ってみます。

大変だった点は、とにかくapplicationDidFinishLaunchingとか、CGBitmapContextCreate
などの長い名前のキーワードを、以下に1行の中に押さえるか、ということでした。

通常iPhoneアプリを作るときは、InterfaceBuilderを利用したりしますが、
このコードは純粋にmain.mの一つだけで、7行です。
ポイントは、UIApplicationDelegateをUIWindowのサブクラスに実装させることで、
クラスを一つだけにすることです。

しかし、そのままだとwindowの生成に失敗するので、windowの初期化コードを、
オーバーライドされたinitの中に記述し、正しく初期化されるようにします。

まぁ他にも省略可能なメソッドの型名やインスタンス変数の宣言などはとことん削り、
グローバルに全て持ってしまっています。

selfとかくのも長いので、一旦sなどの一文字の変数にとっておいて、
それを逐次参照しています。

バッドノウハウの塊ですが、以外と参考にはなるとおもうので、よければぜひ。