【HTC J】バッテリー100段階mod完成&公開

@koron393 さんのアドバイスによりようやく完成しました。
結論だけ言うと、「SystemUI.apk」の編集だけでOKのようです。

apkの編集を簡単に箇条書きメモを書いておきます。
使うのは、deodexしたSystemUI.apk  (deodexの必要性は未検証)

■必要な環境 :7za と java と apktool が入っている必要があります。

1.apktool_1.4.1.jar でdecomplie/complieする

(1) apkを展開

$ java -jar ../apktool_1.4.1.jar d -s SystemUI.apk

(2) 必要なxmlとアイコンを、SystemUIディレクトリに詰め込む
(drawableにstat_sys_battery*.xml、drawable-hdpiにbatteryアイコンを)

(3) build

$ java -jar ../apktool_1.4.1.jar b SystemUI

2.完成品を7zaで詰め込む

08/15更新:7zaで追加する場合は、resまるごと追加に変更。

$ cp SystemUI.apk SystemUI
$ cd SystemUI/build/apk/

$ 7za a -tzip -mx=0 ../../SystemUI.apk resources.arsc

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=C.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)

Scanning
Updating archive ../../SystemUI.apk
Compressing  resources.arsc      

Everything is Ok

$ 7za a -tzip -mx=0 ../../SystemUI.apk res

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=C.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)

Scanning

Updating archive ../../SystemUI.apk

Compressing  res/drawable-hdpi/stat_sys_battery_0.png      
Compressing  res/drawable-hdpi/stat_sys_battery_1.png      
Compressing  res/drawable-hdpi/stat_sys_battery_10.png      
Compressing  res/drawable-hdpi/stat_sys_battery_100.png      
Compressing  res/drawable-hdpi/stat_sys_battery_11.png

Everything is Ok

これで完成品が ../../SystemUI.apk にできるので、CWMなりで
pushしてあげればOK

ex)
$ adb pull /system/app/SystemUI.apk SystemUI.apk_bk
$ adb push SystemUI.apk /system/app/
$ adb shell chmod 644 /system/app/SystemUI.apk

$ adb shell ls -l /system/app/SystemUI.apk*

■Version S, Stock sense 

半透明ステータスバーだと色付きが似合わない??
SystemUI-stocksense
renameして使って下さい。

アイコン別のものを使用したい人は、このSystemUI.apkのアイコンを、
入れ替えるだけで簡単に作り変えが可能かと思います。

res/drawable-hdpi/ の下にアイコンいれて以下実行するだけ。
$ 7za a -tzip -mx=0 SystemUI.apk res/drawable-hdpi/stat_sys_battery_*
(上で公開しているのば充電時も100段階なので、それ以外の場合は最初から作り直しです)

■関連記事■

同じHTC Jでの対応方法を細かく書かれているのでこっちの方が、
分かりやすいかもしれません。

バッテリー残量100段階表示mod
http://d.hatena.ne.jp/korokorokoron/20120813#1344836654

2.05.970.3適用後のStockSenseアイコンです 更新@2012/10/13

作成しましたっ。⇒ SystemUI-2.05.970.3-Stocksense.zip

【HTC J】SystemUI.apkのdeodexメモ

HTC JのSystemUI.apkをdeodexした際のメモです。

BOOTPATHの指定が足りないと以下のエラーが出ます。

Error occured while loading boot class path files. Aborting.
org.jf.dexlib.Code.Analysis.ClassPath$ClassNotFoundException:
Could not find superclass Lcom/htc/fusion/fx/MessageListener;

これで詰まってる人がいるようなので、自分が行った方法をメモしておきます。

■必要なもの

・baksmali.jar/smali.jar (1.3.2で試しました)
・zipalign.exe (Android SDKに入ってます)
・7zip (7za以外でもOK)

■作業メモ

1.必要なものを端末からpull

$ mkdir framework
$ adb pull /system/framework ./framework
$ adb pull /system/app/SystemUI.odex
$ adb pull /system/app/SystemUI.apk

2.baksmaliでSystemUI.odexを展開

$ java -Xmx1024m -jar ./baksmali.jar -c :core.jar:core-junit.jar:bouncycastle.jar:\
> ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:\
> HTCDev.jar:HTCExtension.jar:filterfw.jar:com.htc.android.bluetooth.jar:wimax.jar:\
> usbnet.jar:com.orange.authentication.simcard.jar:com.htc.fusion.fx.jar:\
com.htc.lockscreen.fusion.jar -d framework -x SystemUI.odex -o systemui

良く分からないのでBOOTPATHは全部追加。
改行の説明とかは、deodex化するような人はわかるだろうから省略。

★上記BOOTPATHは、1.31.920.1 の場合です。バージョンが変わると
パスも変わるので実際は、/init.rcBOOTCLASSPATHを確認して指定して下さい。

3.dex化

$ java -Xmx1024m -jar ./smali.jar systemui -o classes.dex

4.classes.dexの統合

元々の classes.dex を削除して上書き。
7zipで SystemUI.apk 開いて、Drop&DrugでもOK

$ 7za d -tzip SystemUI.apk classes.dex
$ 7za a -tzip SystemUI.apk classes.dex

5.Zip alignment

$ zipalign.exe -v 4 SystemUI.apk zip_SystemUI.apk
Verifying alignment of zip_SystemUI.apk (4)...
54 META-INF/MANIFEST.MF (OK - compressed)
44743 META-INF/CERT.SF (OK - compressed)
91092 META-INF/CERT.RSA (OK - compressed)
92286 AndroidManifest.xml (OK - compressed)

$ mv SystemUI.apk SystemUI.apk.old
$ mv zip_SystemUI.apk SystemUI.apk

これでdeodex化したSystemUI.apk完成

6.CWMでファイル置き換え

元のファイルをrenameしたりmvしたりしてバックアップ。
deodex化したSystemUI.apkをいれて終了

$ adb shell mount /system
$ adb shell cp -pr /system/app/SystemUI.apk /system/app/SystemUI.apk.orig
$ adb shell mv /system/app/SystemUI.odex /system/app/SystemUI.odex.orig

$ adb push SystemUI.apk /system/app/
3328 KB/s (3508667 bytes in 1.029s)

$ adb shell chmod 644 /system/app/SystemUI.apk

再起動して、正常に起動したら完了。

★こちらで作成した、SystemUI.apkを置いておきます。⇒SystemUI.zip (1.31.920.1)
2012/10/10更新 2.05.970.3版はこちら⇒ SystemUI-2.05.970.3.zip

【HTC J】カーネルビルドのメモ

HTC J(ISW13HT)用のkernelソースが公開されたので、そのbuildを行った際のmemoです。

1.Kernel Sourceのダウンロード

http://htcdev.com/devcenter/downloads から Filter By で J を選択。
2012/08/01 時点では、valente_wx-ics-crc-3.0.8-5d86b4a.zip でした。

2.tool-chainの導入

Sourceのアーカイブ内にあるvalente_readme.txtに従って、tool-chain を git clone

$ git clone https://android.googlesource.com/platform/prebuilt 

※gitがインストールされていない場合は、まずgitを入れる。
各OSでyumなりapt-getなり適当に。

3.ログインシェルにPATHの設定

.bashrcに記載。bashじゃない人は適宜使ってるshellのプロファイルに
toolchainへのPATHを設定する。

$ cat .bashrc
PATH=/home/caplio/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

4.kernel Sourceを解凍したディレクトリ上で make config & make

$ cd valente_wx-ics-crc-3.0.8-5d86b4a
$ make valente_wx_defconfig
$ make -j2 2>&1 | tee `date +%Y_%m_%d_%s`_make.log

makeのログは後から見られるように保存しましょう。

最初は足りないpackageなどがあって素直にmakeが通らないと思うので、
makeが通るようになるまでは試行錯誤する感じで。

ちなみに、さくらVPS entryで make -j1するとこんな感じ。

real    27m42.127s ★リアル27分
user    21m36.171s
sys     2m45.152s

5.zImageからboot.imgの作成

zImageは、arch/arm/boot の下に作成されます。
このzImageにramdiskの中身引っ付けて完成です。

unpack/repack のツールはXDAにありますが、repackのスクリプトは、
mkbootimgの内容を変更しておく必要があります。

system ("mkbootimg --cmdline 'console=ttyHSL0,115200,n8' --kernel $ARGV[0]
 --ramdisk ramdisk-repack.cpio.gz --base 0x80400000 --ramdiskaddr 0x81800000
 -o $ARGV[2]");

編集済みのファイルを repack-htcj.zip として置いておきますね。
mkbootimg を PATHが通る場所に置いて下さい。

ramdiskは、OTAかRUUから取ってきましょう。

5-1 ドライバーのコピー

事前にOTAかRUU等からboot.imgを抜いてunpackしておきます。

$ unpack-bootimg.pl ./boot.img

 kernel written to ./boot.img-kernel.gz
 ramdisk written to ./boot.img-ramdisk.cpio.gz
 3162 blocks

 extracted ramdisk contents to directory ./boot.img-ramdisk/

ramdisk に system/lib/module のディレクトリを作成、そこに buildした
*.koファイルをコピーします。

ex) ~/initramfs/boot.img-ramdiskにramdiskを展開している場合

$ mkdir -p ~/initramfs/boot.img-ramdisk/system/lib/module
$ find -name '*.ko' -exec cp -av {} ~/initramfs/boot.img-ramdisk/system/lib/module \;
`./arch/arm/mach-msm/reset_modem.ko' -> `/home/caplio/initra・・・・
`./arch/arm/mach-msm/dma_test.ko' -> `/home/caplio/initramfs/・・・・
`./arch/arm/mach-msm/msm-buspm-dev.ko' -> `/home/caplio/in・・・・

★ 更新@2013/02/01 ★

HTC Jは、/system/lib/modulesに完成した*.koファイルを持っているため、
上の方法では、/systemが mountされた際に、buildしたモジュールが見えなくなり、
意味がない状態でした。

この為、boot.img-ramdisk/init.valentewx.rc にSYMLINKを追記して対応しています。
(homuhomu氏 の素晴らしい アイデアに感謝。)

参考:https://github.com/caplio/valente_wx-ics/commit/ab1b4864b69ec4b62537d980a772d712ed2dd3b0

5-2 boot.imgの作成

repack-bootimg.pl を使ってbootイメージを作成します。
zImageを予めramdiskと同じ場所に置いておきます。
例は、new.img として出力させる場合。

$ repack-bootimg.pl zImage boot.img-ramdisk new.img
8639 blocks

repacked boot image written at boot.img-ramdisk-repack.img

6. 起動

あとはfastbootから起動の確認して問題なければflashすればいいでしょう。

例)fastbootモードからbootテスト

$ adb reboot-bootloader
$ fastboot boot new.img
downloading 'boot.img'...
OKAY [  1.039s]
booting...
OKAY [  0.002s]
finished. total time: 1.041s

buildが問題なく通る様になったら、defconfigの設定を変えたりXDA見ながら、
他の人のソースをmergeしてみるとかチャレンジしてみると面白いですよ。

■更新@2013/02

htcdevのカーネルソースが更新されていない状況です。
新しく記事を更新していますので、こちらも参考にして下さい。

【HTC J】香港版のsourceをmergeした際のメモ

HTC J CWM経由でのOTA適用でFeliCaが使えない問題について。

自分だけかもしれないですが、CWMからOTAを適用した所、
FeliCa関連のodexファイルが正常に適用されず、
おサイフ機能が使えなくなる現象がありました。

確認すると、/system 配下に適用に失敗したファイルがcopyされて
いる状態に。

この溢れたファイルを root explorer 等から/system/app に上書きし、
端末を再起動することで回避出来ました。

やり方としては、OTA適用後の/systemの状態を確認して、
下の写真と同じ状況になっていたら、/system を R/Wでマウントで、
書き込み出来るようにしてから、/system/app へ上書きコピー
端末を再起動して完了です。

image

自分はこのやり方で直りました。

もし同じ状態になった方がいましたら、試してみて下さい。
(そして直ったらコメント下さい。

【更新】ddコマンドで直せる模様です。

例)

# dd if=/system/XXX of=/system/app/XXX
※XXXは対象のファイル名

【HTC J】アンロック済みのHTC JにOTA(firmware.zip)を適用するメモ #ISW13HT

某スレで話題になっていましたが、OTAの適用でunlockが出来なく
なるのでは?という噂が流れていたので、実際に試してみました。

■前提環境

適用前環境:初期バージョン(1.20.970.2)で、
HTC Dev経由でunlock済みな端末。且つ、CWM適用済みな環境。

【参考】fnojiさんのblog「適当に更新diary」より
au ISW13HT HTC J 公式アンロックを非公式で行う root化まで
au ISW13HT HTC J ClockWorkModの最新verが公開!(基本動作は可能に)

適用後のバージョン:1.31.970.1

■適用メモ

・OTAを、ダウンロードしておく。
(OTA_VALENTE_WX_ICS_40_KDDI_JP_1.31.970.1-1.20.970.2_release_268209_signed・・・.zip)

・relock → unlockをすると工場出荷時に戻されるので、事前に/dataをバックアップ
(CWMからか、$ adb shell su -c tar cvf /sdcard2/data-bk.tar data/ などで)

・CWMからinstall zipでsystem分だけ先に更新しておく。
→おサイフが使えない問題が出たらこちらへ

・ダウンロードしたZIPファイルから firmware.zip を取り出して、
 PK07IMG.zip に名前を変更する。

PK07IMG.zip を、/sdcard2の下にpushする。
($ adb push PK07IMG.zip /sdcard2/)

あとは淡々と。

$ adb reboot-bootloader

fastbootの画面でrelock

$ fastboot oem lock

fastboot画面に戻るので、BOOTLOADERを選んでPowerボタン

SDカードに入れたzipファイルが正しければ、
上の画面になるので、<VOL UP> を押して適用開始。

再起動がかかって、こんな画面が。
適用完了するとPOWERボタンを押すように促されます。

その後、起動に問題がなければ、
$ fastboot flash unlocktoken Unlock_code.bin
で、再度アンロック。

無事に適用が完了しました。と。
recoveryが上書きされてるので、CWMは焼き直しが必要です。

■結論

えふのじさんのサイトに記載されてる通り、一度SuperCidへ変更しておけば、
OTAの適用を行なっても、再度unlockは可能(都度バックアップ/リストアが必要ですが)

----------------------------------------

★追記:rootが解除される件★ 修正 8/20

OTAの適用時に、update-scriptを編集せずに適用すると、
/system/xbin 内のパーミッションが755に強制変換されて、
root化が解除されます。

これについては、OTA適用後、CWMリカバリーで起動して、
adb shellで以下パーミッションを変更すれば治ると思います。

$ adb shell mount /system
$ adb shell chmod 6755 /system/xbin/su