繁体   English   中英

我正在尝试通过 adb 测试 android 深层链接 url 以启动我的应用程序

[英]I am trying to test android deep link urls through adb to launch my app

当我在 adb 中键入命令时:

./adb shell am start -W -a android.intent.action.VIEW -d "example:gizmos" com.myapp

我收到此错误:

Starting: Intent { act=android.intent.action.VIEW dat=example://gizmos pkg=com.myapp }
Error: Activity not started, unable to resolve Intent { act=android.intent.action.VIEW dat=example://gizmos flg=0x10000000 pkg=com.myapp }

但是当我在 adb 中键入命令时:

./adb shell am start -W -a android.intent.action.VIEW -d "example:gizmos" com.myapp.activity.DeepLinkActivity

一切正常,我收到消息,我可以在手机上看到活动启动:

Starting: Intent { act=android.intent.action.VIEW dat=example://gizmos cmp=com.myapp.activity.DeepLinkActivity }
Status: timeout
Activity: com.myapp.activity.DrawerActivity
Complete

我的问题是为什么我需要获取活动的完整路径而不仅仅是 package 名称? 因为当外部应用程序或浏览器尝试深度链接时,它们不会调用我的应用程序中的活动。

这是我的 AndroidManifest.xml

<activity
        android:name=".activity.DeepLinkActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data android:scheme="example"
                  android:host="gizmos" />

        </intent-filter>
</activity>

你并不需要指定到你的活动完整的路径,但如果你想测试你是否你的应用程序作出适当的反应,以URI只指定的应用程序包:

adb shell am start -a android.intent.action.VIEW -d "example://gizmos" com.myapp

您提供的命令中也存在错误 - 应该是example://gizmos而不是example:gizmos

这是命令

adb shell am start -d your-deep-link

例子

adb shell am start -d rm://yoursettingpage/v1

android studio 的最佳解决方案在这里解释: https : //code.tutsplus.com/tutorials/how-to-enable-deep-links-on-android--cms-26317

TLDR:Android Studio --> 运行 --> 编辑配置

将 Launch Options 中的 Launch 更改为“URL”并在文本字段 URL 中输入正确的 URL:“something://”

正如另一个答案所提到的,它应该是“example://gizmos”而不是“example:gizmos”

或者,您可以使用深层链接测试器应用程序直接在 android 上测试深层链接,而不是使用 adb:

https://play.google.com/store/apps/details?id=com.manoj.dlt

无需提及任何包名称或组件名称。 只需输入深层链接并启动。

我发现通过 adb 测试深层链接有时很复杂而且很困难。 因此,我构建了这个小应用程序来做到这一点。

您可以从 Android Studio 界面测试您的深层链接。

在此处输入图片说明

  1. 选择工具 > 应用链接助手。
  2. 单击应用程序链接助手中的测试应用程序链接。
  3. 在 URL 字段中输入要测试的 URL,例如http://recipe-app.com/recipe/grilled-potato-salad
  4. 单击运行测试。

查看了解如何通过 Android Studio 界面实现应用链接。 https://developer.android.com/studio/write/app-link-indexing#testindent

尝试这个:

adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d 'yourdeeplink'

-a android.intent.action.VIEW -> action  -c android.intent.category.BROWSABLE -> category -d 'deeplink' -> data 

并且您还需要先安装该应用程序才能注册深层链接。

您的命令不正确,因为您正在尝试使用不正确的包名称,而不是com.myapp.activity.DeepLinkActivity您必须仅写入 build gradle(Module: app) 中通过“application Id”指定的包名称,例如,如果您的 applicationId 是com.companyname ,那么您的命令将是这样的:

adb shell am start -W -a android.intent.action.VIEW -d  "example://gizmos" com.companyname

命令

adb shell dumpsys package domain-preferred-apps

打印系统已知的所有活动深层链接处理程序也非常有帮助。 如果您的应用在此处丢失,则您的深层链接设置显然有问题。

以防万一其他人遇到我遇到的问题,即adb shell am start ...不起作用,如果您的意图过滤器中有file:///...content://... URI指定了 MIME 类型,例如

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="content" />
  <data android:scheme="file" />
  <data android:mimeType="text/plain" />
  <data android:host="*" />
</intent-filter>

您需要使用 -t 参数在命令行上指定 mime 类型:

adb shell am start -W -a android.intent.action.VIEW -d "file:///sdcard/myfolder/myfile.txt" -t "text/plain" com.myapp

否则您会收到与 OP 相同的错误消息。

根据我刚刚获得的经验,我建议使用可用 adb 命令列表。 它似乎比运行 Android 8 的测试设备的外壳中的帮助文本更新。

我发现的最好方法是通过 Android Studio 本身。

  1. 通过选择Edit Configurations...选项打开Run/Debug Configurations对话框,如下图所示: 打开“运行/调试配置”对话框

  2. 之后添加一个新配置,如下图所示(如果您使用 Firebase 动态链接,则在 URL 字段中输入动态链接的短链接,否则在 URL 字段中输入深层链接): “运行/调试配置”对话框中的选项

  3. 之后,您将找到运行配置,选择它,然后按Run 在此处输入图片说明

为要测试的每个链接添加尽可能多的运行配置。

在 Google Play 中搜索DeepLink 下载 apk(通过其他支持下载的站点)。 然后在模拟器上安装应用程序。 例如, https://play.google.com/store/apps/details?id=com.waterbottle.testdeeplink

在此处输入图像描述

通过运行adb shell 命令测试深层链接对我来说似乎很麻烦。 所以我尝试了一个简单的解决方案来减少我使用.bat文件多次测试深层链接的任务和时间。

第 1 步:首先创建一个.txt文件并在此处粘贴您的 ADB 命令 -

adb shell am start -W -an android.intent.action.VIEW -d <Your URL> <Your Package>

并将更改.txt扩展名的文件保存为.bat 现在您刚刚创建了 bat 文件来测试深层链接。 尝试仅使用一个字母来命名 bat 文件(就像我将d.bat命名为d.bat ,“d”代表“深层链接”以便于理解),因为它可以减少您的打字时间。

第 2 步:现在在 Android Studio 中打开您的terminal并转到您的 bat 文件位置,然后输入您的文件名(不带扩展名)并按 Enter。 例如cd your/bat/file/location/d这里假设“d”是您的 bat 文件名。

它会工作得很好!

我发现 Savas Adar 的答案使用起来最友好,为此目的拥有一个内置工具也更有意义。

就用那个!

我有三个关于 App Links Assistant 的快速免责声明,他的回答中缺少这些声明,而且评论太长了。

  1. 打开应用链接助手。 我在工具菜单中找不到它。 所以双击 Shift 并输入 App Link Assistant 从 Android Studio 运行它

  2. 按“运行测试”将清除编辑文本框,因此我发现每次我想重新尝试测试时都必须复制并粘贴我的链接。 愚蠢的我自己没有阅读它上面的文字,说在运行测试后,会创建一个运行配置,并附有先前的 url。 (屏幕顶部,设备菜单左侧)。 只需使用您想要的 url 选择运行配置。

  3. 我发现按下“运行测试”会重新启动应用程序,这与 ABD 方法不同,ABD 方法在我想调试之前没什么大不了的(只是速度较慢)。 我在调试模式下运行应用程序,然后按下运行测试,这将停止我的调试会话并重新启动应用程序...

解决方案是从第 2 点选择运行配置,并将其作为调试运行。

如果您的深层链接具有 http 或 https 方案,您可以使用 Android 中的 google 文本框:

在此处输入图像描述

只需在那里复制您的深层链接

以下应该工作

adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.myapp

这里

例子://小发明

是您设置的 URI 方案。

但是如果你想将额外的参数传递给 URI scheme 并测试它,

例子

例如://gizmos?parameter1=23&parameter2=test

那么命令就是

adb shell 'am start -W -a android.intent.action.VIEW -d "example://gizmos?parameter1=23&parameter2=test"' com.myapp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM