#はじめに
Androidの暗黙的インテントを使用して、他のアプリを起動しようと思いました。
起動するためには、他アプリの以下の情報が必要だとわかりました。
data android:scheme
data android:host
data android:pathPrefix
これらの情報を知るには、そのアプリのAndroidManifest.xmlを見ればよいです。
AndroidManifest.xmlを見るには、そのアプリのapkが必要です。
本ページは、android からapkを取得して、AndroidManifest.xmlを見る方法のメモです。
#参考サイト
以下のサイトを参考にしました。サイト作成者の皆様、ありがとうございました。
http://nlogic.jp/?p=284
http://blog.clock-up.jp/entry/2015/02/28/android-pull-apk
https://qiita.com/T_2/items/0236162c294ffdf17ca8
#確認環境
・Windows7のPowerShellを使用しました。
・Android_Sdkは、Android Studioインストール時にインストールしたものを使用します。
・Javaが使用できるPCであること。
#方法
※パズル&ドラゴンのAndroidManifest.xmlを見る場合です。
1.PCのブラウザでGooglePlayのパズル&ドラゴンのサイトに行きます。
※https://play.google.com/store/apps/details?id=jp.gungho.pad
パッケージ名は、URLの最後のほうにあります。パズル&ドラゴンの場合、jp.gungho.padがパッケージ名です。このタイミングだと、当たりがつくくらいで大丈夫です。
2.PCのPowerShellを起動し、Android_Sdkが存在するパスに移動します。
私の場合は、C:\Users\【ユーザー名】\AppData\Local\Android\sdk\platform-tools、でした。
3.PowerShellで、.\adb shell pm list packages -f、を実行する。実行すると、パッケージ一覧が出力されます。
.\adb shell pm list packages -f > a.txt、にすると、a.txtに一覧が出力されます。
4.1.で見つけたパッケージ名で検索します。
私の場合、package:/data/app/jp.gungho.pad-1/base.apk=jp.gungho.pad、が該当しました。
私のAndroidに入っているガンボーのアプリはパズル&ドラゴンだけなので、これが、パズル&ドラゴンのapkになります。
5..\adb pull [apkパス]、を実行して、androidからapkを取得します。
今回だと、.\adb pull /data/app/jp.gungho.pad-1/base.apk、です。
6.apkの拡張子をzipに変更してエクスプローラで開き、AndroidManifest.xmlを取り出します。AndroidManifest.xmlは、Android_Sdkが存在するパスに入れます。
7.AndroidManifest.xmlはバイナリ化されているので、変換操作が必要になります。変換には、AXMLPrinter2.jarを使用するので、ダウンロードしてAndroid_Sdkが存在するパスに入れます。
※jarの場所:https://code.google.com/archive/p/android4me/downloads
8.java -jar AXMLPrinter2.jar AndroidManifest.xml、を実行して、変換します。java -jar AXMLPrinter2.jar AndroidManifest.xml > a.txt、にすると、変換結果が出力されます。
結果を確認して、以下の必要な情報が確認できました。
android:scheme="puzzleanddragons"
android:host="jp.gungho.pad"
android:pathPrefix="/"
#他アプリを呼び出すコード
以下のように、Intentを使用すれば起動します。
※以下の処理をButtonのandroid::onClick、で呼び出して、パズル&ドラゴンが起動できました。
// インテントの生成
Intent intent = new Intent(Intent.ACTION_VIEW);
// URI設定
String strUri = String.format("%s://%s/", "puzzleanddragons", "jp.gungho.pad");
Uri uri = Uri.parse(strUri);
// URIをインテントに設定
intent.setData(uri);
// 次のアクティビティ起動
startActivity(intent);
対象のアプリがないときに上記処理が実行されるとActivityNotFoundExceptionの例外で落ちます。忘れずにtry~catchをつけましょう。