国際版イメージを導入したSamsung Galaxy Nexus SC-04D で、
ドコモオリジナル機能を有効にした記録。
(要、事前バックアップ)

Android のアプリはDalvik VM という、
低メモリ環境に最適化された仮装マシンで動作する。
Dalvik VM で動くアプリはdex(Dalvik Executable)形式になっていて、
dex を端末に最適化したキャッシュファイルをodex(Optimized -) と言う。
アプリパッケージのapkにdex を含めると、
アプリ動作時にodex ファイルが生成され、odex ファイルが実行される仕組みのようだ。

プリインストールアプリは想定された環境でのみ動作すれば良いので、
apk にdex を含めず、apk+odex 形式で提供される場合が多い。
ところが、ユーザーが端末に手を入れてしまうと、こうしたアプリは途端に動作しなくなる。

そこで、odex からdex を再生成してapk に含めることで、
メーカーが想定した環境以外にもアプリを移植し易くする。(deodex)

事前に準備するもの

前述の通り、odex は環境に合わせて最適化されたファイルなので、
deodex したいアプリのodex とフレームワークのバージョンが異なると、
baksmali がエラーを出して展開できない。

deodex した場合、しない場合を比較すると、以下の特徴がある。

  • アプリの移植性が向上する
  • 正しくインストールする場合には再署名が必要
  • /data/dalvik-cache にodex が生成されるため容量を多く使う

以下は、国際版イメージを適用してドコモオリジナル機能が消えた後で、
バックアップからエリアメールとプッシュ通知マネージャをインストールした際の例。

CWM で/system をマウントして、以下の処理を行う。
まずはプッシュ通知ヘルパーの導入。

adb push MiniDcmWapPushHelper.apk /system/app/
adb shell chmod 0644 /system/app/MiniDcmWapPushHelper.apk

続いて、アプリのdeodex 化と導入。

for app_name in CellBroadcastReceiver WAPPushManager
do
    mkdir ${app_name} && cd ${app_name}
    cp -p ../../backup-ICL53F/system/app/${app_name}.{odex,apk} .
    if [ -f ${app_name}.odex ]; then
        java -jar ../../baksmali-1.3.2.jar -a 15 -o out -d ../../backup-ICL53F/system/framework -x ${app_name}.odex
        ../../smali -a 15 classes.dex out
        cp -p ${app_name}.apk ${app_name}.apk.orig
        jar uvf ${app_name}.apk classes.dex
        rm -f classes.dex ${app_name}.odex
    fi
    adb push ${app_name}.apk /system/app/
    adb shell chmod 0644 /system/app/${app_name}.apk
    cd -
done

純正状態と同様にapk+odex で使う場合は、通常起動した後で、
再度CWM を起動し、/system,/data をマウントして以下の処理を行う。

for app_name in CellBroadcastReceiver WAPPushManager
do
    cd ${app_name}
    adb shell mv /data/dalvik-cache/system@app@${app_name}.apk@classes.dex /system/app/${app_name}.odex
    adb shell chown root:root /system/app/${app_name}.odex
    adb push ${app_name}.apk.orig /system/app/${app_name}.apk
    cd -
done

ゴミ掃除をしたら完了。
という夢を見ました。おわり。

Android Hacks ―プロが教えるテクニック & ツールAndroid Hacks ―プロが教えるテクニック & ツール
株式会社ブリリアントサービス

オライリージャパン 2010-09-04
売り上げランキング : 163636

Amazonで詳しく見る
by G-Tools