androidにプリインストールされたアプリのodexをbaksmaliでdeodexしてapkに収める方法 #androidjp
androidにプリインストールされたアプリを他機種に移植したりする際に、問題になるのが、odexです。
通常のアプリはapkファイルさえあればインストールでき、起動時にodexファイルを出力するのですが、プリインストールアプリの場合は、少し挙動が違い、もともとsystem/appフォルダにodexファイルを持っています。
これはプリインアプリの使用時にdata領域を圧迫しないように、との配慮なのだと思うのですが、問題は、このプリインアプリを別機種に移植しようと思ったときに起こります。
odexというのは、機種・バージョン固有のものなので、別の機種にそのまま移しても、動かないのです。
つまり、apkとodexファイルを別機種に移そうとしても起動はおろか、インストールすらできないという現象が起きます。
これは、本来はapkに含まれているはずのclass.dexが存在せず、apk外のodexしか持たないから、というのが原因です。
今回は、このodexをdeodexしてapk内にclass.dexとして戻す方法をご案内します。
※リソースが足りなかったりbuild.propで機種を判別したり、セキュリティがかけられているなど、この作業だけでは他機種では動かない可能性もあります。
※システムファイルを弄ることになりますので、失敗したり文鎮化する可能性もあります。自己責任でお願いします。
まず、端末側で必要なものは3つ
・apkファイル system/app内
・同名のodexファイル system/app内
・system/frameworkフォルダ内のファイル
この三つをPCをにコピーして用意します。
ファイルエクスプローラ系のソフトで圧縮して送ってもいいですし、androidSDKのインストールされている方ならadb pullでひっぱても構いません。
次に、PC側で用意するものは
・java JDK http://www.oracle.com/technetwork/jp/java/javase/downloads/index.html
・smaliとbaksmaliに関するファイル4つ http://code.google.com/p/smali/
・apk manager Apk Manager 4.9 – Makes Modifying Ur Apk A Breeze (Windows/Linux) – xda-developers
の三つです。
smali baksmaliはjarファイルなので、javaが動く環境が必要ですなので、JDKをインストール。
smaliとbaksmaliはhttp://code.google.com/p/smali/の左にあるFeaturedから4つのファイルをダウンロードし、
baksmali-1.2.6.jarとsmali-1.2.6.jarはそれぞれ使いやすいようにbaksmali.jar smali.jarとリネームしておきます。
さて、baksmaliをダウンロードしたフォルダに、odexを入れさらに/system/framework/とフォルダを作り、ここにframeworkフォルダの中身を置くいておきます。
すべてのプログラム→アクセサリ→コマンドプロンプトを右クリックして、「送る」→「デスクトップ(ショートカットを作成)」をすると、コマンドプロンプトのショートカットができます。
右クリック→プロパティ
作業フォルダを
”さきほどbaksmaliをいれたフォルダの場所”
に変更して、OK
このショートカットを起動します。
このように、コマンドプロプトが起動しますので、ここに以下のとおりコマンドを入力します。
java -jar baksmali.jar -d system/framework -x hogehoge.odex
hogehoge.odexの部分は、実際にdeodexしたいファイルの名前に置き換えてください。
しばらくまつと、outというフォルダが作られ、その中にjpだとかcomだとかというフォルダがひとつもしくは複数作成されます。このれがbaksmaliされたsmaliファイルです。これがclass.dexの中身となるファイル群が取り出せました。
次に、apkを分解する作業に入ります。
apkを分解すると、project/hogehoge.apk/フォルダ内に 「resフォルダ」、「AndroidManifest.xml」、「apktool.yml」の3つがあり(場合によっては他のフォルダがある時もあります、smaliフォルダが無いと思いますので、ここにsmaliフォルダをつくりさきほどのoutフォルダに生成されたjpなりcomなりをここにぶち込みます。
あとは、前回の記事同様、再コンパイル、再サインをすれば、完成です。
再コンパイルする過程で自動でsmaliフォルダがclass.dexに変換されますので、これで、odexとして飛び出ていたclass.dexをapk内に含めることができます。
以上、プリインストールされたアプfりのodexファイルをbaksmaliでdeodexしてapkに収める方法でした。
関連記事
-
-
Optimus3DのROOTを取得してみた #androidjp #optimus3D #LG #galaxys2
Optimus3Dのrootを取得してみました。 superoneclickで簡単に行けましたので、
-
-
CLOVEさんから輸入したLG Optimus 3Dが届いたよ 開封&ベンチマーク編 #androidjp #optimus3d #lg
デュアルコアCPU・デュアルチャンネル・デュアルメモリの世界初のトリプルデュアルかつデュアルカ
-
-
#galaxytabjp (SC-01C)を無料でSIMロック解除する方法キター? #androidjp #sc01c
GalaxyTabのSIMロックを解除する方法がj_importer ★個人で輸入してるよBLOG★
-
-
スマートフォンカフェの #SH12C auNAGOYAの #IS11SH #IS11CA #IS11S のquadrantベンチ結果とマルチタッチ点数まとめ #androidjp
スマートフォンカフェとauNAGOYAをはしごして新製品を触ってきました。7時に仕事が終わってから向
-
-
#IS05 のPC接続無しでスクリーンキャプチャ(スクリーンショット)を撮る方法 #androidjp
IS03と違い、IS05は標準でスクリーンキャプチャを撮ることができます。 その方法をご紹介します。
-
-
desireHD #001HT 2.3.3アプデの弊害 MMS.apkをjakemodに差し替えてもMMS受信がうまくいかない件 #androidjp #dhd
昨夜なんとか2.3.3にアプデート完了したDHDですが、各所で報告されてる再起動などの症状は起こって
-
-
GalaxySを2.3.3にアプデしてみました。ベンチ結果、rootやSIMフリー化、MMSなど気になることいろいろ試したよまとめ #galaxysjp #sc02b #androidjp
ドコモ版GalaxySを昨日2.3.3にアプデしました。 ベンチ結果、rootやSIMフリー化、
-
-
やっぱりiPhone5は4inchディスプレイ?中国から次世代iPhoneの液晶パーツ流出 #iPhone4jp
またまた中国から、新型iPhone5のデジタイザの部品が流出。 http://www.redmond
-
-
#SH12C のデュアルカメラで遊んでみたドン! その2 太鼓の達人&QB編
先週末発売した#SH12C 他端末のデュアルカメラを使ってミッフィにしてみる遊び #androidj
-
-
僕がgalaxyS(SC-02B)にXperiaArc(SO-01C)のHOMEアプリをインストールした理由 #galaxysjp #xperiaarc #androidjp #sc02b
今月末に発売予定のXperiaarcですが、そのHOMEアプリがxda上に公開されてました。 本来
Additional comments powered byBackType
Comment
This comment was originally posted on Twitter
【ブログ更新】 androidにプリインストールされたアプリのodexをbaksmaliでdeodexしてapkに収める方法 #androidjp http://bit.ly/iH83pL #kume_blog
This comment was originally posted on Twitter
初めまして。android機のプリインストールアプリをdeodexしようとご参考に拝見させていただいておりました。smaliファイルの生成まで行きapk managerにて再コンパイル後署名のところで躓いてしまっております。御助言いただけると幸いなのですが