Android APKのパッケージ名を読み取る


200

Android APKのパッケージ名を取得する必要があります。APKを解凍してのコンテンツを読み取ろうとしましたAndroidManifest.xmlが、テキストファイルではないようです。

APKのパッケージ名を抽出するにはどうすればよいですか?

回答:


320
aapt dump badging <path-to-apk> | grep package:\ name

1
これをAndroidコード内から呼び出す方法はありますか?アプリからダウンロードしたapkのパッケージを起動できるようにしたい。
Matt Wear '19年

7
apptダンプバッジ<path-to-apk> | grepパッケージ:\名前
herbertD 2013年

2
@Campiadorパイプまで|入力し、Enterキーを押して、出力で目的のパラメーターを検索するだけです。それaaptはあなたのパスにある必要があることを覚えておいてください
Patrick

これをプログラムで(スクリプト用に)取得する必要がある場合は、以下の私の回答を参照してください。
Bruno Bronosky、2015年

15
aaptコマンドはの下にありAndroid\SDK\build-tools\versionます。on Windowsコマンドは次のaapt dump badging <path-to-apk> | findstr -i "package: name"いずれかですaapt dump badging <path-to-apk>
イクイマン

75

あなたの携帯電話にapkをインストールすることができます

adbを使用して接続すると、adbシェルを起動してpm list packages -fを実行できます。これは、インストールされている各apkのパッケージ名を示します。

これ は、Intentを使用してWebからマーケットアプリを起動するためのAndroidアプリのパッケージ名の検索から取得


1
また、管理者特権で実行していることを確認する必要があります。基本的に、ターミナルでは、su最初にコマンドを使用します。
palswim 2013

4
特定のパッケージ名を検索するにはpm list packages -f | grep term-to-search-for
Patrick Favre 2015

14

@hackbodの回答に基づいていますが、Windowsに関連しています。

aaptコマンドはにありAndroid\SDK\build-tools\versionます。appt command(Android Asset Packaging Tool)の詳細については、https://stackoverflow.com/a/28234956/812915を参照してください。

dumpサブコマンドaaptは、パッケージの個々の要素または部分の値を表示するために使用されます。

aapt dump badging <path-to-apk>

package: name情報のある行のみを表示したい場合は、findstr

aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"

それが他のWindowsユーザーを助けることを願っています!


13

グーグルプレイを見ていて、そのパッケージ名を知りたい場合は、URLまたはアドレスバーを見ることができます。パッケージ名を取得します。こちらcom.landshark.yaumがパッケージ名

 https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd

12

MS Notepadを使用してAndroidManifest.xmlを開いた場合、フレーズpackageを検索すると次のようになります。

package manifest $xxx.xxxxxxx.xxxxxxx |

ここで、xxx.xxxxxxx.xxxxxxxはパッケージ名であり、各文字の後にスペースを入れただけです。

特定のツールがインストールされていない場合に便利な方法です。


これは、アプリのコードがgithubにある場合に特に便利です。他の方法よりはるかに簡単です、ありがとう!
サリンク

1
APKを解凍しましたが、AndroidManifest.xmlはバイナリファイルでした。奇妙ですが本当です。
ファットマン

12

次のbashスクリプトは、パッケージ名とメインアクティビティ名を表示します。

apk_package.sh

package=$(aapt dump badging "$*" | awk '/package/{gsub("name=|'"'"'","");  print $2}')
activity=$(aapt dump badging "$*" | awk '/activity/{gsub("name=|'"'"'","");  print $2}')
echo
echo "   file : $1"
echo "package : $package"
echo "activity: $activity"

次のように実行します。

apk_package.sh /path/to/my.apk

grepとsedをawkと組み合わせないでください。awkを使用するだけで十分です。
Bruno Bronosky、2015

8

プログラムによる回答

プログラムでこれを行う必要がある場合、それは単に答えを脳に取り込むよりも少し複雑です。すべてのアプリの署名に使用するスクリプトがありますが、それぞれ異なるキーを使用しています。ここでは、パッケージ名だけを出力として取得する2つの方法を示します。これにより、パッケージ名を変数に入れたり、必要な処理を行うことができます。

出力例:(com.example.appnameそしてそれ以上)

必要条件

aapt-Android Asset Packaging Tool、SDKツールダウンロードの一部

解決策1

フィールドセパレータとしてawk指定'を使用して、で行を検索し、その行package: name=の2番目の「フィールド」のみを出力します。

aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'

このメソッドの弱点は、パッケージ情報フィールドを同じ順序で出力するためにaaptに依存していることです。

package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'

このフォーマットを維持するという開発者の責任はありません。

解決策2

フィールドセパレータとしてawk指定"を使用して、で行を検索し、その行package=の2番目の「フィールド」のみを出力します。

aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'

この方法の弱点は、出力のセクションでpackage=のみ出力することに依存していることAndroid Manifest:です。このフォーマットを維持するという開発者からのコミットメントはありません。

解決策3

apkファイルを展開しapktool dて、AndroidManifest.xmlを読み取ります。

これは最良の方法ですが、AndroidManifest.xmlはバイナリファイルであり、テキストに変換するために私が見るすべてのSO回答は機能しません。(apktool dシンプルの代わりに使用unzipすることでこれを行うことが想定されていますが、そうではありません。)この問題の解決策がある場合はコメントしてください


1
コピーするコマンドを1行だけではなく、理解するためのより多くの情報を提供してくれてありがとう。
Ali Zeynali

4

簡単な解決策は、Open Android Studio-> Build-> Analyze Apk ... APKを参照して選択することです。これで、パッケージ名を見つけることができ、ほとんど読み取ることができます。


2

パッケージ名だけを知りたい場合は、adb logcatを実行し、必要なアクティビティを起動します。パッケージ名に関するヒントが表示されます。


2

別の解決策は、aaptリストを使用し、sedを使用してそれを解析することです。

aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"


一部のアプリでは、パッケージグループ名が偶然にもパッケージ名と同じです。実際にA:package="com.example.appname"は、Android Manifest:セクションのを使用する必要がありますaapt list -a
Bruno Bronosky



1

Linuxでパッケージ名のみを抽出する最善かつ最も簡単な方法は、

aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/"

説明:

  1. AAPTはAPK情報を抽出します
  2. パッケージ情報に関する行のみを保持する「パッケージ」のGrep
  3. 次の正規表現のみを使用して、sedで行全体をパッケージ名にpackage: name='([a-z0-9.]*)'.*置き換え、最初の(そして唯一の)一致するグループに置き換えます。

1

APKからAndroidManifest.xmlを抽出し、すべてのNULLバイトを削除し、文字列 'manifest'の後まですべてスキップして、長さバイトの後にパッケージ名(およびその後ろに続くもの)を続けることができます。難しいタスクには優れたGEMAツールを使用するため、コマンドは次のようになります。

7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{$1};$2}'

もちろん、他のツールを使用してフィルタリングを行うこともできます。


1

一部のテストシナリオのように、Android SDKがインストールされていない場合は、次のbashメソッドを使用してパッケージ名を取得できます。

getAppIdFromApk() {
  local apk_path="$1"

  # regular expression (required)
  local re="^\"L.*/MainActivity;"
  # sed substitute expression
  local se="s:^\"L\(.*\)/MainActivity;:\1:p"
  # tr expression
  local te=' / .';

  local app_id="$(unzip -p $apk_path classes.dex | strings | grep -Eo $re | sed -n -e $se | tr $te)"

  echo "$app_id"
}

Macでテスト済み。'strings'と 'unzip'はほとんどのLinuxで標準なので、Linuxでも動作するはずです。


0

エミュレータにPackage_Name_Viewer.apkをインストールできます。次に、エミュレータにインストールれているすべてのアプリのパッケージ名を確認できます。


0

私は逆コンパイルも試してみましたが、うまくいきましたが、最近、最も簡単な方法を見つけました:

  1. AppiumのWebサイトからAppiumをダウンロードしてインストールする

  2. Appium-> Android設定を開き、対象のapkファイルを選択します。そして、あなたはあなたが望むすべて、パッケージ情報、活動情報を取得します。


0

これをバッチスクリプトで使用するには、スクリプトにパッケージ名のみを返すようにすると便利です(たとえば、APKがあるときにアプリをアンインストールする場合)。

ここに私が使用するスクリプトがあります:

# extract the android package id from a built apk file
# usage ./getPackageName.sh <path-to-apk>
line=`aapt dump badging "$1" | grep package:\ name`

# above returns:
# package: name='com.calvium.myapp' versionCode='1' versionName='1.0'
if [[ $line =~ name=\'(.+)\'\ versionCode ]]; then
    echo ${BASH_REMATCH[1]}
else
    echo "Failed to find package name"
    exit 1
fi

要旨で利用可能

だからあなたは書くことができます:

adbアンインストール `./getPackageName.sh file.apk`


0

Windowsの場合、次のように機能しました。

:: // Initializing variables
SET adb="C:\Users\<User name>\AppData\Local\Android\Sdk\platform-tools\adb"
SET aapt="C:\Users\<User name>\AppData\Local\Android\Sdk\build-tools\22.0.0\aapt"
SET APKPath=C:\Users\<User name>\Desktop\APK\Instant_Instal\

CD %APKPath%

:: // Searching for apk file and storing it
FOR /F "delims=" %%f IN ('dir /S /B *.apk') DO SET "APKFullPath=%%f"
SET apk=%APKFullPath%

:: // Command adb install apk, run apk
%adb% install %apk%

:: // Fetching package name from apk
%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
FOR /F "tokens=2 delims='" %%s IN (temp.txt) DO SET pkgName=%%s
del temp.txt

:: // Launching apk
%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1

pause

注意

システム内のadb、aapt、およびapkの場所のパスに従って、adb、aapt、APKPathのパスを編集してください。

ワーキング:

  • ここでは、デスクトップのフォルダ「\ Desktop \ APK \ Instant_Instal \」にapkを追加しました。
  • %adb% install %apk%デバイスが接続されている場合、コマンドはアプリケーションをインストールします。
  • これにより、%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txtパッケージ名とapkのバージョンなどの他のいくつかの詳細が取得され、apkと同じ場所にあるtemp.txtファイルに保存されます。
  • FOR / F "tokens = 2 delims = '" %% s IN(temp.txt)DO SET pkgName = %% s extracts the package name and assigns topkgName`変数
  • 最後%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1にアプリを起動します。

本質的に、上記のコードは、デスクトップ「Desktop \ APK \ Instant_Instal \」の指定された場所からデバイスにapkをインストールし、アプリケーションを起動します。


0

(上記のように).apkファイルでパッケージ名を見つけることができなかったため、アプリ「ES Datei Explorer」/「ES File Explorer」(無料バージョン)で機能を確認しました。すでにインストールされていました。このツールでは、パッケージ名が適切に表示されます。
私は良いファイルエクスプローラーが携帯電話に欠けてはいけないと思うので、このツールを使用することをお勧めします(すでに携帯電話にapkをインストールしていて、パッケージ名を知っている必要がある場合)。


0

AAPTが廃止予定であるとAndroidのドキュメントで言及されているため、LinuxでAAPT2コマンドを使用してパッケージ名を取得する方法は次のとおりです。

./aapt2 dump packagename <path_to_apk>

私は古いバージョンのGradleビルドを使用しているため、ここに記載されているように、新しいバージョンのAAPT2をダウンロードする必要がありました。

Google MavenからAAPT2をダウンロード

私のSDKのビルドツールを使用して-25.0.3、26.0.1および27.0.3を実行すると、aapt2コマンドを実行するとエラーが表示されます: 'packagename'を開けません:そのようなファイルまたはディレクトリはありません。そのため、AAPT2の新しいバージョンを選びました。

Linuxには3.3.0-5013011を使用しました。


0

Analyze APK...Android Studioの[ビルド]メニューから使用できます。新しいウィンドウの上部にパッケージ名が表示されます。


-1

aaptリスト-a "path_to_apk"

非常に長くなる可能性があるため、.txtで保存することをお勧めします。そう:

aaptリスト-a "path_to_apk"> file.txt

次に、現在のディレクトリにあるfile.txtを確認します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.