【文鎮上等!】#xperiaのframework-res.apkを弄くってみるw

やり方がわかれば、そうでもないんですが、こいつを触って、もう何度も文鎮になりました。あせって操作ミスって、初期化からしなおしたりもw

とりあえず、ありがちなバッテリー100%表示を、まぁ、便利なツールもありますが、自力で弄くりますw

Apk Managerというツールをxdaから入手します。(お世話になりますです。xdaの方々)

これは、?.apkというファイルを分解して、ふたたび?.apkというファイルを作成するというツールで、

この、分解と作成の間で、弄くります。

ダウンロードしたファイル(執筆時点ではバージョン4.9)を適当なフォルダに展開します。

で、framework-res.apkをplace-apk-here-for-moddingというフォルダに入れます。(弄くりたい?.apkはここに入れる)

次に、コマンドプロンプトを起動して、展開したフォルダにディレクトリチェンジ!

そして、scriptと打ち込んでリターンキー!

[bash]
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation.? All rights reserved.

C:\Users\hoge>G:

G:\>cd Xperia\apk_manager_4.9

G:\Xperia\apk_manager_4.9>Script
[/bash]

すると、こんな画面がw

まず、メニューで22を入力して

[bash]
– 1? – framework-res.apk

Choose the app to be set as current project?
Enter It’s Number:
[/bash]

と出てくるので、1を入力。

次にメニューで9を選択。

しばらくすると、メニュー画面に戻ってきます。このとき

projectsというフォルダの中に、framework-res.apkというフォルダができているはずです。

そのフォルダの中は、こんな感じ

これが、分解された状態です。

ここで、バッテリーの画像データと、100%表示に必要なxmlを入手します。

ここでも、xdaにはお世話になりますが、ここにいっぱいありますw

で、問題は画像だけ追加してもだめですw

xdaで拾ってきた画像zipを展開すると xmlファイルと画像データがあるはずです。

framework-res.apkフォルダの中にresというフォルダがあり、これを開くと

こんな感じですが、drawable-hdpiというフォルダに、100%表示用の画像を全部コピーします。
100%表示は画像データを追加します。(既存のデータを変更するだけなら、自分で絵を書くなりして変更してね。)

次に、これが重要で、drawableというフォルダに、stat_sys_battery.xml と stat_sys_battery_charge.xml を上書きコピーします。

この2つのファイルに、それぞれバッテリの残量表示のアニメーション(っていうのか?)、充電中のアニメーションの画像をどう表示するかが書かれています。

あと、これしなくてもいいみたいなんですが、厳密には、valuesというフォルダにあるpublic.xmlも変更すべきだと思いますが、多くは語りませんw(まぁ、しなくても大丈夫なので…)

ここまでが、弄くりです。

さて、仕上げですが、コマンドプロンプトのウインドウに戻りますが、メニューの19番を選んで0を入れます。(初期値は最高の9)

これは、apkを作成する時にどのぐらい圧縮するかを表すのですが、圧縮すると動きません!危険!バッテリー100%以前に文鎮100%ですw

なので、圧縮しないという意味の0を入れます。

そして、メニューの12番を選び、しばらく待つ…

[bash]
Please make your decision:11
Building Apk
Is this a system apk (y/n)
Type input: y
Aside from the signatures, would you like to copy
over any additional files that you didn’t modify
from the original apk in order to ensure least
# of errors (y/n)
Type input: y
[/bash]

Yes、Noを2回聞いてくるので、今回は2回ともyを入力、そしてしばらくすると

[bash]
Everything is Ok

Files: 1716
Size:?????? 11663811
Compressed: 10498578
In the apk manager folder u’ll find
a keep folder. Within it, delete
everything you have modified and leave
files that you haven’t. If you have modified
any xml, then delete resources.arsc from that
folder as well. Once done then press enter
on this script.
続行するには何かキーを押してください . . .
[/bash]

と出ますが、ここで、「まだ、何かキーを押さないでくださいw」

Apk Managerを解凍したフォルダに戻ってみると、keepというフォルダができていると思います。

弄くる前のframework-res.apkの中身です。

で、その名のとおり、keepしたいもの(変更したくないもの)はそのままにし、変更したいものを、このフォルダの中から消します。

今回弄くった結果で、resources.arscというファイルとresというフォルダの中身が変わりますので、この2つを削除します。(resはフォルダごと削除)

そして、「何かキーを押してください」

そうすると、place-apk-here-for-moddingフォルダ(最初にframework-res.apk入れたところ)にunsignedframework-res.apkというのができています。

しかし、ここで問題です!ちょっと前に圧縮しないって指定をしたにもかかわらず、resources.arscが圧縮されているw

7-zipとかのツールで見るとわかります。

なので、無圧縮にします。

unsignedframework-res.apkからresources.arscを削除

[bash]
>7za d -tzip unsignedframework-res.apk resources.arsc
[/bash]

で、無圧縮で追加

[bash]
>7za a -tzip -mx=0 unsignedframework-res.apk resources.arsc
[/bash]

となります。

7za.exeはotherというフォルダの中にあります。

resources.arscはprojectsフォルダのframework-res.apkフォルダの中のbuildフォルダの中にあるapkフォルダにあります。

7za.exe、unsignedframework-res.apk、resources.arscという3つのファイルを1箇所に集めたらやりやすいですね。

後は、adbでXperiaに送り込みます。

[bash]
>adb push unsignedframework-res.apk /data/local/tmp/framework-res.apk
>adb shell
$ su –
# <code>mount -o remount,rw -t yaffs2 /dev/block/mtdblock2 /system
# dd if=</code>/data/local/tmp/framework-res.apk of=/system/framework/framework-res.apk; chmod 644 /system/framework/framework-res.apk
[/bash]

勝手にリブートします。

xRecoveryを立ち上げ、cacheのクリア、Advanced optionsからdalvikvmのcacheをクリア

そして、再起動!

ふぅ…疲れたw まぁ、俺の備忘録に。このファイル(framework-res.apk)で、ロック状態の時計とかも弄くれそうw

1回やっておけば、次からは、画像データの差し替えだけでOK

「【文鎮上等!】#xperiaのframework-res.apkを弄くってみるw」への8件のフィードバック

  1. いつも参考になる情報ありがとうございます
    なかなか手をだせずにいましたが思い切って
    xperiaはroot化,busybox,xrecorvaryまで終了
    pcにandroidSKDインストール(path設定ok)で
    adb shellを入力すると
    #でなく$が表示されます
    このままで続けてもいいでしょうか
    ご教授いただきたくよろしくお願い致します

    1. いや、だめです。
      $のところに su と打ち込んでENTERキーを押すと、#に変わります。
      こんなかんじですかね?

      $
      $ SU [ENTERキー]
      #

  2. goroさん、いつも非常に助かっております。すべて自己責任で参考にしています。
    apk tool にてどうもうまくビルド出来ずに、右往左往中です。。
    ログを見てもよくわからず、
    I: Loading resource table…
    I: Decoding resources…
    W: Cant find 9patch chunk in file: “drawable-hdpi/btn_keyboard_key_pressed_on.9.png”. Renaming it to *.png.
    W: Cant find 9patch chunk in file: “drawable-hdpi/status_bar_close_on.9.png”. Renaming it to *.png.
    W: Cant find 9patch chunk in file: “drawable-hdpi/btn_media_player_disabled_selected.9.png”. Renaming it to *.png.
    W: Cant find 9patch chunk in file: “drawable-hdpi/statusbar_background.9.png”. Renaming it to *.png.
    W: Cant find 9patch chunk in file: “drawable-hdpi/btn_keyboard_key_normal_on.9.png”. Renaming it to *.png.
    から始まり、後はis not defined の嵐。。
    難しいですね、改造は。だからこそ、成功した時の喜びがひとしおなのですが。
    もし宜しければ、お知恵をお貸し頂けませんでしょうか?
    長文、誠にすみません。

  3. 9patchファイルが壊れてるんじゃないですかね?
    apktoolじゃなくて、7zipとかでファイルを開けば、画像は無圧縮で入っているはずなので、警告の出ているファイルを抜き出してから
    SDKにdraw9pathってコマンドがあるので、表示させてみてください。
    9patchファイルは弄くったことないんですよねw

    1. ありがとうございます。
      9patchは何も弄っていなかったのですが、apktoolでの過程で何かしらpatchが壊れたのかも知れませんね。
      SDKで確認してみます。

  4. あれから、9patchツールで確認してみましたが、壊れた様子もありませんでした。
    apktoolログを読み返して、僕なりに何となく、”public.xmlで定義されていませんよ!”と言われている感じがします。is not defined で表示されているファイルは確かにpublic.xmlに存在していなく、デコンパイルして、バッテリー表示の画像とxmlを差し替えただけなのに、どこにいったのだろう??ってな感じです。
    ログで怒られている内容から、やはりpublic.xmlもちゃんと改造しないといけないのでしょうか?
    長文になってしまいますので、ログをUPしていますが、お手すきで可能であれば、ご査収頂けると幸いです。
    http://www.mediafire.com/?oy1bzwzw2r2c82z

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です