web-dev-qa-db-ja.com

私はアプリを起動するためにadbを介してAndroidディープリンクURLをテストしようとしています

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

アクティビティへのフルパスを指定する必要はありませんが、URIに適切に反応するかどうかをテストする場合inアプリパッケージを指定するだけです:

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

また、指定したコマンドにバグがあります-example://gizmos not example:gizmos

71
pixel

Android studioの最適なソリューションはここで説明されています: https://code.tutsplus.com/tutorials/how-to-enable-deep-links-on-Android-- cms-26317

TLDR:Android Studio-> Run-> Edit Configurations

[起動オプション]の[起動]を[URL]に変更し、テキストフィールドのURLに正しいURL「something://」を入力します。

22
RoaflinSabos

他の回答で述べたように、「example:gizmos」ではなく「example:// gizmos」である必要があります

または、adbを使用する代わりに、Androidでディープリンクテスターアプリを使用して直接ディープリンクをテストできます。

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

パッケージ名やコンポーネント名について言及する必要はありません。ディープリンクを入力して起動するだけです。

私はadbを介したディープリンクのテストが面倒で困難な場合があることを発見しました。したがって、私はそれを行うためにこの小さなアプリを構築しました。

11

間違ったパッケージ名を使用しようとしているため、コマンドが正しくありません。com.myapp.activity.DeepLinkActivityの代わりに、application Idがcom.companynameの場合、コマンドは次のようになります。

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

MIMEタイプが指定されているインテントフィルターにadb Shell am start ...またはfile:///...URIがある場合、他の誰かが私が抱えている問題、つまりcontent://...が機能しないという場合に備えて、例

<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と同じエラーメッセージが表示されます。

経験に基づいて、 this 利用可能なadbコマンドのリストを使用することをお勧めしました。これは、Android 8。

0
Nantoka