[電話] apktoolでapkを弄り回す日々。そのいち
個人的に最近はやりの日本語化に必須ツールである apktool ですが、残念ながら apktool で作成した apk は署名されていない&test証明書では認証で撥ねられるのでXPERIA X10 mini pro で /system/app/ の置換えには使えませんでした。
さて、それではリソースの書き換えができないではないか?だがしかし、色々トライアンドエラーで調査してみると署名が必要なファイルとそうでないファイルがあるようです。ということで、元の apk の一部を書き変えるという現在の手段に落ち着きました。
まず apk はただの zip ファイルなので、7-zipなどのアーカイバで中を見ることが出来ます。
基本的な構造は以下のとおり
META-INF(署名ファイル)
res (画像などのリソースフォルダ)
AndroidManifest.xml (政権公約w)
classes.dex (プログラム部分)
resources.arsc (リソースのうち言語リソースなど)
で、res の中に画像ファイル(drawableフォルダ)とか画面の設計図(layout)など色々入ってます。圧縮率を見ると分かるんですが、注意点として拡張子が xml のファイルは圧縮されて(Deflate)て画像ファイルなどは圧縮されてない(Store)です。画像ファイルを圧縮するとそれだけでリソースが見つからない的なエラーログを吐いてアプリが起動しなくなります。
この状態で言語情報が入っている場所を探しても見つかりません。なぜなら、values フォルダは resources.arsc ファイルに格納されてしまっているからです。ちなみに res フォルダにあるファイルも画像ファイルはそのまま見ることができますが、xml ファイルは難読化?暗号化?されていてテキストエディタで見ても意味不明なバイナリデータになってます。
そんな apk ファイルをバラバラにしてくれる素敵なツールが apktool です。
下準備として /system/framework/framework-res.apk を adb pull してきて apktool にインストールします。
apktool if framework-res.apk
自分のユーザーディレクトリ以下に apktool/framework/1.apk とコピーされ、apk ファイルをdecodeするときに参照されるようになります。とても重要。
(追記)GalaxySの場合は追加でtwframework-res.apkを入れる必要があるかもしれません。
apktool if twframework-res.apk
これは自分のユーザーディレクトリ以下に apktool/framework/2.apk とコピーされると思います。
他の端末でも別途追加インストールが必要なファイルがあるかもしれませんがそこら辺は長年の勘と経験で乗り切りましょう。
あとは任意の apk ファイルを
apktool d Radio.apk
のように decode すると Radio フォルダに res フォルダとかいろいろできます。リソースをいじるだけなら -s オプションを追加してプログラム部分の逆コンパイルをしない方が処理が速いです。
java -jar %~dp0\apktool.jar d -s "%1" "%~dpn1" mkdir "%~dpn1"\original copy "%1" "%~dpn1"\original
こんな中身のバッチファイルを作ってファイルをドロップすると使えるようにすると楽ちんです。ついでに元のファイルも保持するようにすると失敗したときに面倒が減るのでそうしてます。
さて res フォルダを見てみると元の values フォルダと values-de とか各言語に翻訳されたフォルダがあります。日本語に対応していれば values-ja があるはずですが、あれば元々翻訳する必要がないので無いことが前提です。
では日本語に対応させましょう。
values-ja フォルダを新規作成して values フォルダから strings.xml と、あれば arrays.xml をコピーして、他の言語と比較しながら必要な行を翻訳していきます。values/strings.xml に存在して values-ja/strings.xml に無い行は元のがそのまま使用されます。なのでURLとか翻訳する必要がない行は削除してしまって問題ないです。編集したファイルは必ずUTF8で保存しましょう。
文字ばっかりで疲れたので続きはまた今度
ああ、そうそう。JRE入れろとかjavaのパスは通せとかそういう基本的なことは書いてませんが察してくださいね。
そのにに続く
[電話] XPERIA X10 mini proにOTAが来た
UK版に来てました。1.2.A.1.174すっかり日本語。
[電話] 赤XPERIA X10 mini proが来た
今回は1shopmobileで購入。香港方面から飛んできました。例によって袋。
[電話] Galaxy S I9000XFJM6入れてみた
すっかり日本語だった。
[電話] XPERIA X10 mini pro 休業のお知らせ
ちょっと framework-res.apk の英語と日本語以外いらないんじゃね?みたいにダイナミックな編集して書き換えたんですが、起動時にタイトル画面で止まってしまうようになりました。
やれやれ、またSEUSで元に戻すかといつものようにアップデートで修復をしようと思ったらこの有様.。
修復ボタンが無い!!?
糸冬。