AS2.3关于MIUI优化的兼容问题

Posted by lx8421bcd on March 5, 2017

昨天刚入手小米MIX,也恰好升级了AS2.3,在使用MIX调试运行的时候,却发现程序总是安装不上,报错信息是这样的:
dialog

点OK卸载之后却又提示卸载失败,然后调试安装就中断了,这就很尴尬,很明显关键字是

Failed to establish session

Google 搜一下,发现就算SO上面的解决办法,也是说在开发者选项中把小米的“MIUI优化”关掉,原因未知。试了一下关掉MIUI优化确实有用,但这我就不敢关了啊,万一发release包之后在开MIUI优化的机子上嗝屁了那我不是完蛋?

只能自己查一下问题,在安装过程中,我发现run信息是这样的
new_fail

换到我的Nexus 5x上安装
new_success

一切正常

突然联想到将gradle升级到2.3后的新特性

构建系统:支持新的 Gradle 插件 2.3.0 。有一些显着的变化:

  • 默认情况下启用 dex 文件的用户缓存,这将加快构建
  • 非常大的项目的配置时间应该明显更快
  • 对于即时运行,“启动延迟”(大应用程序在启动时停顿几秒钟)应该消失
  • 即时运行使用针对 Android N 的“APK拆分”,这比它用于定位较旧的平台的类加载器技巧

我恰好把手头上这个项目升级了gradle,于是我找了个老项目跑了一下看看 old
很明显老项目并没有这个“split-apk”的安装过程。这是AS2.3之后的新特性。那么基本可以确定在安装Split APKs的时候,MIUI优化对slice apk做了什么操作,返回了“failed to establish session”,让IDE判断需要卸载安装,但这个时候手机上还没有真正的apk,然后就理所当然的卸载失败了。
目前向MIUI反馈还没有什么回复,在这个问题修复之前,升级了AS2.3的新项目要用小米手机调试的话,可以先考虑用老项目的Gradle覆盖一下把Gradle降级,应该不会出问题。