Help us understand the problem. What is going on with this article?

android からapkを取得して、AndroidManifest.xmlを見る方法

More than 1 year has passed since last update.

はじめに

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をつけましょう。

red12sparrow11
新米Android開発者です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした