baksmali について
odexファイルをdexファイルにして、apkファイルにまとめてしまおうというお話。
ちょっと乱暴ですが、簡単に書きます。(自分への覚え書き程度なので…)
.dex ファイル … Dalvik VM で実行可能なファイル
.odex ファイル … Dalvik VM で実行可能なファイルの .dex を特定のVM環境に最適化したもの。
毎回、使い方を調べるのが面倒になったので、Makefile にした。
といっても、依存関係も何も無いのでシェルスクリプトとほとんど変わらないのだが、
エラーが出るとそこで止まるという利点があったりする。
下記の例だと、piyopiyo.apkとpiyopiyo.odexがあり、
FRAMEWORKのところに、特定VMの/system/frameworkディレクトリを指定すると言った感じ。
ディレクトリにそれぞれを配置して、Makefileを書き直して
$ make key
$ make
で完了です。
新apkと、key生成を依存関係で結びつけるとさらに楽かもしれない。
$ make clean
はキャンセルです。新apkを削除して、makeする前の状態にディレクトリをクリーンにする。
TARGET:=piyopiyo
FRAMEWORK:=../../system/framework/
BAKSMALI:=../..//baksmali/baksmali-1.2.8.jar
SMALI:=../../baksmali/smali-1.2.8.jar
.PHONY:all
all:
rm -rf out
java -jar $(BAKSMALI) \
-d $(FRAMEWORK) \
-x $(TARGET).odex
java -jar $(SMALI) -o classes.dex out
rm -rf temp
mkdir temp
( cd temp; \
unzip ../$(TARGET).apk;)
rm -f ./temp/META-INF/*
cp classes.dex ./temp/
( cd temp; \
jar cvf ../$(TARGET)_new.apk .;)
mv $(TARGET).apk $(TARGET)_old.apk
mv $(TARGET)_new.apk $(TARGET).apk
jarsigner -keystore is01.keystore -verbose $(TARGET).apk is01key
.PHONY:clean
clean:
rm -f *~ classes.dex
rm -f $(TARGET).dex
rm -rf out
rm -rf temp
mv $(TARGET)_old.apk $(TARGET).apk
.PHONY:key
key:
keytool -genkey -dname "c=j" \
-keypass hogehoge \
-keystore is01.keystore \
-storepass hogehoge \
-validity 10000 \
-alias is01key \
-keyalg RSA
コメント
最終更新:2011年09月25日 21:00