在 运行 即时应用程序一次后无法安装普通应用程序(安装失败,原因是:“-27”)

Cant install normal app after running instant app once (Installation failed due to: '-27')

我想达到的目标

一个 android 项目,由一个普通应用程序和一个即时应用程序版本组成,后者将是普通应用程序的演示版本。

问题

全新 emulator/device 我 可以 运行 该应用程序没有任何问题。我也 可以 运行 在卸载普通应用程序后没有任何问题的即时应用程序。 但是 运行在设备上安装免安装应用程序后,我无法安装普通应用程序。唯一有帮助的是擦除模拟器上的数据。

这是我收到的错误:

08/10 17:25:12: Launching 'app' on Pixel 3a API 27.
Installation did not succeed.
The application could not be installed.

List of apks:
[0] '/<path-to-project/instant/app/build/outputs/apk/debug/app-debug.apk'
Installation failed due to: '-27'
Retry

我目前有什么

基于此处 google 示例 InstantApps Google samples 我创建了一个新项目并添加了一个 Instant dynamic feature module。 所以我的项目有以下结构:

-app/manifest/AndroidManifest.xml
-app/<packagname>/MainActivity
-instant/manifest/AndroidManifest.xml
-instant/<packagname>/InstantActivity

instant/manifest/AndroidManifest.xml 的片段:

<dist:module
    dist:instant="true"
    dist:title="@string/title_instant">
    <dist:delivery>
        <dist:install-time />
    </dist:delivery>

    <dist:fusing dist:include="false" />
</dist:module>

<application android:allowBackup="false">
    <activity android:name=".InstantActivity">
        <intent-filter
            android:autoVerify="true"
            android:order="2">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />

            <data android:host="com.farmdok.multi.instant" />
            <data android:pathPrefix="/instant" />
            <data android:scheme="https" />
            <data android:scheme="http" />
        </intent-filter>
    </activity>
</application>

那个新项目的完整代码在我的 github 上:InstantAppTest

这就是我 运行 普通应用程序的方式:

这就是我 运行 即时应用程序的方式:

我设法通过 adb 安装应用程序找到了问题:

adb install -r -t --full <installed-app.apk>

这给了我更详细的错误信息:

adb: failed to install app-debug.apk: Failure [-27: Package <packagename>.instantapp new target sandbox 1 is incompatible with the previous value of2.]

所以我只需要添加:

android:targetSandboxVersion="2"

appManifest