一.release版本的APK和debug版本的APK的区别
首先说明一下,这两个版本的APK是指通过AS打包出来的(Build->Generate Signed Bundle/APK ),用AS打包出来的APK是有强制你设置签名的。相信这两者的区别很多文章都说过了,主要有以下几点区别:
1.release为发行版本,debug为调试版本
发行版本即正常我们发布到市场上给用户使用的,debug版本就是我们内部调试用的。
2.release版本的APK会比debug版本的APK文件小
因为release版本是要发行给用户去用的,故而打包的时候AS会自动帮我们去进行优化(包括混淆操作,下面会讲),也不会包含任何调试的信息,所以它的体积会变小,运行速度也会比较快。详见下图,我自己打包的两个版本的APK,是不是很明显了。
3.混淆问题
详文见:Android正式包release版本跟测试包debug版本的区别 - 简书 (jianshu.com)
release版本的应用都是进行了混淆操作的,而debug版本的是没有的。
首先我们来简单讲一下什么是混淆
混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。
被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,在缺乏相应的函数名和程序注释的情况下,即使被反编译,也将难以阅读,release版的还会进行混淆和用自己的keystore签名,以防止别人反编译后重新打包替换你的应用。
同时混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失使程序变得更加难以理解。
其次,我们再来讲,为什么要混淆
混淆的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的缩短变量和函数名以及丢失部分信息的原因,编译后jar文件体积大约能减少25%。所以混淆还有缩减apk大小的作用。
二. 通过AS直接调试安装到手机上的APK与上述release版本的APK和debug版本的APK的区别
1.通过AS直接调试安装到手机上的APK是没有经过签名的,无法给别的手机安装
没有经过签名所以如果你拿着这个安装包给别人去安装,别人的手机是安装不了的,安装的时候会说无法识别应用的备案情况,安装失败,示例如下: