apkファイルからパッケージ名、バージョン番号などmanifestの情報を取り出す方法

5,703 views
Skip to first unread message

masa

unread,
Aug 27, 2013, 5:31:30 AM8/27/13
to android-g...@googlegroups.com
インストールされていないapkファイル(アクセス可能なファイル)でそれを独自に解析してをパッケージ名、バージョン情報を正確に取得したいと思っています。
外部PCでapktoolを利用してmanifestの復元をやったことはありますが、これをandroid端末上でやりたいと思います。
manifest.xml(バイナリ)からパッケージ情報の取得方法、もしくはバイナリ構造のフォーマットをご存知の方がいましたら教えていただけないでしょうか?

・取得したい情報
  パッケージ名
  バージョン番号
  アプリケーション名(可能であれば)


・フロー的には以下のようになると思います
1, apkファイルからmanifest.xmlのみを抽出
2, manifest.xmlから必要な情報を抜きだす。
※manifest.xmlはバイナリ

fmofmo

unread,
Aug 27, 2013, 8:25:12 AM8/27/13
to android-g...@googlegroups.com
fmofmoと申します。
 
パッケージ名はPackageInfoクラスのpackageNameフィールド。
バージョン番号は同クラスのversionCodeフィールド or versionNameフィールド。
アプリ名はPackageManagerクラスのgetApplicationLabelメソッドあたりから取得できたかと思います。
使い方はググってみてください。上記のキーワードで色々ヒットするかと。
 
あと、もうご存知の事かもしれませんが、Android SDKのaaptであれば
apktoolを使わなくてもapkから直接これらの情報は確認することができます。
 

2013年8月27日火曜日 18時31分30秒 UTC+9 masa:

Sosuke Masui

unread,
Aug 27, 2013, 10:21:13 AM8/27/13
to android-g...@googlegroups.com
ググってみると何件かヒットしますね。

http://d.hatena.ne.jp/tateisu/20100709/1278680893



2013年8月27日火曜日 18時31分30秒 UTC+9 masa:

noxi

unread,
Aug 27, 2013, 12:40:32 PM8/27/13
to android-g...@googlegroups.com
noxiです。

インストール有無に関わらず、AndroidManifest.xmlの情報を取得するだけであればこれで取得出来ます。
PackageManager#getPackageArchiveInfo
http://developer.android.com/reference/android/content/pm/PackageManager.html#getPackageArchiveInfo%28java.lang.String,%20int%29

リソースの中身も含めて取得する必要があるならば、自分でパーサー作って下さい。


2013年8月27日 23:21 Sosuke Masui <esm...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com
> にメールを送信します。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。

oni

unread,
Aug 27, 2013, 12:49:58 PM8/27/13
to android-g...@googlegroups.com
試してませんが、

http://stackoverflow.com/questions/2097813/how-to-parse-the-androidmanifest-xml-file-inside-an-apk-package

にAndroidManifest.xmlの解凍用のコードが載せられていますね。

(2013年08月27日 18:31), masa wrote:
> インストールされていないapkファイル(アクセス可能なファイル)でそれを独
> 自に解析してをパッケージ名、バージョン情報を 正確に取得したいと思って
> います。
> 外部PCでapktoolを利用してmanifestの復元をやったことはありますが、これ
> をandroid端末上でやりたい と思います。
> manifest.xml(バイナリ)からパッケージ情報の取得方法、もしくはバイナリ構
> 造のフォーマットをご存知の方がいま したら教えていただけないでしょうか?
>
> ・取得したい情報
>   パッケージ名
>   バージョン番号
>   アプリケーション名(可能であれば)
>
>
> ・フロー的には以下のようになると思います
> 1, apkファイルからmanifest.xmlのみを抽出
> 2, manifest.xmlから必要な情報を抜きだす。
> ※ manifest.xmlはバイナリ
>
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送
> られています。
> このグループから退会し、メールの受信を停止するには、android-group-
> japan+un...@googlegroups.com にメールを送信します。
> このグループに投稿するには、android-g...@googlegroups.com
> メールを送信してください。
> http://groups.google.com/group/android-group-japan からこのグループに
> アクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out
> にアクセスしてください。

masa

unread,
Aug 27, 2013, 9:00:59 PM8/27/13
to android-g...@googlegroups.com
インストール済みパッケージ対してPackageInfoクラスからパッケージ情報を取得する方法は理解しています。
未インストール状態、apkファイルを直接ダウンロードした状態のファイルからパッケージ情報を抜き出す必要が
あります。


2013年8月27日火曜日 21時25分12秒 UTC+9 fmofmo:

masa

unread,
Aug 27, 2013, 9:07:43 PM8/27/13
to android-g...@googlegroups.com, android.w...@gmail.com
>>noxiさん

おお!! このAPIは知りませんでした。 まだ確認はしていませんが、このAPIでやりたいことを実装できると思います。
ありがとうございました!!


2013年8月28日水曜日 1時40分32秒 UTC+9 noxi:
noxiです。

インストール有無に関わらず、AndroidManifest.xmlの情報を取得するだけであればこれで取得出来ます。
PackageManager#getPackageArchiveInfo
http://developer.android.com/reference/android/content/pm/PackageManager.html#getPackageArchiveInfo%28java.lang.String,%20int%29

リソースの中身も含めて取得する必要があるならば、自分でパーサー作って下さい。


2013年8月27日 23:21 Sosuke Masui <esm...@gmail.com>:
> ググってみると何件かヒットしますね。
>
> http://d.hatena.ne.jp/tateisu/20100709/1278680893
> http://d.hatena.ne.jp/esmasui/20100410/1270920943
>
>
>
> 2013年8月27日火曜日 18時31分30秒 UTC+9 masa:
>>
>>
>> インストールされていないapkファイル(アクセス可能なファイル)でそれを独自に解析してをパッケージ名、バージョン情報を正確に取得したいと思っています。
>> 外部PCでapktoolを利用してmanifestの復元をやったことはありますが、これをandroid端末上でやりたいと思います。
>>
>> manifest.xml(バイナリ)からパッケージ情報の取得方法、もしくはバイナリ構造のフォーマットをご存知の方がいましたら教えていただけないでしょうか?
>>
>> ・取得したい情報
>>   パッケージ名
>>   バージョン番号
>>   アプリケーション名(可能であれば)
>>
>>
>> ・フロー的には以下のようになると思います
>> 1, apkファイルからmanifest.xmlのみを抽出
>> 2, manifest.xmlから必要な情報を抜きだす。
>> ※manifest.xmlはバイナリ
>>
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-japan+unsubscribe@googlegroups.com
> にメールを送信します。
> このグループに投稿するには、android-group-ja...@googlegroups.com にメールを送信してください。

masa

unread,
Aug 27, 2013, 9:14:25 PM8/27/13
to android-g...@googlegroups.com
>>Sosuke Masui さん, spamshutter さん

返信ありがとうございます。
今回の実装はPackageManager#getPackageArchiveInfo で可能だと思いますが、
教えていただいた、バイナリmanifestのデコード方法は知りませんでした。 別件で利用できそうなので、時間があるときに自作のパーサを作成したいと思います。
ありがとうございました。




2013年8月27日火曜日 23時21分13秒 UTC+9 Sosuke Masui:

android.makilette

unread,
Aug 29, 2013, 8:54:11 AM8/29/13
to android-g...@googlegroups.com

安藤です。

単純にパッケージ名、バージョン番号の確認ならsdk のaaptコマンドで確認できます。

調べ方はネットに沢山乗っています

2013/08/28 10:14 "masa" <minadu...@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
Reply all
Reply to author
Forward
0 new messages