2011年3月2日水曜日

Desire(X06HT) deodexingする。 with Mac

使う範囲は非常に限定されるんですが、非常に便利ですのでメモとして残しておきます。

・.odexについて
    Androidには.odexというファイルが存在します。
    odexとは”Optimized Dalvik Executable"の事です。
    Android の Dalvik VM で実行可能な.dexを最適化したものが.odexなのです。
    つまり、odexファイルはVM環境に依存しているのでDalvik VM環境が違うと動作しないんです!(非常にめんどくさい)

・deodexの下準備
  ここで必要になるのは smali – Google Code にある baksmali.jarとsmali.jarです。
  この2種類のファイルを使用し、odexファイルをdexにします。

  ダウンロードしてきた
  ・baksmali-1.2.6.jarをbaksmali.jar
     ・smali-1.2.6.jarをsmali.jar
  にリネームしてください。            

・odexファイルをbaksmaliでdisassembleする。
  ここでdisassembleするには端末から/system/frameworkディレクトリが必要になります。
  ddmsのFile Managerあたりを使用してコピーしてきましょう。(odexが入っている端末のものを用意)
  • java -jar .../baksmali.jar -d .../system/framework -x aaa.odex
  ターミナルを使用しodexファイルのdisassembleが完了しました。

・smali.jarを使用してassembleする。
  •   java -jar .../smali.jar -o aaa.dex out 
    ホームフォルダ内にaaa.dexというファイルが作成されました。
    次にこのaaa.dexファイルをapkに投入します。

・対象となるapkにdexファイルを投入する。
   先ほど作成されたdexファイルをapkに投入しなければなりません。
  
   apkの正体は単なるzipファイルですので、拡張子をzipにし解凍します。
   解凍が終了したら中にある"META-INF"フォルダの内容をすべて削除してください。 

   また、先ほど作成したaaa.dexファイルを"classes.dex"にリネームし同フォルダにコピーしてください。
   すべての作業が終了したら再度apk化してください。

・apkに署名をする。
   このままでは署名がないため起動しません。
   apkに署名を行います。
  • keytool -genkey -dname "c=j" -keypass [ここに好きなpasswordを決めて入力] -keystore test.keystore -storepass [同様に] -validity 10000 -alias test -keyalg RSA
     これで署名するのに必要なkeystoreが出力されました。
  • jarsigner -keystore .../test.keystore -verbose .../aaa.apk test 
     先ほど出力したtest.keystoreでapkに署名をします。 
     コマンドを入力後に、先ほど決めたパスワードが求められます。入力してください。

以上でdeodexの完了です。apkを他端末にもインストールすることが可能になりました。
※deodexしてもその他に必要となるパッケージがある場合はそちらも移行しなければ使用できません。
   

0 件のコメント:

コメントを投稿