[英]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 界面测试您的深层链接。
查看了解如何通过 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 的测试设备的外壳中的帮助文本更新。
在 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 的快速免责声明,他的回答中缺少这些声明,而且评论太长了。
打开应用链接助手。 我在工具菜单中找不到它。 所以双击 Shift 并输入 App Link Assistant 从 Android Studio 运行它
按“运行测试”将清除编辑文本框,因此我发现每次我想重新尝试测试时都必须复制并粘贴我的链接。 愚蠢的我自己没有阅读它上面的文字,说在运行测试后,会创建一个运行配置,并附有先前的 url。 (屏幕顶部,设备菜单左侧)。 只需使用您想要的 url 选择运行配置。
我发现按下“运行测试”会重新启动应用程序,这与 ABD 方法不同,ABD 方法在我想调试之前没什么大不了的(只是速度较慢)。 我在调试模式下运行应用程序,然后按下运行测试,这将停止我的调试会话并重新启动应用程序...
解决方案是从第 2 点选择运行配置,并将其作为调试运行。
以下应该工作
adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.myapp
这里
例子://小发明
是您设置的 URI 方案。
但是如果你想将额外的参数传递给 URI scheme 并测试它,
例子
例如://gizmos?parameter1=23¶meter2=test
那么命令就是
adb shell 'am start -W -a android.intent.action.VIEW -d "example://gizmos?parameter1=23¶meter2=test"' com.myapp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.