是否可以在模拟设备上发现和 运行 第三方 Android 即时应用程序?

Is it possible to discover and run third-party Android Instant Apps on an emulated device?

我目前正在尝试了解 Android 免安装应用程序。由于我没有任何支持它们的真实设备,因此我使用的是模拟器(来自 Android Studio 3.0 Canary 9)。我可以在模拟的 Nexus 5x(带有 Play 商店)上成功 运行 "toy" 即时应用程序 (like this),所以我相信我的开发环境配置正确。

但是,我很想了解第三方应用程序的发现过程,并了解用户体验是什么样的。由于我自己没有合适的设备,我使用模拟的 Chrome 浏览器来搜索启用了即时应用程序的站点(如 Stack Exchange)。但是这些搜索只给我常用的网站(不是即时应用程序)。

我怀着极大的兴趣阅读了 ,因为它似乎表明 应该 有效。但是,这些答案似乎对我没有帮助。

API 24 和 API 26 模拟设备(均包含 Play 商店) 目前的情况有些不同,可能是因为我一直在尝试各种技巧来让它发挥作用。 (TLDR:什么都不适合我。)

这里有一些额外的细节,以防它们相关:

有了我现在搭建的开发环境,我可以继续开发我自己的免安装应用程序,部署在我自己的模拟设备上,并进行测试。我真的很好奇其他人的即时应用程序是如何工作的。另一个 post(linked 以上)建议我应该能够做到这一点。

所以这是我的问题:是否可以在模拟设备上发现并打开第三方即时应用程序(如果可以,如何)?

Is it possible to discover and open third-party Instant Apps on an emulated device (and if so, how)?

目前没有。 :( 存在安全限制,防止模拟设备使用各种 Google 服务。如果您检查日志,您可能会发现类似于 "io.grpc.StatusException: INVALID_ARGUMENT: Application credential header not valid. Please fix the client to pass a valid application credential header."

的消息

On the API 26 emulated device, if I type adb shell pm list packages grep "com.google.android.instantapps.supervisor" returns nothing

仅供参考,Supervisor 不用于 Android O.

当您从 App Link Assistant 启用 Android Instant App 时,您的 Activity您要直接启动(或在您的网站上有信息)的修改如下:

<activity
            android:name=".View.Activity.AboutActivity"
            android:parentActivityName="com.example1.uddhav.stopwatch.View.Activity.AboutActivity">
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:scheme="http"
                    android:host="your_web_address" />
            </intent-filter>
        </activity>

因此,当您获取第三方应用程序时,您必须按上述方式修改AndroidManifest.xml文件。

并且,为了能够 link 您的即时 activity(例如,AboutActivity),您必须将生成的 assetlinks.json 保存在 .well 中-您网站根文件夹的已知文件夹为 <your_web_site>/.well-known/assetlinks.json

有一个逆向工程工具可以让您修改 AndroidManifest.xml 文件。

注意:由于免安装应用不需要 uses-permission 标记,因此您无需重新注册。

由于您不处理 AppLink 意图,因此不需要

// ATTENTION: This was auto-generated to handle app links.
Intent appLinkIntent = getIntent();
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();

因此,up to my understanding,可以在受支持的模拟器设备上 运行 第三方 Android 即时应用程序。如果我误解了你的问题,我深表歉意。