您的位置:首页 > 移动开发 > Android开发

Android打包的相关工具和命令

2016-03-22 11:27 417 查看

前言

前一阵子用到用命令行对Android文件进行解包、打包和编译,在这里把相关工具和命令做下记录。

apktool

apktool可以对akp包进行解包,或者把Android文件夹打包成apk包。

解包;
-o
后面接的是输出路径;

apktool d -f <file>/temp.apk -o <file>


打包;

apktool b -f <file> -o <file>/temp.apk


aapt

aapt即Android Asset Packaging Tool,在SDK的build-tools目录下可以找到。

该工具可以用来操作apk文件,也可以用来编译Android的资源文件。

将res文件夹下的资源编译成R.java,存放在gen文件夹下;需要用到
android.jar
,在SDK的platform里面可以找到;还需要用到你Android工程的
AndroidManifest.xml
,会根据文件里面的包名package,在gen生成相应的路径;

aapt p -f -m -J <file>/gen -S <file>/res -I <file>android.jar -M <file>/AndroidManifest.xml


从apk包中把签名文件删除;

aapt r <file>/temp.apk META-INF


javac

javac是java文件的编译工具,可以将.java编译成.class。

javac只要电脑安装了jdk,并设置好环境变量就可以调用。

将.java编译成.class,并存放于制定路径:

javac -d <file>/class <file>/R.java


dx.bat

dx.bat是Android的批处理工具,能够将.class文件,编译成.dex文件。

.dex文件是Android虚拟机Dalvik的执行文件。

dx.bat在SDK的build-tools文件夹下可以找到。

将class文件夹下的所有.class文件,编译成.dex文件:

./dx --dex --output=<file>/dex/class.dex <file>/class


baksmali

baksmali是.dex文件的解析工具,可以将.dex文件解析成.smali文件。

.dex文件和.smali文件的区别:.dex是给Dalvik虚拟机执行用的,人看不懂;.smali是由.dex解析出来,人勉强能够看得懂。

使用baksmali将.dex解析成.smali:

java -jar baksmali-2.0.6.jar -o <file>/samli <file>/classes.dex


smali

smali是.smali文件的编译工具,可以将.smali编译成.dex文件。

java -jar smali-2.0.6.jar -o <file>/classes.dex <file>/samli


生成签名文件

Android的签名文件是Android的数字证书,使用Java的数字证书相关的机制,用来标识app的作者。

每个app都要有签名,不然系统不给安装。

同一个app但是有不同的签名,系统还是会认为这是两个不同的app,会要求后面安装的app更改包名。

生成签名文件,先cd到Java的安装目录下的Home/bin文件夹。

命令行输入如下命令,回车后按提示进行下一步;
-keystore
是要输出的签名文件;
-keyalg
是算法模式;
-validity
是证书有效期,单位:天;
-alias
是签名文件的别名。

keytool -genkey -keystore <file>/feiyumobile.keystore -keyalg RSA -validity 10000 -alias feiyumobile.keystore


使用签名文件签名

使用已经产生的签名文件,为apk签名;此处不用特殊工具,只需安装了jdk就行;

jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore <keystore_file> -signedjar <output_apk> <input_apk> <alias>


带密码的命令行,可以不用手动输入密码:

jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore <keystore_file> -storepass <storepass> -keypass <keypass>  -signedjar <output_apk> <input_apk> <alias>


参数解释:

- keystore_file : .keystore 文件

- storepass : keystore密码

- keypass : 别名密码

- output_apk :输出.apk文件

- input_apk :输入.apk文件

- alias :别名

zipalign

zipalign是字节对齐工具,可以给apk进行优化,使得运行时Android系统与app间的交互更加有效率。

zipalign可以在SDK的build-tools找到。

使用zipalign给apk优化;
-v 4
是指4个字节4个字节对齐;

./zipalign -v 4 <file>/temp_sign.apk <file>/final.apk


总结

使用这些工具,可以给Android进行自动打包,也可以给.apk文件进行反编译。

使用apktool解包,src文件夹下得到的是.smali格式的文件。

可以修改.smali文件,然后用apktool打包,这样可以达到偷偷修改别人的代码的目的。

想要查看别人apk里面的代码,可以先使用zip解压工具解压apk,然后使用dex2jar工具,将.dex解析成jar包,然后使用jd-gui工具查看jar包里的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息