Android 即时跑步不';“由于”而无法工作;“多进程”;

Android 即时跑步不';“由于”而无法工作;“多进程”;,android,android-studio,instant-run,Android,Android Studio,Instant Run,配置instant run后,run按钮上有一个黄色的小霹雳。但当我运行应用程序时,Android Studio仍然执行了完整的构建和安装,完整的消息在图片中列出 我在中搜索了官方文件,但没有关于“多进程”的任何内容。我想知道“多进程”意味着编译或我的android应用程序 我应该配置什么来关闭多个进程并体验即时运行 您的应用程序未启用Instant Run,因为它使用多个进程 如Android工具项目网站()所述: “使用多个进程(通过清单中的android:process)的应用程序未使用I

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

我在中搜索了官方文件,但没有关于“多进程”的任何内容。我想知道“多进程”意味着编译或我的android应用程序

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


您的应用程序未启用Instant Run,因为它使用多个进程

如Android工具项目网站()所述:

“使用多个进程(通过清单中的android:process)的应用程序未使用Instant Run进行正确更新。目前,我们已在这种情况下关闭Instant Run。”

因此,要体验即时运行,您必须确保您的应用程序没有使用多个进程。请检查您的AndroidManifest.xml以了解此信息


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

我在运行ProcessPhoenix时遇到了这个问题。我没有完全禁用它,而是在调试构建中禁用了它

我使用
releaseCompile'com.jakewharton:processphoenix: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
}
因此,现在我仍然可以使用Instant Run并保留库。:)


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

我尝试了很多。。。快速解决方案是在开发时删除android:process=“:remote”

但这还不够。。试试贝娄

  • 使用口味

  • build.gradle(应用程序)


    现在您有了4个构建变体
    =>developmentDebug、developmentRelease、productionDebug、productionRelease



    developmentDebug,developmentRelease
    =>不使用多进程

    productionDebug,productionRelease
    =>使用多进程



    2.将原始的“AndroidManifest.xml”复制到YouAppRoot\app\src\production,然后删除除“service”之外的所有元素

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp"
    android:installLocation="auto">
    
    <application
        android:name=".App"
        android:allowBackup="true"
        android:hardwareAccelerated="@bool/gpu_enabled"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:theme="@style/MyTheme">
    
        <service
            android:name=".xxxx.MyService"
            android:exported="false"
            android:process=":remote">
            <intent-filter>
                <action android:name="xxxx.test.aaa" />
            </intent-filter>
        </service>
    </application>
    
    
    

    我需要从我的应用程序中删除LeakCanary和ProcessPhoenix来解决这个问题。那些人就是罪魁祸首。另外,值得注意的是,有人告诉我这是固定的,将在2.0.0-beta7版本中发布。干得好!感谢您的更新,如果在下一个版本中修复,将会很好。很抱歉在此迟到。我后来的结论和你的答案是一样的。谢谢~现在这已修复,但Instant Run现在会重新启动整个应用程序,以防因此而发生更改。作为版本2.2.3,有人知道如何找到使用多进程的库吗?Cmd-Shift-F只搜索本地,但我的库都带有“compile”。所以没有可用的源代码。如果在发布版本中使用,请记住从proguard中排除!使用反射效果很好。但是我的应用程序停止工作了。我认为这可能是因为我们转而使用应用程序包,或者其他一些正在剥离ProcessPhoenix代码的构建工具更新。
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp"
    android:installLocation="auto">
    
    <application
        android:name=".App"
        android:allowBackup="true"
        android:hardwareAccelerated="@bool/gpu_enabled"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:theme="@style/MyTheme">
    
        <service
            android:name=".xxxx.MyService"
            android:exported="false"
            android:process=":remote">
            <intent-filter>
                <action android:name="xxxx.test.aaa" />
            </intent-filter>
        </service>
    </application>