是否可以在模拟设备上发现和 运行 第三方 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)。但是这些搜索只给我常用的网站(不是即时应用程序)。
我怀着极大的兴趣阅读了 ,因为它似乎表明 应该 有效。但是,这些答案似乎对我没有帮助。
- 我在澳大利亚,应该是one of the countries where Instant Apps are supported。
- 正如一个答案中所建议的那样,我尝试发送 link 应该在电子邮件中的即时应用程序中打开然后点击它们,但它仍然只是将我发送到浏览器 link .
- 关于 DAL 验证的答案很有趣,但在浏览器中打开 links 时似乎不适用?
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 设备在屏幕顶部有一个 "lightning bolt" 通知说 "Development Mode Active":URLs will be routed to Dev Manager in order to launch Instant Apps locally. Uninstall Dev Manager to disable Development Mode.
在 API 24 设备上,设置 -> Google -> 免安装应用,免安装应用设置为 true
在 API 26 模拟设备上,如果我键入 adb shell pm list packages grep "com.google.android.instantapps.supervisor"
returns nothing
在API 26设备上,Google Play services for Instant Apps
没有安装,也没有任何"lightning bolt"通知
在 API 26 设备上,设置 -> Google 没有列出即时应用程序(因此无需设置)
这里有一些额外的细节,以防它们相关:
- 我的开发机运行s Windows10台(不选)
- 模拟设备是带有 Play 商店的 Nexus 5x(API 24 和 26)
- 我也尝试了 "x86" 图片,因为有些人推荐它们用于 Windows,但它们也没有用。 (这可能是因为 "x86" 图片没有随 Play Store 一起提供,我认为这是 Instant Apps 所必需的?)
- 我在模拟设备上登录了真实的 Google 用户帐户。
有了我现在搭建的开发环境,我可以继续开发我自己的免安装应用程序,部署在我自己的模拟设备上,并进行测试。我真的很好奇其他人的即时应用程序是如何工作的。另一个 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 即时应用程序。如果我误解了你的问题,我深表歉意。
我目前正在尝试了解 Android 免安装应用程序。由于我没有任何支持它们的真实设备,因此我使用的是模拟器(来自 Android Studio 3.0 Canary 9)。我可以在模拟的 Nexus 5x(带有 Play 商店)上成功 运行 "toy" 即时应用程序 (like this),所以我相信我的开发环境配置正确。
但是,我很想了解第三方应用程序的发现过程,并了解用户体验是什么样的。由于我自己没有合适的设备,我使用模拟的 Chrome 浏览器来搜索启用了即时应用程序的站点(如 Stack Exchange)。但是这些搜索只给我常用的网站(不是即时应用程序)。
我怀着极大的兴趣阅读了
- 我在澳大利亚,应该是one of the countries where Instant Apps are supported。
- 正如一个答案中所建议的那样,我尝试发送 link 应该在电子邮件中的即时应用程序中打开然后点击它们,但它仍然只是将我发送到浏览器 link .
- 关于 DAL 验证的答案很有趣,但在浏览器中打开 links 时似乎不适用?
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 设备在屏幕顶部有一个 "lightning bolt" 通知说 "Development Mode Active":
URLs will be routed to Dev Manager in order to launch Instant Apps locally. Uninstall Dev Manager to disable Development Mode.
在 API 24 设备上,设置 -> Google -> 免安装应用,免安装应用设置为 true
在 API 26 模拟设备上,如果我键入
adb shell pm list packages grep "com.google.android.instantapps.supervisor"
returns nothing在API 26设备上,
Google Play services for Instant Apps
没有安装,也没有任何"lightning bolt"通知在 API 26 设备上,设置 -> Google 没有列出即时应用程序(因此无需设置)
这里有一些额外的细节,以防它们相关:
- 我的开发机运行s Windows10台(不选)
- 模拟设备是带有 Play 商店的 Nexus 5x(API 24 和 26)
- 我也尝试了 "x86" 图片,因为有些人推荐它们用于 Windows,但它们也没有用。 (这可能是因为 "x86" 图片没有随 Play Store 一起提供,我认为这是 Instant Apps 所必需的?)
- 我在模拟设备上登录了真实的 Google 用户帐户。
有了我现在搭建的开发环境,我可以继续开发我自己的免安装应用程序,部署在我自己的模拟设备上,并进行测试。我真的很好奇其他人的即时应用程序是如何工作的。另一个 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 即时应用程序。如果我误解了你的问题,我深表歉意。