あるAndroidアプリが応答できるURLスキームを調べる

手元にソースコードがない任意のAndroidアプリで、そのアプリが応答できるURLスキームを調べたいときがある。
以下の方法で調べることができる。

1. 対象のアプリのpackage nameを調べる

play storeのURLをみればid=以降がpackage nameになっている。

https://play.google.com/store/apps/details?id=com.example.targetapp&hl=ja

2. 対象アプリのAPKを取得する

実機にインストール、adbでapkのパスを調べてadb pullするのが早い

adb shell pm list packages -f | grep com.example.targetapp

すると以下のような出力が得られる。

package:/data/app/com.example.targetapp-1/base.apk=com.example.targetapp-1

これをもとにadb pullする。

adb pull /data/app/com.example.targetapp-1/base.apk

3. intent-filterの内容を調べる

aaptをつかえばパッケージの詳細を調べることができる。aaptはSDK HOMEの build-tools/{build tool version} 以下にある。

aapt l -a base.apk

出力からintent-filterの項目を探して、応答しそうなURLをつくればよい。
たとえば、以下のようなintent-filterの場合、 http://sugoiapp/some/interesting/path に応答しそうだということがわかる。

        E: intent-filter (line=xxx)
          A: android:autoVerify(0x00...)=(type 0x12)0xffffffff
          E: action (line=xxx)
            A: android:name(0x00...)="android.intent.action.VIEW" (Raw: "android.intent.action.VIEW")
          E: category (line=xxx)
            A: android:name(0x00...)="android.intent.category.DEFAULT" (Raw: "android.intent.category.DEFAULT")
          E: category (line=xxx)
            A: android:name(0x00...)="android.intent.category.BROWSABLE" (Raw: "android.intent.category.BROWSABLE")
          E: data (line=xxx)
            A: android:scheme(0x00...)="http" (Raw: "http")
          E: data (line=xxx)
            A: android:scheme(0x00...)="https" (Raw: "https")
          E: data (line=xxx)
            A: android:host(0x00...)="sugoiapp" (Raw: "sugoiapp")
          E: data (line=xxx)
            A: android:pathPrefix(0x00...)="/some/interesting/path" (Raw: "/some/interesting/path")

4. 実際にintentを起動してみる

adbコマンドをつかえば、実際にそのURLスキームをintentとして起動することができる。

adb shell am start -a android.intent.action.VIEW -d http://sugoiapp/some/interesting/path

参考

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.