问题
When I type the command in adb:
./adb shell am start -W -a android.intent.action.VIEW -d "example:gizmos" com.myapp
I get this error:
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 }
But when I type the command in adb:
./adb shell am start -W -a android.intent.action.VIEW -d "example:gizmos" com.myapp.activity.DeepLinkActivity
Everything works fine and I get the message and I can see the activity launch on the phone:
Starting: Intent { act=android.intent.action.VIEW dat=example://gizmos cmp=com.myapp.activity.DeepLinkActivity }
Status: timeout
Activity: com.myapp.activity.DrawerActivity
Complete
My question is why do I need to get full path of my activity and not just package name? Because when the external apps or browser will try to deep link they will not invoke the activity in my app.
This is my 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>
回答1:
You don't need to specify full path to your activity, but if you want to test whether you react properly to URI in your app just specify app package:
adb shell am start -a android.intent.action.VIEW -d "example://gizmos" com.myapp
Also there is bug in command you provided - there should be example://gizmos
not example:gizmos
回答2:
The best solution for android studio is explained here: https://code.tutsplus.com/tutorials/how-to-enable-deep-links-on-android--cms-26317
TLDR : Android Studio --> Run --> Edit Configurations
Change Launch in Launch Options to "URL" and enter in the text field URL the correct url: "something://"
回答3:
As the other answer mentioned, it should be "example://gizmos" and not "example:gizmos"
Alternatively, instead of using adb, you can test deep links directly on android using deep link tester app:
https://play.google.com/store/apps/details?id=com.manoj.dlt
No need to mention any package name or component name. Just type the deep link and fire.
I've found testing deep links through adb to be cubersome and difficult at times. Hence, I've built this small app to do it.
回答4:
Here is the command
adb shell am start -d your-deep-link
Example
adb shell am start -d rm://yoursettingpage/v1
回答5:
Your command is incorrect because you are trying with an incorrect package name, Instead of com.myapp.activity.DeepLinkActivity
you have to write only the package name specified in build gradle(Module: app) by 'application Id' e.g if your applicationId is com.companyname
, then your command would be like this:
adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.companyname
回答6:
Just in case someone else has the problem that I had, namely that adb shell am start ...
does not work, if you have a file:///...
or content://...
URI in your intent filter that has a mime type specified, for example
<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>
You need to specify the mime type on the command line by using the -t parameter:
adb shell am start -W -a android.intent.action.VIEW -d "file:///sdcard/myfolder/myfile.txt" -t "text/plain" com.myapp
or else you get the same error message as the OP.
Based on the experience I just had I recommend using this list of available adb commands. It seems to be more recent than the help texts from the shell of my test device running Android 8.
回答7:
Try this:
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
and also you need to install the app first in order to register the deeplink.
来源:https://stackoverflow.com/questions/28802115/i-am-trying-to-test-android-deep-link-urls-through-adb-to-launch-my-app