11

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

我在http://tools.android.com/tech-docs/instant-run中搜索了官方文档,但是没有关于“多进程”的任何内容。我想知道“多进程”是指编译还是我的android应用程序.

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

4

3 回答 3

9

未为您的应用启用即时运行,因为它使用多个进程。

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

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

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

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

于 2016-02-29T14:49:46.903 回答
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
}

所以现在我仍然可以使用 Instant Run 并保留包含的库。:)

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

于 2017-07-05T17:00:12.057 回答
1

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

但这还不够……试试下面。

  1. 使用香精。

构建.gradle(应用程序)

buildTypes {
    debug {   
        minifyEnabled false
        signingConfig signingConfigs.debug
    }

    release {
        minifyEnabled true
        signingConfig signingConfigs.release
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
productFlavors {
    development {
        minSdkVersion 21
    }
    production {
        minSdkVersion 14
    } 
}
flavorDimensions "default"


现在你有 4 个 Build Variants
=> 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>

  1. 从原始 AndroidManifest.xml 中删除 android:process=":remote" 行

  2. 现在你可以像下面这样检查。

在此处输入图像描述

于 2018-06-07T08:05:16.370 回答