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

13

我目前正在学习安卓即时应用。由于我没有支持它们的真实设备,所以我正在使用模拟器(来自Android Studio 3.0 Canary 9)。我可以在我的模拟Nexus 5x上成功运行“玩具”即时应用程序(像这样),因此我相信我的开发环境已经正确配置。

然而,我很好奇第三方应用的发现过程和用户体验是什么样子的。由于没有适合的设备,我使用了模拟的Chrome浏览器搜索启用即时应用程序的网站(例如Stack Exchange)。但是这些搜索只给我普通的网站,而非即时应用程序。

我很感兴趣地阅读了这篇帖子,因为它似乎暗示着这应该是可行的。但是,这些答案似乎并没有帮助我。

  • 我在澳大利亚,应该是支持即时应用的国家之一
  • 如一个答案建议的那样,我尝试通过电子邮件发送应该在即时应用中打开的链接,然后点击它们,但仍然只是将我发送到浏览器链接。
  • 有关DAL验证的回答很有趣,但似乎不适用于在浏览器中打开链接时?

API 24和API 26模拟设备(两者都包括Play商店)目前处于略有不同的状态,可能是因为我一直在尝试各种诀窍使其工作。(TLDR:对我来说没有任何作用。)

  • 在 API 24 的模拟设备上,如果我输入 adb shell pm list packages grep "com.google.android.instantapps.supervisor" ,则会输出 package:com.google.android.instantapps.supervisor 作为一项建议(但仍无法使用)。

  • API 24 设备已安装Google Play services for Instant Apps (version 1.9-sdk-155682639)

  • API 24 设备顶部有一个“闪电”通知,显示“开发模式激活”:URL将路由到Dev Manager,以便本地启动即时应用。卸载Dev Manager以禁用开发模式。

  • 在 API 24 设备上,设置-> Google-> 即时应用中,即时应用设置为true

  • 在 API 26 模拟设备上,如果我输入 adb shell pm list packages grep "com.google.android.instantapps.supervisor",则不返回任何内容

  • 在 API 26 设备上,未安装Google Play services for Instant Apps,也没有“闪电”通知

  • 在 API 26 设备上,设置-> Google 不列出即时应用(因此没有可设置的内容)

  • 以下是一些其他细节,如果它们相关:

    • 我的开发机运行 Windows 10 (不得已)
    • 模拟设备是带有 Play Store 的 Nexus 5x(API 24 和 26)
    • 我还尝试了“x86”映像,因为一些人建议在 Windows 上使用它们,但它们也无法使用。(这可能是因为“x86”映像没有附带 Play 商店,而我认为 Instant Apps 需要它?)
    • 我在模拟设备上登录了真实的 Google 用户账户。

    我已经搭建好开发环境,可以继续开发自己的即时应用程序,并在自己的模拟设备上部署和测试。我只是好奇想看看其他人的即时应用程序是如何工作的。另一篇帖子(链接如上)建议我应该能够做到这一点。

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


你的设备上安装了Play Market吗? - Idolon
是的,这两个模拟器都是带有Play Store版本的。 - Rapunzel Van Winkle
1
电子邮件链接无法工作,因为您必须上传一些数据到服务器,然后触发特定的行为才能打开您的应用程序。我认为可以从中推断出,只有在其他浏览器赶上之前,它才能与Chrome一起使用。 - Fabio
2个回答

5
目前不行。:( 由于安全限制,模拟设备无法使用各种 Google 服务。如果您检查日志,可能会发现类似“io.grpc.StatusException: INVALID_ARGUMENT:应用凭据标头无效。请修复客户端以传递有效的应用凭据标头。”的消息。
在 API 26 模拟设备上,如果我键入 adb shell pm list packages grep“com.google.android.instantapps.supervisor”将返回空值。
FYI,Supervisor 不适用于 Android O。

哦,感谢你的回答(尽管是坏消息)。还要感谢你解释了 API 26 模拟器的一部分问题,因为那让我疯狂。我会再等几天才标记这个答案为正确的(并颁发奖励),以防其他人提供更好的答案。 - Rapunzel Van Winkle

4
当你从应用链接助手中启用 Android即时应用 时,你想要直接启动的Activity(或在你的网站上有信息的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文件。
而且,为了能够链接您的即时活动(例如,AboutActivity),您必须将生成的assetlinks.json保存到您网站根目录下的.well-known文件夹中,如<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();

所以,据我理解,可以在支持的模拟器设备上运行第三方Android即时应用程序。如果我误解了您的问题,请原谅。

谢谢您的有趣评论。那看起来是一个有用的技巧!不过,我想知道是否可以像普通用户一样发现/尝试即时应用程序(使用模拟设备)。 - Rapunzel Van Winkle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接