由于"多重过程",即时运行不起作用

fut*_*eer 11 android android-studio instant-run

配置即时运行后,运行按钮有一个小的黄色霹雳.但是当我运行应用程序时,Android Studio仍然执行完整的构建和安装,图片中列出了完整的消息.

我在http://tools.android.com/tech-docs/instant-run中搜索了官方文档,但没有关于"多个进程"的任何内容.我想知道"多个进程"意味着编译或我的Android应用程序.

我应该配置什么来关闭多个进程并体验即时运行?

Jan*_*nik 9

您的应用未启用"即时运行",因为它正在使用多个进程.

如Android工具项目网站(http://tools.android.com/recent/androidstudio20beta6availableinthecanarychannel)所述:

"使用多个进程的应用程序(通过清单中的android:进程)没有使用Instant Run正确更新.暂时,我们在这种情况下关闭了Instant Run."

因此,要体验即时运行,您必须确保您的应用程序不使用多个进程.检查你的AndroidManifest.xml.

可能是多进程使用来自导入的库.例如,LeakCanary使用在其自己的AndroidManifest.xml中定义的多个进程.找到定义位置的最佳方法是搜索整个项目(OS X上的Android Studio中的Cmd-Shift-F)以获取"android:process".

  • 我需要从我的应用程序中删除LeakCanary和ProcessPhoenix来解决这个问题.那些是罪魁祸首.此外,值得注意的是,我被告知这是固定的,并将在AS 2.0.0-beta7中发布. (4认同)
  • 现在这已得到修复,但Instant Run现在会因为此而在更改时重新启动整个应用程序.AS版本2.2.3 (2认同)

Roy*_*erg 7

我在运行ProcessPhoenix时遇到了这个问题.我没有完全禁用它,而是为我的调试版本禁用了它.

而不是compile我使用
releaseCompile 'com.jakewharton:process-phoenix:2.0.0'

并且为了不破坏构建,我使用反射来触发应用程序进程重启:

try {
    Class clazz = Class.forName("com.jakewharton.processphoenix.ProcessPhoenix");
    Method triggerRebirthMethod = clazz.getMethod("triggerRebirth", Context.class);
    triggerRebirthMethod.invoke(this, new Object[]{getActivity()});
} catch (Exception e) {
    // Exception handling
}
Run Code Online (Sandbox Code Playgroud)

所以现在我仍然可以使用Instant Run并保持包含lib.:)

(当然,反射从来都不是理想的,但应用程序进程重启仅用于应用程序中的一个罕见的特殊情况.)