40代おやじのPS3に関するブログです。





[Android] apkの中身を見てみる その3
  Android / 2011-11-02 09:17:47
  昨日の続きです

・assets

アプリ用の外部プログラム等が入っている所。
入れる物に縛りは無いので設定ファイルなんかが入っている場合もあります。
ROM Managerの場合はbusyboxとかが入っていますね。

・libs

ROM Managerにこのディレクトリは存在しませんが
アプリ用のライブラリが入る場所です。
AndroidのアプリはJavaで作られていると書きましたが
高速化を図る為、Cで作られたライブラリが使用できます。

・smali

これもapkをzip解凍した時には無かったディレクトリですが
このアプリの肝、Javaのクラスファイルに当たるclasses.dex
を逆コンパイルしたソースが入っています。
Javaとアセンブラを足した様なsmaliという言語で出力されます。
又、こいつの事を「逆アセンブラする」と説明しているサイトが多々ありますが
classes.dexはマシン語じゃありませんし、出力もアセンブリコードではないので誤りです。
(でも、smaliの作者は「逆アセンブラ」と記載しているんですよねw)

このコードを弄ればアプリの改造が出来るのですが
smaliの言語仕様に関する情報が殆ど入手出来ないので
自力で解析する必要があります。
Javaが書けてアセンブラのレジスタの考えを知っていれば何とか解るかな?

ディレクトリをのぞくとa.smaliとか良く意味の分からないソースが大量にありますが
AndroidManifest.xmlに記載されていない内部的に使用するクラスは名前解決が出来ないので
こんないい加減なクラス名になってしまうんです。
規模の大きなプログラムは追っていくだけで大変なので余り触りたくないですね。

・apktool.yml

apktoolの処理結果が出力されるファイルっぽいですね。
展開時にフレームワークを使用したかどうかとかが載っています。


ここで話が出たのでフレームワークに関する事もちょっと記載しておきます。
このapktookはアプリだけじゃなくてsystem配下のapkも展開できるのですが
(apk + odexの構成になっているリソースの場合は当然ながらsmaliは出力されません)
物によってframework-res.apkの中身を参照している場合があります。
apktoolではこいつらを正常に展開する為にframework-res.apkを事前登録しておく事を
install-frameworkと表現しています。

端末のframework-res.apkを引っこ抜いて来て

apktool.bat if framework-res.apk

同様にHTC系のapk場合はcom.htc.resources.apkを参照している場合があります。

端末のframework-res.apkを引っこ抜いて来て

apktool.bat if com.htc.resources.apk

展開時にエラーになる場合は試してみると良いかも。


apktoolで展開したapkをリコンパイルする手順もさらっと記載しておきます。

apktool.bat b 出力apk名 元ネタディレクトリ名


これに電子署名を付ければOKですが、物によって上手く行かない場合もあります。
ここいら辺は他の詳しいサイトを見て下さい。
  コメント ( 6 ) | Trackback ( 0 )


« [Android] apk... [ダークソウル... »
 
コメント
 
 
 
Unknown (936)
2011-11-03 21:01:40
毎度、すごく為になる記事ありがとうございます。
アプリによっては/system/framework内のファイルも必要ということですね。
追記しておきます(笑)
 
 
 
Unknown (アレ)
2011-11-04 09:19:18
詳しくはapktoolのwikiを見てください。英文ですが。
http://code.google.com/p/android-apktool/w/list
複数機種用のframework登録の仕方とかが載っています。
 
 
 
Unknown (seabraves)
2012-09-04 20:02:45
はじめまして。旧いエントリから失礼いたします。いつも楽しく読ませていただいております。ブログをご参考に先日来SH-09Dの伝言メモアプリをGALAXY NEXUSに移植すべくdeodex後、再コンパイル、署名までは無事完了しましたがインストールでエラーが出ます。libファイルの組込みやbuild.plopwoを弄るとなると私の浅薄な知識ではここで行き詰まりとなってしまいます。何卒お知恵を拝借いただけませんでしょうか?不躾ですがよろしくお願いいたします。
 
 
 
Unknown (アレ)
2012-09-06 09:21:19
依存ライブラリが不足している場合は
インストール時にlogcatしていると出力されませんでしたっけ?
実際の物を見てみないとそれぐらいしかアドバイス出来ません。
 
 
 
Unknown (seabraves)
2012-09-06 10:08:37
ご連絡有難うございます。インストールは実機で行っているので単純に「インストールされていません」となります。よろしければファイル一式お渡しいたしますので
ご検証お願い出来ませんでしょうか?
 
 
 
Unknown (アレ)
2012-09-06 13:44:08
見てみます。
alex163@goo.jpまで送ってください。
 
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。
数字4桁を入力し、投稿ボタンを押してください。
 
この記事のトラックバック Ping-URL
 
 
・このブログへのリンクがない記事からのトラックバックは受け取らないよう設定されております
※ブログ管理者のみ、編集画面で設定の変更が可能です。