webentwicklung-frage-antwort-db.com.de

Ich versuche, Android deep link urls durch adb zu testen, um meine App zu starten

Wenn ich den Befehl in adb eingebe:

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

Ich erhalte diesen Fehler:

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 }

Aber wenn ich den Befehl in adb eingebe:

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

Alles funktioniert einwandfrei und ich erhalte die Nachricht und kann den Start der Aktivität auf dem Telefon sehen:

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

Meine Frage ist, warum ich den vollständigen Pfad meiner Aktivität und nicht nur den Paketnamen erhalten muss. Denn wenn die externen Apps oder der Browser versuchen, einen Deep Link zu erstellen, rufen sie die Aktivität in meiner App nicht auf.

Dies ist meine 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

Sie müssen nicht den vollständigen Pfad zu Ihrer Aktivität angeben, aber wenn Sie testen möchten, ob Sie richtig auf URI reagieren in Ihre App geben Sie einfach das App-Paket an:

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

Es gibt auch einen Fehler im von Ihnen angegebenen Befehl - es sollte example://gizmos Und nicht example:gizmos Geben.

71
pixel

Die beste Lösung für Android Studio wird hier erklärt: https://code.tutsplus.com/tutorials/how-to-enable-deep-links-on-Android-- cms-26317

TLDR: Android Studio -> Ausführen -> Konfigurationen bearbeiten

Ändern Sie Start in Startoptionen in "URL" und geben Sie in das Textfeld URL die richtige URL ein: "something: //"

22
RoaflinSabos

Wie in der anderen Antwort erwähnt, sollte es "example: // gizmos" und nicht "example: gizmos" sein

Anstatt adb zu verwenden, können Sie Deep-Links auch direkt auf Android mit der Deep-Link-Tester-App testen:

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

Es muss kein Paketname oder Komponentenname angegeben werden. Tippe einfach den Deep Link und feuere.

Ich habe festgestellt, dass das Testen von Deep-Links über ADB zuweilen lästig und schwierig ist. Daher habe ich diese kleine App dafür gebaut.

11

Ihr Befehl ist falsch, weil Sie es mit einem falschen Paketnamen versuchen. Anstelle von com.myapp.activity.DeepLinkActivity Müssen Sie nur den Paketnamen schreiben, der in build gradle (Modul: app) durch 'application Id' angegeben ist, z. B. wenn Ihre applicationId com.companyname, Dann würde Ihr Befehl so lauten:

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

Nur für den Fall, dass jemand anderes das Problem hat, das ich hatte, nämlich dass adb Shell am start ... Nicht funktioniert, wenn Sie einen file:///... Oder content://... URI in Ihrem Intent-Filter haben, der eine Mime hat Typ angegeben, zum Beispiel

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

Sie müssen den MIME-Typ in der Befehlszeile mit dem Parameter -t angeben:

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

oder Sie erhalten die gleiche Fehlermeldung wie das OP.

Aufgrund der Erfahrungen, die ich gerade gemacht habe, empfehle ich die Verwendung von this Liste der verfügbaren adb-Befehle. Es scheint aktueller zu sein als die Hilfetexte aus der Shell meines Testgeräts, auf dem Android 8.

0
Nantoka