第一步:合并apk和odex
首先要把PinyinIME.odex和PinyinIME.apk放到/home/PC/test目录下;
同时要把手机中所有/system/framework下的apk和odex文件也放到/home/PC/test下
在网上下载baksmali-1.4.1.jar和smali-1.4.1.jar
在终端中进入到/home/PC/test下,然后执行以下操作
1). java -jar baksmali-1.4.1.jar -a 13 –x PinyinIME.odex
2). java -Xmx512M -jar smali-1.4.1.jar out -o classes.dex
3)在ubuntu下使用归档管理器打开PinyinIME.apk,直接将classes.dex拖入PinyinIME.apk
第二步签名:
在终端中进入到/home/PC/Projects/android4.0_ics/build/target/product/security下面
1). openssl pkcs8 -in shared.pk8 -inform DER-outform PEM -out shared.priv.pem –nocrypt
2). openssl pkcs12 -export -inshared.x509.pem -inkey shared.priv.pem -out shared.pk12 -name CERT
输入秘钥:android
3) keytool -importkeystore -deststorepassandroid -destkeypass android -destkeystore CERT.keystore -srckeystoreshared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias CERT
4) 然后将CERT.keystore拷贝到/home/PC/tools/jdk1.6.0_26/bin下面:
5) 然后在终端中进入到/home/PC/tools/jdk1.6.0_26/bin下
./jarsigner -verbose -keystore CERT.keystore/home/PC/test/PinyinIME.apk CERT
此处需要输入验证秘钥:android
6)在/home/PC/test/建立result文件夹,在终端中进入/home/PC/tools/android/tools接着再执行:
./zipalign -v 4 /home/PC/test/PinyinIME.apk /home/PC/test/result/PinyinIME.apk
下面是一个自动执行的shell脚本:
假设取名mergeapk.sh
执行方法:./mergeapk.sh PinyinIME.odex PinyinIME.apk
脚本如下:
echo "start merge process,please wait... "
if [ -f $1 ]; then
echo " parse .odex file : $1";
else
echo " error: .odex file is missing";
invalid=false;
fi
if [ -f $2 ] ; then
echo " target apk file :$2";
else
echo " error: target .apk file is missing";
invalid=false;
fi
if [ true = $invalid ] ; then
if [ -f "framework.jar" ]; then
echo "framework exist";
else
/home/PC/tools/android/platform-tools/adb pull system/framework .
fi
java -jar baksmali-1.4.1.jar -a 13 -x "$1"
java -Xmx512M -jar smali-1.4.1.jar out -o classes.dex
zip "$2" classes.dex
rm -rf out
rm classes.dex
else
echo " parameter is not right,aborting... retry like:";
echo " ./mergeapk.sh odexpathandname.odex apkpathandname.apk";
fi