web-dev-qa-db-fra.com

J'essaie de tester Android URL de lien profond via adb pour lancer mon application

Lorsque je tape la commande dans adb:

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

Je reçois cette erreur:

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 }

Mais quand je tape la commande dans adb:

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

Tout fonctionne bien et je reçois le message et je peux voir le lancement de l'activité sur le téléphone:

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

Ma question est pourquoi dois-je obtenir le chemin complet de mon activité et pas seulement le nom du package? Parce que lorsque les applications externes ou le navigateur tenteront de créer un lien profond, ils n'invoqueront pas l'activité dans mon application.

Ceci est mon 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>
35
user3773337

Vous n'avez pas besoin de spécifier le chemin d'accès complet à votre activité, mais si vous voulez tester si vous réagissez correctement à l'URI in votre application spécifiez simplement le package d'application:

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

Il y a aussi un bug dans la commande que vous avez fournie - il devrait y avoir example://gizmos ne pas example:gizmos

71
pixel

La meilleure solution pour Android studio est expliquée ici: https://code.tutsplus.com/tutorials/how-to-enable-deep-links-on-Android-- cms-26317

TLDR: Android Studio -> Exécuter -> Modifier les configurations

Changez Launch dans Launch Options en "URL" et entrez dans le champ de texte URL l'url correcte: "quelque chose: //"

22
RoaflinSabos

Comme l'autre réponse l'a mentionné, ce devrait être "exemple: // gizmos" et non "exemple: gizmos"

Alternativement, au lieu d'utiliser adb, vous pouvez tester des liens profonds directement sur Android en utilisant l'application de test de liens profonds:

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

Pas besoin de mentionner de nom de package ou de composant. Tapez simplement le lien profond et le feu.

J'ai trouvé que tester des liens profonds via adb était parfois lourd et difficile. Par conséquent, j'ai construit cette petite application pour le faire.

11
Manoj Madanmohan

Votre commande est incorrecte car vous essayez avec un nom de package incorrect, au lieu de com.myapp.activity.DeepLinkActivity vous ne devez écrire que le nom du package spécifié dans le gradle de construction (Module: app) par 'application Id', par exemple si votre applicationId est com.companyname, alors votre commande serait comme ceci:

adb Shell am start -W -a Android.intent.action.VIEW -d  "example://gizmos" com.companyname
2
Sandeep Sankla

Juste au cas où quelqu'un d'autre aurait le problème que j'avais, à savoir que adb Shell am start ... ne fonctionne pas, si vous avez un file:///... ou content://...URI dans votre filtre d'intention avec un type MIME spécifié, par exemple

<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>

Vous devez spécifier le type MIME sur la ligne de commande en utilisant le paramètre -t:

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

ou bien vous obtenez le même message d'erreur que l'OP.

Sur la base de l'expérience que je viens de vivre, je recommande d'utiliser this liste des commandes adb disponibles. Il semble être plus récent que les textes d'aide du shell de mon appareil de test exécutant Android 8.

0
Nantoka