froyo(android2.2)のビルドとインストールに取りかかって2日目。
一度sapphire用ビルドしたが、なんとなくダメそうだったので、諦め、dream用ビルドでもう1つROMを作成。
結局dream用ビルドも素直には入らず、端末側のブートローダを1.33.2005→1.33.2004にいじってから焼いた。
しかし、何分待ってもdocomoのロゴが消えない(=自分の予想では、ブート時にカーネル的な部分のロードに失敗しているので、永遠に起動しない)
dream用は諦め、ブートローダのバージョンさえいじればsapphire用を試しに焼くこともできそうだったので、ブートローダを1.33.0013にして、昨日作ったsapphire用ROMを焼く。
そしたら、ブートアニメーションすらない状態のROMだったが、起動した。
起動したことは起動したのだが、その後地獄のような展開に。
まず、USBを受け付けないし、fastbootモードも受け付けない。しかも、戻そうと思ってリカバリモードにしたら、Clockworkmodが消えていて、リカバリモードでも何もできない。
終わったかと思ったが、なぜか時間をおいたらfastbootもUSBも受け付けるようになった(?)。
肝心のリカバリモードは完全に消えてしまったらしく、ダメだったが。
それまでなぜか気付かなかったが、gingerbread(android2.3)の時のソースは、cyanogenmod(サイアノジェンモッド)のものだったのに、昨日ビルドしたfroyoのソースはgoogle純正。
僕が勝手にビルドした純正のROMは恐ろしいものだったらしく、入れただけでせっかくのカスタムされたリカバリプログラムが消されているし、その後普通ならうまくいくRoot化もなぜか弾かれる。/system/xbinのflash_imageも消されているし、それどころか、cpコマンドまで消えていた。
まず、リカバリプログラムを元に戻せば、バックアップで前のやつに戻せるはずなので、とりあえずリカバリプログラムを元に戻すために、flash_imageをもう一度入れようとするのだが、cpコマンドがないので、sdcardから/system/binにコピーできない。
(systemへの書き込み権限は
mount -o remount,rw /dev/block/mtdblock3 /system
で簡単に取得できるようだったが。)
cpがない場合、busyboxを入れればcpを使えるようになるらしいのだが、busyboxを入れようとすると失敗する。理由は分からない。俺ビルドの純正ROMがヤバい状態だったのかもしれない。root化の状態もおかしいんだろうかと思い、titanium backupや、UniversalAndrootなどのROOT化関連のapkで有名なやつを試しても全部エラー。
最終的に、cpを入れるのは諦めた。
mvはあるのだが、mvだとデバイス間移動はできないらしく、sdcardから本体のsystemにコピーしようとするとエラー。
そこでなんとなく、
cat /sdcard/flash_image >> /system/xbin/flash_image
として、catを使ってコピーしたら、なぜかいけてしまった。
後はなんとか、
flash_image recovery recovery-clockwork-2.5.0.7-sapphire.img
でリカバリソフトを復旧。後はclockworkmodから復旧した。助かった。
とりあえず、次は純正froyoじゃなく、 サイアノジェンモッドのfroyoをビルドしようと思う。
きっとそれならちゃんと動くのでは・・・なんつって。甘いかなあ。
コミュニケーション能力の低い(多くの人に人とまともに口が聞けない奴と思われてます(笑)実際そうかもしれませんが…。)ダメプログラマの日記です。 コンテンツは、ブログに書いたら何か意味があるかもしれない、ということや自分がおもしろいと感じたこと、興味があることですが、主にプログラミングやゲームやIT技術関連になるかもしれません…。
2013年4月29日月曜日
Froyoのビルド、ht-03aへの導入にトライ。そして、失敗。
ubuntu12.10 64bitで、
一昨日はjellybean(android 4.2)を、
昨日はgingerbread(android 2.3)を、
今日はfroyo(android2.2)をビルドしました(笑)
やっとほんの少しだけやり方が分かってきたかなー、くらいです。
最初は勉強でビルドしてみるか、くらいな感覚だったんですが、段々手持ちの実機(ht-03a)に突っ込まないと気が済まなくなっています。
jellybeanも、gingerbreadも、ht-03aに入れるには無理があったらしいので、やっとfroyoで普通に入れられそうに感じます。(実は、まだ入れてないんですけど)gingerbreadは、メモリ増強すればht-03aにも入るらしい(というか、自分でビルドしたバグだらけのgingerbreadだったらメモリ増強して昨日入れたんですが)ですが、やっぱりメモリ増強してまで無理に入れるとどこかおかしくなりそうなので、嫌です。
jellybean,gingerbreadは、一応大体同じ環境でビルドできたんですが、froyoは少し環境を変えないといけなかったようです。
それでも、jellybeanを最初にビルドした時の何も分かりません状態の時よりは作業が楽になりつつありますが。
今日の手順は、昨日一昨日(パニック状態)よりはちゃんと取りました(笑)
まず、ビルド。
1.repoでソースを落とす
設定
repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.2.3_r2.1
最後のandroid-2.2.3_r2.1がポイントで、そこがバージョンです。android-2.2.3_r2.1
ダウンロード
repo sync
2~4時間かかりました。ちなみに、syncはおそらくサーバのソースとの同期という意味なので、
レジューム可能です。一度中断したりもうダウンロードが終わっていたりした時に再実行しても、既に落としてある分を最初からやり直しで再ダウンロードしたりはしません。
2.makeのための環境変数をターミナルに設定?(多分)
source build/envsetup.sh
lunch full_sapphire-userdebug
source build/envsetup.sh
の方は、ビルド方法のリストを環境変数に格納するようなイメージなのかな、と今は思っている。
lunch full_sapphire-userdebug
の方は、 ビルド方法のリストの中から、1個を指定する感じなのかな、と。
sapphireの意味は、端末。僕の場合、ht-03aは、海外だとhtc sapphireと中身が同じようだと考えていたので(※)、sapphireを指定。これでht-03a用のビルドになると思われる。
(※ここが、重大です。違うんです。ソースにはdreamとsapphireとpassionがあったんですが、おそらく、ht03aはdreamなのではないかと今思っています。)
userdebugの意味は、ここ
の、TARGET_BUILD_VALIANT。
要は、リリースビルドかデバッグビルドかの指定みたいなものかと。
3.ビルド
make -j2
オプションjの後にCPUのコア数を指定する。
多分、この場合2スレッドでのビルドになる。 多分1スレッドよりはずっとビルドが速い。
----------------------------------------------------------
ここまでが、昨日までで覚えたことだったのだが、今日は昨日の環境で、ソースだけFroyoのものに変えて3を行うと、エラーが起きた。まあ、今日出たエラーは昨日一昨日よりは簡単に解決したけれど。
[1]javaのバージョンがFroyo対応ではない
You are attempting to build with the incorrect version
of java.
Your version is: java version "1.6.0_45".
The correct version is: 1.5.
→見た目通り。javaのバージョンが、1.6じゃなくて、1.5じゃなきゃダメと言われている。
gingerbread以降ではJDK6で良かったが、FroyoではJDK6ではダメ。
とても苦労したが、環境のjavaのバージョンをJDK5に変えてとりあえずこのチェックは抜ける。
もうgingerbreadはビルドできないかも。
makeファイルを書き換えて解決という人もいるみたいだけど、個人的には、こういう場合、意地でもソースの修正より環境で解決するべきと考えます。
Java SE Development Kit 5.0u22
->jdk-1_5_0_22-linux-i586.bin(32bit用)
→しかし、実は、64bit用のやつ( jdk-1_5_0_22-linux-amd64.bin)があり、
僕の環境の場合、そちらを使うべきだったので、後述するが、最後のエラー[3]はそれで出た。
[2]GCCのバージョンが新しすぎて(?)エラー
エラーの内容は保存しなかったし、最初のバージョンが何だったかすら分からない(おそらく4.6よりは新しい)のだが、
FroyoのビルドはGcc4.4じゃないとダメらしい。
最初のエラーでは、4.6より前じゃないとダメと言われたので、4.6に変えて通過。
次のエラーでは、4.4じゃないとダメと言われて、さらに4.4に変更。
まあ、javaのバージョンを変えるよりはずっと楽です。
実は、javaのバージョンを変える時には元々あったjavaを全部消したので、Eclipseが死にました。
まあそんなのは(多分)インストールし直せばいいのでいいんですけど。
ubuntuでは、javaのバージョンの切り替えは、
update-java-alternatives
と言うコマンドで、
gccのバージョンの切り替えは
update-alternatives
と言うコマンドで一発でやってくれるらしく、少し感動しましたが、残念ながら、おそらく現在(2013/4/29)
update-java-alternatives
で切り替えられるのは、java6以降であり、java5には対応していないように感じました。
gccの方は使わせてもらいましたけど。
この辺で、2の前に、自分のht-03aの資産をソースにコピーした方した方が良いように感じ、
(昨日、それで超ハマったので)USBでht-03aをつなぎ、adbが効く状態にしてから、
/device/htc/sapphire/extract-files.sh
を実行。無事にht-03aからソースに何かをコピーしたようです。何をコピーしたかは知りません(TT)
でも、この後deviceのファイルがないとかいうエラーが出なかったのはこれのお陰かもしれない。もしかしたら。まあ、先にやってしまったので分からないんですが。エラーが出てからやれば良かったかも。
[3]Could not load 'clearsilver-jni'
[out/target/common/docs/api-stubs-timestamp] エラー 45
Could not load 'clearsilver-jni'とかでググると結構ヒットする。(ほとんど英語ですが)
割と有名なエラーなのかもしれない(笑)
英語はあまり読めないけど、日本語のサイトではjava5のバージョンが64bitだと起こり、32bitだといけるという人がいた。
しかし、僕のjava5は32bitで、エラーが出ている。
英語のサイトだと、逆に32bitじゃなく64bitじゃないと起こるエラーだと言う人もいるように感じる。
そして、OSが64bitなら64bitのjavaじゃないとダメ、という英語の書き込みのある掲示板があった気もする。
とりあえず、それを信じてjava5を64bitのやつに変えたら、これも通った。
後は最後まで行きました。
途中止まりすぎてビルド時間は全然分かりませんけど、4時間くらいでしょうか。
------------------------------------------------------------
次に、実機に入れる作業
(1)make -j2 otapackage
これで、out/target/product/sapphireに、
full_sapphire-ota-eng.僕のユーザ名.zip
というzipができる。これがROM。
(sapphireに作成されるのは、これがsapphire用ビルドだからだと思われる)
(2)adb push full_sapphire-ota-eng.僕のユーザ名.zip /sdcard/
で、sdcardにROMをコピー
(1)まで終われば、androidのROM焼きをやってる人なら、どうにでもできるはずです(笑)
----------------------------------------------------------------
●ht-03aはhtc sapphireと互換性があると思っていたんですが、htc sapphireではありませんでした。froyoのソースに用意されていたのは、dreamとsapphireとpassionですが、多分(それも、多分ですが)ht-03aと互換性があるのはdreamでしょう・・・。
ROM焼き時に「書き込めませんよ!」ってチェックに引っかかってしまいました・・・。
それでもなんとかなりそうなら
ROM内のupdater_scriptのチェック部分を外して焼くんですけど、
ROM内のupdater_scriptを見て諦めました。
assert(getprop("ro.product.device") == "sapphire" ||
getprop("ro.build.product") == "sapphire");
assert(getprop("ro.bootloader") == "1.33.0011" ||
getprop("ro.bootloader") == "1.33.2011" ||
getprop("ro.bootloader") == "1.33.3011" ||
getprop("ro.bootloader") == "1.33.0013" ||
getprop("ro.bootloader") == "1.33.2013" ||
getprop("ro.bootloader") == "1.33.3013");
の、sapphireかどうかのチェックはいいんですが、bootloaderのチェックは昨日散々ハマった所です。
このbootloaderの番号は、よく覚えているんですが、メモリ増強後のht-03aのやつが1.33.0013dで、1.33.0013とほぼ同じです。
多分、メモリを元に戻してしまったので、もう動かない系のROMじゃないかと思います。
昨日もgingerbreadのROMが1.33.0013や1.33.0013dかどうかチェックするROMだったのですが、それをメモリ増強してない状態で(その時は、1.33.0006だったかな?)チェックだけ外して無理やり焼いて動かしたら、20分くらいは起動せず、結局起動しないまま諦めたので多分それと同じな気がします。
また明日、設定をdreamにしたビルドでやり直しです。
きっとまた4時間かかりますから。今日(つってももう明日か)はもう無理です。
2013年4月28日日曜日
gingerbreadビルド&ht-03aへの導入
おとといなんとか初めてandroid(4.2.2)の自力ビルドに成功し、実機で試したいと思って
手持ちのht-03aに自力ビルドのandroidを入れようと思いながら早2日。
色々大変です。
1.android4.2.2はht-03aには入らない。ネットを検索してもそういう例がないみたい。
2.仕方ないので、gingerbread(android2.3?)のソースをダウンロード。
3.ビルドが通らない。
(1)よく分からないのだが、そう書いてあるサイトもあったので、makeの前に、
としてから、makeしていた。
しかし、後述するが、これではht-03a用のmakeでなく、汎用のmakeになるのかもしれない。
とりあえず、俺にはよく分からないが
“device/htc/ace/ace.mk”がありません
みたいなのが出てエラーになるので、それで検索。
http://csidiropoulos.wordpress.com/2012/11/06/devicehtcaceace-mk-does-not-exist-stop-cyanogenmod/
このページを発見し、しばらく意味が分からず考えるが、要は、
ソースフォルダ/vendor/cyanogen/products/AndroidProducts.mk
に、対応する全てのデバイス用のmakeファイルが書かれているので、自分に必要ない部分は消せばいいと書かれていると思われた。
そこで、 AndroidProducts.mkから、ht-03a(dream_sapphire)以外の記述を全部削除。
しかし、それでもビルドは通らない。(htc aceのmakeの記述は消したので、内容は下記みたいな感じ)
“device/htc/dream_sapphire/full_dream_sapphire.mk”がありません。
これはおかしいと思い、device/htc/フォルダを見るが、dream_sapphireというフォルダがない。
他のデバイスのフォルダもないように見える。
ソースのダウンロードの仕方がまずかったのか、もしくは、元々別にダウンロードしなければならないのかはよく分からないが、しばし考えて、とりあえずここだけダウンロードしてくればいいのかなと思い、ネットからdream_sapphireのソースと思われるものをダウンロード。
https://github.com/cyanogenmod/android_device_htc_dream_sapphire
落としたソースはなんとなく良さそうだったので、フォルダ名をさっきエラーが出ていたdream_sapphireという名前に変えて、device/htc/に置く。
そして、make。通った。
しかしその後、
http://yueno.homeip.net/xoops/modules/xpwiki/?%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%2FHT-03A%2FAndroid%2Fandroid%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB&word=
を見て、ht-03aをPCにUSBにつないでadbが通る状態にした上で、
(2)make otapackageがエラーになる。
とりあえず、makeが終わったので、それを実機に突っ込みたい。
make otapackage
とやると、パッケージ化してくれるという記述を発見したが、そうやってもパッケージがないと言われるエラーになる。
そして、またgoogleで調査していた所、lunchでfull-engを選択すると、otapackageには対応しないという記述を見つける。
それを見て、よく分からないけど、make前のlunchでht-03a用の設定にしていないから、ht-03a用のモジュールがビルドされていないのではないかと思いつく。
他のサイトで、
次は
lunch full-eng
を、
手持ちのht-03aに自力ビルドのandroidを入れようと思いながら早2日。
色々大変です。
1.android4.2.2はht-03aには入らない。ネットを検索してもそういう例がないみたい。
2.仕方ないので、gingerbread(android2.3?)のソースをダウンロード。
3.ビルドが通らない。
(1)よく分からないのだが、そう書いてあるサイトもあったので、makeの前に、
. build/envsetup.shlunch full-eng
としてから、makeしていた。
しかし、後述するが、これではht-03a用のmakeでなく、汎用のmakeになるのかもしれない。
とりあえず、俺にはよく分からないが
“device/htc/ace/ace.mk”がありません
みたいなのが出てエラーになるので、それで検索。
http://csidiropoulos.wordpress.com/2012/11/06/devicehtcaceace-mk-does-not-exist-stop-cyanogenmod/
このページを発見し、しばらく意味が分からず考えるが、要は、
ソースフォルダ/vendor/cyanogen/products/AndroidProducts.mk
に、対応する全てのデバイス用のmakeファイルが書かれているので、自分に必要ない部分は消せばいいと書かれていると思われた。
そこで、 AndroidProducts.mkから、ht-03a(dream_sapphire)以外の記述を全部削除。
しかし、それでもビルドは通らない。(htc aceのmakeの記述は消したので、内容は下記みたいな感じ)
“device/htc/dream_sapphire/full_dream_sapphire.mk”がありません。
これはおかしいと思い、device/htc/フォルダを見るが、dream_sapphireというフォルダがない。
他のデバイスのフォルダもないように見える。
ソースのダウンロードの仕方がまずかったのか、もしくは、元々別にダウンロードしなければならないのかはよく分からないが、しばし考えて、とりあえずここだけダウンロードしてくればいいのかなと思い、ネットからdream_sapphireのソースと思われるものをダウンロード。
https://github.com/cyanogenmod/android_device_htc_dream_sapphire
落としたソースはなんとなく良さそうだったので、フォルダ名をさっきエラーが出ていたdream_sapphireという名前に変えて、device/htc/に置く。
そして、make。通った。
しかしその後、
http://yueno.homeip.net/xoops/modules/xpwiki/?%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%2FHT-03A%2FAndroid%2Fandroid%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB&word=
を見て、ht-03aをPCにUSBにつないでadbが通る状態にした上で、
cd ~/android/system/device/htc/dream_sapphire/ ./extract-files.sh
とやると、繋いだht-03aの資産をそのフォルダに持ってきてくれるらしいということが判明し、
一応その通りにした。
(2)make otapackageがエラーになる。
とりあえず、makeが終わったので、それを実機に突っ込みたい。
make otapackage
とやると、パッケージ化してくれるという記述を発見したが、そうやってもパッケージがないと言われるエラーになる。
そして、またgoogleで調査していた所、lunchでfull-engを選択すると、otapackageには対応しないという記述を見つける。
それを見て、よく分からないけど、make前のlunchでht-03a用の設定にしていないから、ht-03a用のモジュールがビルドされていないのではないかと思いつく。
他のサイトで、
lunch cyanogen_XXX-eng
みたく指定しているサイトがあったので、
次は
lunch full-eng
を、
lunch cyanogen_dream_sapphire-eng
に変えてみた。これで、dream_sapphire(=ht-03a)用の設定になってくれたのではないかと期待。
その後makeしたら、ある程度までビルドは通ったが、またエラー。
out/target/product/dream_sapphire/obj/lib/libgps.soがありません。
みたいな感じ。
またgoogle検索し、今度は、
http://forum.cyanogenmod.org/topic/38769-cm72-bugs-and-other-issues/
を見て、よく読めないが、多分
vendor/htc/dream_sapphire/proprietary/の
libgps.so
libcamera.so
を、
out/target/product/dream_sapphire/obj/lib/ out/target/product/dream_sapphire/system/lib/
辺りにコピればいいと書かれているように見える。
それgpsとcameraのビルドをあきらめて、元の資産を使うって意味だよね・・・と思いつつも僕のその通りにする。
その後ビルドすると、今度は
undefined reference to 'openCameraHardware'
でエラー。
それもさっきのサイトに載っていて、
device/htc/dream_sapphire/BoardConfig.mk
USE_CAMERA_STUB := true
を
USE_CAMERA_STUB := false
書き換えればよいらしいので、そうする。そしてビルドは通り、
make otapackageにも成功した。
これでht-03aで動くんだろうか。
(3)ht-03aに突っ込む
rom書く所で見事にエラー。
検索すると
http://cielsomer.blog.fc2.com/blog-entry-214.html
の
③.しかし、エラーが出て焼けない。
と同じような現象だが、何か全然違うな気もする。
日本語だからなのか、親切なブログだからなのか、回避策が読みやすい。
僕のは
assert(getprop("ro.bootloader") == "1.33.0013" ||
getprop("ro.bootloader") == "1.33.2013" ||
getprop("ro.bootloader") == "1.33.3013" ||
getprop("ro.bootloader") == "1.33.0013d");
でエラーだが、
リンク先のやつは、ro.product.device。
何か別物だったらどうしよう、と思いつつ、update_scriptからその記述を削除。
しかし、今度はupdater_scriptが編集されているので、Wrong digest(おそらく、zipが不正)となり、エラー
http://androidlover.net/smartphone/galaxynexus/custom-myupdate-zip.html
を見ながら、ファイルが壊れるのは7zipじゃないubuntu標準のアーカイバを使っているからではないかと思い、
ここでついにubuntuを諦めて、Windowsへ移動。
しかし、Windowsだろうが7zipだろうが、zipの中身を書き換えたら同じことが起こる。
ネットを調べると、リカバリツールによっては、チェックを無効に出来るとのことだったが、
僕の使っていたリカバリツールは RA sapphireで、RA sapphireではチェックを無効にすることはできないらしい。
そこで、リカバリツールをClockworkModeに変更。
すると、チェックされずにinstallできたが、今度はいつまで待ってもdocomoのロゴが消えてくれない。
理由はさっぱり分からず、色々試行錯誤しながら4時間くらい経ったとき、
下記のサイトの下記の記述を閲覧させてもらっている時に、
しばらく経ってやっとその意味を理解する(まあ、おそらくそのまんまの意味なんですが)。
http://diary.cyclekikou.net/?p=5673
>まず、最も重要なことはradioとSPLを新しいものに入れ換えないとインストールできないということです。以前はCyanogenMod-6.1.0 >を使っていましたが、その時のままGingerbreadを入れようとしてもインストール時にエラーが出てできませんでした。
僕のSPL(とは何なのか、未だによく分からないけど)は1.33.0006。
そういえば、さっき、1.33.0013等じゃないのでエラーですってなっていた。
弾かれてるのを無理やりチェックをはずしてインストールしたけど、
やっぱりそのチェックを入れるのは正しかったということなのでは・・・。
そして、1.33.0006→1.33.0013dにバージョンアップする方法があり
(それが、割と有名らしいメモリ増量というやつらしいのだが)、
それをやらないとgingerbreadをht-03aに入れることはできないっぽい。
そういうわけで、僕もht-03aをメモリ増量することになった。
そして、今、なんとかgingerbreadのインストールまで行きました。
とにかく自分でビルドしたやつを実機に入れたかっただけなのに、超苦労してしまいました。
カメラを使うと落ちるし(それは心当たりがあるのでいいけど)、
音楽アプリとロック画面は変ですし(画像参照。文字化けはいいけど、「
OK」って何?)、
googleアプリは入れてないですが(なので、カメラと同じくらいやばそうなgpsも試してない)、
他は概ねよさげでした。
とりあえず、入れといてあれですが、メモリ増量する事自体気に入らないので、gingerbreadは諦めて、
froyoか2.1にしようかなと思います。
登録:
投稿 (Atom)