Подтвердить что ты не робот

Я пытаюсь протестировать андроид ссылки с глубоким URL-адресами через adb, чтобы запустить приложение

Когда я набираю команду в 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

Мой вопрос, почему мне нужно получить полный путь к моей деятельности, а не только имя пакета? Потому что, когда внешние приложения или браузер попытаются использовать глубокую ссылку, они не будут вызывать активность в моем приложении.

Это мой 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>
4b9b3361

Ответ 1

Вам не нужно указывать полный путь к вашей активности, но если вы хотите проверить, правильно ли вы реагируете на URI в, просто укажите пакет приложения:

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

Также есть ошибка в команде, которую вы указали - там должно быть example://gizmos not example:gizmos

Ответ 2

Лучшее решение для Android Studio объясняется здесь: https://code.tutsplus.com/tutorials/how-to-enable-deep-links-on-android--cms-26317

TL;DR: Android Studio → Выполнить → Изменить настройки

Измените Launch в Launch Options на "URL" и введите в текстовое поле URL правильный URL: "что-то://"

Ответ 3

Как уже упоминалось в другом ответе, это должен быть "example://gizmos", а не "example: gizmos"

В качестве альтернативы, вместо использования adb, вы можете проверить глубокие ссылки непосредственно на Android с помощью приложения Deep Link Tester:

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

Не нужно указывать имя пакета или имя компонента. Просто введите глубокую ссылку и огонь.

Я обнаружил, что тестирование глубоких ссылок через adb иногда было сложным и сложным. Следовательно, я создал это небольшое приложение, чтобы сделать это.

Ответ 4

Ваша команда неверна, потому что вы пытаетесь с неправильным именем пакета. Вместо com.myapp.activity.DeepLinkActivity вам нужно написать только имя пакета, указанное в build gradle (Module: app), по идентификатору приложения, например, если ваш applicationId com.companyname, тогда ваша команда будет выглядеть так:

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

Ответ 5

На тот случай, если у кого-то еще возникла проблема, а именно, что adb shell am start... не работает, если у вас есть фильтр file:///... или content://... в вашем фильтре намерений например, указан тип 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>

Вам необходимо указать тип mime в командной строке с помощью параметра -t:

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.