背景
公司安卓测试机vivo z1手机 ,apk debug安装时弹对话框“解析错误,解析软件包时出问题”
1、 解决方案
1、关闭安卓studio的 instant run(如下图 对号勾掉)
2、项目工程gradle.properties 下添加 android.injected.testOnly = false(如下图)
初识instant run
那么这个instant run到底是啥呢???
如下图(我关闭了instant run)
如果你需要开启,按照背景中的步骤开启即可(开启后你运行app后如下图)
1、认识
1、安卓studio2.0编译器新添加的功能,目的是为了提高安装apk的速度。
2、传统情况下,我们修改程序后重新运行一次程序需要经历 :代码重新编译 -> 停止程序 -> 重新安装 -> 重新启动 这样一个过程,而Instant Run则尝试只将程序变更的部分部署到手机上,尽量避免重新安装或重新启动程序,以此大大提升调试程序的效率。
对instant run 的了解
instant run的分类
instant run 分为三种类型(如下)
- hot swap(热交换)
- warm swap(温暖交换)
- cold swap(冷交换)
三种类型详解
1、hot swap
优点:
1、hot swap是所有swap方式中效率最高的一种
2、应用程序不需要重新安装,也不需要重启就可以完成程序变更。
缺点:
hot swap不会对程序中的对象进行重新初始化,也就是说可能某些场景下需要重启Activity才能看出具体的变更内容。
ps:
Android Studio对于hot swap这种情况默认是重启Activity的,当然你也可以到设置中去改变这一默认行为,具体路径是 Settings -> Build, Execution, Deployment -> Instant Run -> Restart activity on code changes。
适用场景:
hot swap的适用条件比较少,只有一种情况会被Android Studio视为hot swap类型,就是修改一个现有方法中的代码(参考下面栗子)
栗子:
程序如上,我们点击运行时:
1、log: onCreate
2、点击按钮弹吐司内容为:“点击事件”
我们修改如上程序,修改吐司内容为“点击事件,hello”然后再次点击运行程序:
log:
2019-06-07 19:27:26.208 15069-15069/? I/aaa: onCreate:
2019-06-07 19:28:29.426 15619-15619/? I/aaa: onCreate:
吐司内容为:点击事件hello我们发现:
1、 onCreate 走了两遍(其实你在instant run中关闭重启activity就打印一次onCreate)
2、安装速度很快(这是因为这种情况触发hot swap)
2 warm swap
warm swap也非常快,这种swap类型同样不需要重新安装或重启程序就可以完成程序变更,但是warm swap要求必须重启Activity。你会在界面上看到屏幕很快地闪一下,同时Activity的生命周期会重新执行。
warm swap的触发条件:
只有一种情况会被Android Studio视为warm swap类型,就是修改或删除一个现有的资源文件(res下的资源文件发生改变)
3、cold Swap
cold swap相对而言就要更慢一些了,Android Studio会自动记录我们项目的每次修改,然后将修改的这部分内容打成一个dex文件发送到手机上,尽管这种swap类型仍然不需要去安装一个全新的APK,但是为了加载这个新的dex文件,整个应用程序必须进行重启才行。另外,cold swap的工作原理是基于multidex机制来实现的,在不引入外部library的情况下,只有5.0及以上的设备才支持multidex,因此,如果你使用了5.0以下的设备,那么cold swap就无法工作了,这种情况会执行最原始的完整APK安装过程。
触发机制(如下很多):
添加、删除或修改一个注解
添加、删除或修改一个字段
添加、删除或修改一个方法
添加一个类
修改一个类的继承结构
修改一个类的接口实现
修改一个类的static修饰符
涉及资源文件id的改动
小结
自己动手丰衣足食 动手总结一遍就算了解了哈哈。。。。。