2011年8月10日水曜日

repo start *** --all

「makenekoが学習したandroid build初心者向けTIPS」 メモ(1)です。


cm4is01やcyangoenmod、はたまたAOSPのsourceをrepo syncした後

repo start *** --all
*** = branch名、例えば「master」とか。

を一度実行しておくと後々ちょっとだけ便利です。

androidのsourceはgitで管理されているのですが、
これをしておくと、repo sync直後の状態をbranchとして記録(?)出来ます。

たとえば、
framework/base/wifi/java/android/net/wifi/WifiStateTracker.java
を少し編集したあと、カレントディレクトリをframework/baseより下にして
git diff
とすると

diff --git a/wifi/java/android/net/wifi/WifiStateTracker.java b/wifi/java/androi
index e2d2a96..755ef93 100644
--- a/wifi/java/android/net/wifi/WifiStateTracker.java
+++ b/wifi/java/android/net/wifi/WifiStateTracker.java
@@ -368,7 +368,7 @@ public class WifiStateTracker extends NetworkStateTracker {

         mSettingsObserver = new SettingsObserver(new Handler());

-        mInterfaceName = SystemProperties.get("wifi.interface", "tiwlan0");
+        mInterfaceName = SystemProperties.get("wifi.interface", "wlan0");
         mDnsPropNames = new String[] {
             "net." + mInterfaceName + ".dns1",
             "net." + mInterfaceName + ".dns2"

とか表示されて、変更点を表示してくれます。


しかし、例えば、framework/base、と、framework/policy/baseはgit上別プロジェクト扱いになるため、
それぞれのフォルダでgit diffを実行しないと、それぞれフォルダの中身の差分が表示されません。

2011年7月21日木曜日

volume key

fi01_IS01殿がvolume key用のパッチを公開されました。

key trackingもされており、とても素敵です♪(下に書いてあるaltを先に放しても平気)

ソース用のパッチなので、build出来る方しか今は利用出来ませんが・・・


http://cm4is01.remu.biz/todo

へぇー(・ω・)と思いながらリストを見ていたまけねこ。


個人的に気になったのはvolume key。

いつも少し不便だし、どうにか出来ないかなと思い、調べ始めました。
もちろん、一番簡単そうだと思ったからです( ̄ー ̄)

しかし・・・・いくらぐぐっても、

ALT+7キーをvolume keyとかに割り当てるとか言う記事がどこにもねーーー(つωT)
どれもこれも

・ **キーに**を割り当てる。(例:ALTとCTRLキーを入れ替える。物理的キーの割り当て変更)


・ 文字の割り当てを変更する。(例:マイナス+SHIFT=アンダーバーにする。キーと文字の割り当て変更)


・ Androidアプリにおけるキー割り当て。(例:CTRL+何か=何かの動作を割り当てる。)


ばかりで、


・altやctrlなどを押しつつ別キーを同時押しすると、volume up/downになる、


という話がぜんぜん出てこないorz

androidx86とか、なんかそういうショートカットキーがあるみたいですが、
それっぽいところを見たり、commit logを調べても、見つからないorz

前述した3つ目が近いのだけど、これだとあくまでアンドロイドアプリ上の動作なので、

常駐させたりとか必要そうな気がする。。。


とりあえずソースを追いかけたり、Webの記事を探してみることにしました。

(cかじったぐらいでc++,java知らないけど orz)

===================================


Keyboard入力がどう伝わるか。

情報は怪しく、超絶ざっくりです。あくまで参考に。

Linuxキーボードドライバ(msm_i2ckbd.c)


/dev/input/event5 (is01rebuild様より)

なんか分からないけどframework/baseの下辺りにある.cppなコード
/dev/input/event5の中身を読んでkeyeventを作る?監視?irq?

keyEvent.java

アプリからキー入力を取る場合はkeyEvent.dispatchとかして、
getKeyCodeとか使って判別する、らしい?

前二つの段階では、単にハードウェア的なキー番号でやりとり。

後ろでは、.kl(key layout)ファイルとかkcm(key character map)ファイルとかを利用して、
KeyEvent.javaとかKeyCharacterMap.cppとかで、
それをソフトウェア的なキーの番号に変換し、入力文字の割り当てをしてるようです。

===================================


ALT+6にvolume downを割り当てる場合、以下のどこかでやればいいみたい。

・ドライバ  → buildしたりinsmod?するのが面倒臭い。というかkernelはいじくりたくない・・・
・cppなkeyeventを拾って上に送るところ? →cpp知らない:(
・keyEvent.java辺り
・アプリ         → アプリ作れない
排他論的に、keyEvent.javaをいじくることにしましたorz

↓あわわ、これ、framework/baseとframework/policy/baseがまじってる・・・orz

grepとかして場所を確認ください(つω;)
http://pastebin.com/P75kZCgf

2011/7/1修正。PhoneWindowManager.javaの差分忘れてましたOrz

キーコードの入力に対し、人間ならまず「そのキーは何?」と聞くだろう、

そしてプログラム処理もそうするだろう、と判断し、
getKeyCodeの所に、alt+6/7の時は、volumedown/upキーだと答えるように。
systemキーだと思わせるために、isSystemのところを同様に偽装
してみました。

主な修正はこの2点のみなので、keyupやlongpressedの時の判定とか大丈夫かと思いましたが、

HardwareCheckerなるソフトではきちんとkeyup/keydownも判定されているようでした。
あ・・・1点だめだ・・・
・ALT押す → ALT, down
・6押す  → volumedown, down
・ALT離す → ALT, up
・6離す  → 6, up    ←volumedown, upじゃないorz

つまり、volumedownというキーがupされたという情報が出てこない(笑)

けど、実際に操作して音量を上げ下げするのにとりあえずは支障なさそうです。

なんとなく印象として、getKeyCodeを修正するのは邪道ぽく、

本筋はドライバを修正するのが良いような気がします。

今回は、とりあえず動いたからいいや(・ω・)

2011年7月7日木曜日

cm4is01のbuildメモ

CM6byDevRenax-06242011-IS01を対象とした6/28頃のメモです。

基本は、本家 を参照くださいm(_ _)m
=============
. build/envsetup.sh
間にスペース必要


lunch generic_nb30-userdebug
vendor/cyanogen/products/AndroidProducts.mk
cyanogen_harmony.mkの先頭を#
にするとエラー回避

export  USE_CCACHE=1 

sudo update-alternatives --config java
でjava-6-sunを選択(sun-jdk6のインストールは割愛)


vendor/renax/prebuild
二つライブラリ放り込む必要あり。libbattlog.soとlibsynergy_com.so

vendor/renax/gapps
フォルダを作成し、
http://wiki.cyanogenmod.com/wiki/Latest_Version
のhdpiを入れてみた。
全フォルダのファイルを、vendor/renax/gappsに全部全部放り込む。
#初回起動時にwizardが複数出たり無限ループになりそうになったりする。
#ある程度設定したら電源ボタンキーで終了して抜けてしまってごまかしている。

external/wpa_supplicant
中身をSH Developersのと総入れ替え。その後cm4is01を差し替える。
https://sh-dev.sharp.co.jp/android/modules/oss/index.php?/is01

これで一応コンパイルが通るはず?

作成されたsystemフォルダを実機に放り込む前に・・・
・/system/binの中身のアクセス権。chmod 755しておくと吉? ←不要であることを確認 2011/8/3
・/system/etc/dhcpcd/dhcpcd-run-hooks
中身の終わりのほう、
    if [ -f "${hook}" ]; then
の場合は、
    if ls "${hook}" >/dev/null 2>&1; then
としておくと、wifiアクセスエラーおきないかも。

2011年6月25日土曜日

ubuntu x64 android開発環境準備

メモメモ。事前にVMwarePlayerをインストールしておく。

いっぱい参考になるサイトがあるなぁ(・ω・)
基本は、やはり
http://source.android.com/source/initializing.html
でしょうか。


(1)ubuntu 10.04.2 64bit LTSをインストール

メモリ4G。
ディスク40G。分割せず、on demandでなく最初から全領域予約。

11.04 64bitを試してみるも、gcc-multilib g++-multilibがないと言われた。
入れることも出来そうだけど、dpkgで依存したのを全部入れないといけなさそう?
ぐぐってもよく分からない。。orz

・vmware toolsをインストール(上書きだからか自動インストールされなかった)

・update managerで全部一応更新


(2)下準備

・/etc/udev/rules.d

# for IS01
SUBSYSTEM=="usb", SYSFS{idVendor}=="04dd", MODE="0666"
# for xperia x10
SUBSYSTEM==”usb”, SYSFS{idVendor}==”0fce”, MODE=”0666″

・sun-java6-jdk(gingerbread), sun-java5-jdk(froyo以下)
jdkのインストール方法下記参照
http://source.android.com/source/initializing.html


(3)android 開発用ツールを入れる。

android-sdk_r11-linux_x86.tgz
http://developer.android.com/sdk/index.html

解凍して、/home/(user名)/android/、の下などに配置。
必要なPackageをインストールする。
tool/android update sdk
#adbだけ使う場合は、platform-toolsのみインストールすればよい

java切り替え(必要時)
sudo update-alternatives --config java


adbなどを64bit環境で使うために、
sudo apt-get install ia32-libs

パスを通しておく。
gedit .bashrc
PATH=${PATH}:${HOME}/android/android-sdk-linux_x86/platform-tools
再ログインもしくは、
source .bashrc
で反映。

2011年6月21日火曜日

IS01 CM4IS01インストール

DevRemax殿が公開されたCM4IS01をセットアップしてみました。
https://sites.google.com/site/cm4is01wiki/sosu-rom

最初音が出なかったり、無線LANが動かなかったりしていましたが、
・flash_imageをやり直したり
・VMwarePlayerの仮想Ubuntu経由でadb push ./system/ /system2/したり
しながら、書いてあるとおりにやっていったところ無事出来ました。

成功したのはLinuxからの説明書き通りの作業方法で、
Windowsからのadb接続でセットアップするのは簡単にはいかないようです。

<理由?>
system.tarの中身のファイルは、user,groupが1000,1000になっているため、
is01内でbusybox tar xvfで解凍するとowner情報がそのまま1000,1000になるぽい?
一方Linux上でsystem.tarを解凍した後は1000,1000だが、
それをadb push すると0,0(root,root)に変わります。
その結果正しく動作するようになるようです。

以前recoverykitで/system /dataを元に戻したときは、
IS01内部であるがままの状態をtarで固めて、tarで解凍したため問題ありませんでした。
あのファイルに入っているsystem.tarは、
androidをbuildした際に作成されるファイルそのままのようです。
あくまでadb pushしてroot.rootに変更されることを前提にしていると思われます。


本当か!?(・ω・;

2011年6月18日土曜日

recovery_kitで/system /dataを元に戻す

結構いじってた私のIS01。とりあえず、
  ・boot: nvsoft殿のrecoverkit1.3
・recovery: 仙石浩明殿のhackedkernel001?
の環境まで戻しました。

再起動をかけると無事recoveryから1.6が起動してきましたが、
よく見るとwifiが動かなかったり、微妙によくわからない状態になっていました。

そこで本題。
nvsoft殿のrecovery_kit 1.3を利用して環境を元に戻そう♪

<注意>
事前に、systemとdataのフォルダをバックアップしておく必要があります。
systemやdataをまるごとtarやtgz保存です。
http://jackov.blog98.fc2.com/blog-entry-28.html

ざっと読んでみて、意味が分からない場合はやらない方が吉です。
そして、すべては自己責任です(・ω・)ノ

<手順>
1.recoverykitを起動する。

2.adb shellで接続

3.systemとdataをマウントする。
mount_system
mount_data

4.systemとdataをからっぽにする←勇気がいる
#必要そうなファイルがある場合はexitして、adb pullして退避させる。
#まぁ、影響なさそうなファイルはそのままでも平気だけれど。

<注意>rm -rf は指定したフォルダの中身をすべて消します。
/system/bin/busybox rm -rf /system2
/system/bin/busybox rm -rf /data

5.一応空になっていることを確認
/system/bin/toolbox ls /system2
/system/bin/toolbox ls /data

/system/lost+foundが消えなかったが気にしない。。
それ以外を全部削除する。

6/19追記
Devrenax殿の記事より
https://sites.google.com/site/cm4is01wiki/sosu-rom

> busybox mkdir /data/ro
> /system/bin/toolbox mount -t yaffs2 /dev/block/mtdblock7 /data/ro
> busybox rm -rf /data/ro/*
これを忘れました。。
なるほど、xrecoveryなどでformat cache partitonってこれのことだったかな。

5.いったん/adbを抜ける
exit

6.system, dataのバックアップファイルを転送する
adb push (イメージのパス+イメージ名) /data

7.解凍とか移動とかして、/system, /dataを同じ構成に戻す

本来/systemのところが、recoverykitだと/system2になってます。
そのため、以下のような感じの対応で中身を配置します。
system.tar  → /system2
data.tar   → /data

tarとかcpとかは、/system/bin/busyboxから利用可能。
コマンドオプションなどは調べてください。

解凍例: data.tarファイルを、カレントフォルダ直下に解凍する(カレントフォルダ確認:pwd)
/system/bin/busybox tar xvf data.tar

移動例:
/system/bin/busybox cp -a /data/system/* /system2

解凍後に移動する場合は、cp -aを利用して、オーナーなど変更しないよう注意が必要です。


8.祈りながら再起動する。

exit
adb reboot recovery

うまくいくと、バックアップ前の状態で起動します。
私の場合、/dataのバックアップdata.tarの中の
・/dalvik-cacheの中身
   ・/cacheの中身
   ・アプリケーションのcacheフォルダ(webとyoutubeだったか?)
を7zipで開いて削除しておいたため、
起動までに5分ぐらい「IS01」ロゴが表示された停止したようになってました。
冷や汗をかきながら待ってましたが、少し心臓に悪いです・・・。



実はIS01の2台持ちで、片方開発遊び用、片方相方のWeb閲覧用になっています。
Web閲覧用からデータを取り出して、開発遊び用に移したのですが、きれいに環境が移せました。

さて、明日はaregeなツールを入れてみようかな・・・

2011年6月16日木曜日

IS01のrecovery_kitの起動と操作方法

私の環境ではbootにnvsoft殿のrecovery_kit 1.3を焼いています。
その操作方法の備忘録

(1)recovery_kit入りのIS01を起動する。

(2)左右逆になった注意マークが消えたらすぐに
Home → 電源ボタン
を「タタン」と微妙に時間差をつけて押す。

#1回目はキーが効かずそのまま通常起動してしまうかも?
#そういう場合は一度シャットダウン>起動して再度行うとキー入力できる。

(3)adbd recoveryを選んでクリック

(4)前回設定したadb shellで接続

(5)system, dataをマウントする
mount_system -> /system2にマウント
     mount_data        -> /dataにマウント

(6)/system/bin/toolboxを利用してディスクサイズ確認。

# /system/bin/toolbox df
/system/bin/toolbox df
/dev: 79192K total, 0K used, 79192K available (block size 4096)
/system2: 262144K total, 234980K used, 27164K available (block size 4096)
/data: 3611580K total, 471719K used, 3139861K available (block size 1024)

あれ・・・/data案外空いてる?(・ω・)
とりあえずrecoveryのところのcustom kernelを焼きなおして元の1.6が起動するようにするかなぁ。

焼きたいときは、
/system/bin/flash_image (イメージのパスと名前)

Linuxでよくつかうコマンド群は
/system/bin/toolbox
/system/bin/busybox
を利用する。