在做android开发过程中总是看到这几个apk:
app-debug.apk
app-debug-unaligned.apk
app-release-unaligned.apk
app-release.apk
一直以来都弄不懂这几个有什么区别,这两天有点时间就简单查阅了写资料,总结了一下:
四个文件中包含三个关键字:debug、release、unaligned,其中debug和release对应,有unaligned和没有unaligned的对应。
debug与release的区别
先看下这几个apk生成时间:
app-debug.apk
app-debug-unaligned.apk
在项目运行时生成,路径:\build\outputs\apk
app-release-unaligned.apk
app-release.apk
在签名打包时生成,其中app-release-unaligned.apk的路径为\build\outputs\apk,app-release.apk的路径为打包是我们自己指定。
再将这几个apk反编译,查看其本质区别:
打包后apk里会自动生成一个包名.BuildConfig的类
将debug.apk可以看到
public static final boolean DEBUG = true;
将release.apk可以看到
public static final boolean DEBUG = false;
而这个类我们在代码中是可以直接调用的,可以通过BuildConfig.DEBUG来判断日志的输出、服务器连接地址等
unaligned与没有unaligned的区别
Android SDK中提供了一个工具叫zipalign的工具,
关于这个工具的作用参看:
http://www.cnblogs.com/xirihanlin/archive/2010/04/12/1710164.html
在命令行运行:zipalign -c -v 4 app-debug.apk
命令行的执行结果为succesful,表示该app-debug.apk已经进行了对齐处理。
在命令行运行:zipalign -c -v 4 app-debug-unaligned.apk
命令行的执行结果为FAILED,表示该app-debug-unaligned.apk未进行对齐处理。而unaligned翻译成中文就是“对齐”的意思。那么,我们对
app-debug-unaligned.apk进行对齐操作是否就得到了app-debug.apk呢?在命令行执行zipalign -v 4 app-debug-unaligned.apk destination.apk,其中destination.apk为对齐后apk的名称。执行完后我们可以看到新生成的destination.apk和app-debug.apk的大小一样了。即便是右键查看文件属性的字节大小也是一样的(本应该算个MD5,偷个懒)。而关于align和unaligned的具体区别可以参考Android优化-Zipalign