回答:
aapt dump badging <path-to-apk> | grep package:\ name
|
入力し、Enterキーを押して、出力で目的のパラメーターを検索するだけです。それaapt
はあなたのパスにある必要があることを覚えておいてください
aapt
コマンドはの下にありAndroid\SDK\build-tools\version
ます。on Windowsコマンドは次のaapt dump badging <path-to-apk> | findstr -i "package: name"
いずれかですaapt dump badging <path-to-apk>
あなたの携帯電話にapkをインストールすることができます
adbを使用して接続すると、adbシェルを起動してpm list packages -fを実行できます。これは、インストールされている各apkのパッケージ名を示します。
これ は、Intentを使用してWebからマーケットアプリを起動するためのAndroidアプリのパッケージ名の検索から取得
su
最初にコマンドを使用します。
pm list packages -f | grep term-to-search-for
@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ユーザーを助けることを願っています!
MS Notepadを使用してAndroidManifest.xmlを開いた場合、フレーズpackage
を検索すると次のようになります。
package manifest $xxx.xxxxxxx.xxxxxxx |
ここで、xxx.xxxxxxx.xxxxxxxはパッケージ名であり、各文字の後にスペースを入れただけです。
特定のツールがインストールされていない場合に便利な方法です。
次の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
プログラムでこれを行う必要がある場合、それは単に答えを脳に取り込むよりも少し複雑です。すべてのアプリの署名に使用するスクリプトがありますが、それぞれ異なるキーを使用しています。ここでは、パッケージ名だけを出力として取得する2つの方法を示します。これにより、パッケージ名を変数に入れたり、必要な処理を行うことができます。
出力例:(com.example.appname
そしてそれ以上)
aapt
-Android Asset Packaging Tool、SDKツールダウンロードの一部
フィールドセパレータとして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'
このフォーマットを維持するという開発者の責任はありません。
フィールドセパレータとしてawk
指定"
を使用して、で行を検索し、その行package=
の2番目の「フィールド」のみを出力します。
aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'
この方法の弱点は、出力のセクションでpackage=
のみ出力することに依存していることAndroid Manifest:
です。このフォーマットを維持するという開発者からのコミットメントはありません。
apkファイルを展開しapktool d
て、AndroidManifest.xmlを読み取ります。
これは最良の方法ですが、AndroidManifest.xmlはバイナリファイルであり、テキストに変換するために私が見るすべてのSO回答は機能しません。(apktool d
シンプルの代わりに使用unzip
することでこれを行うことが想定されていますが、そうではありません。)この問題の解決策がある場合はコメントしてください
別の解決策は、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
スマートフォンでAPKを入手済みの場合、非常に簡単な方法があります。これらのアプリのいずれかを使用してください:
非常に簡単な方法は、apkanalyzerを使用することです。
apkanalyzer manifest application-id "${_path_to_apk}"
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}'
もちろん、他のツールを使用してフィルタリングを行うこともできます。
一部のテストシナリオのように、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でも動作するはずです。
私は逆コンパイルも試してみましたが、うまくいきましたが、最近、最も簡単な方法を見つけました:
AppiumのWebサイトからAppiumをダウンロードしてインストールする
Appium-> Android設定を開き、対象のapkファイルを選択します。そして、あなたはあなたが望むすべて、パッケージ情報、活動情報を取得します。
これをバッチスクリプトで使用するには、スクリプトにパッケージ名のみを返すようにすると便利です(たとえば、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`
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のパスを編集してください。
ワーキング:
%adb% install %apk%
デバイスが接続されている場合、コマンドはアプリケーションをインストールします。%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
パッケージ名とapkのバージョンなどの他のいくつかの詳細が取得され、apkと同じ場所にあるtemp.txtファイルに保存されます。extracts the package name and assigns to
pkgName`変数%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
にアプリを起動します。本質的に、上記のコードは、デスクトップ「Desktop \ APK \ Instant_Instal \」の指定された場所からデバイスにapkをインストールし、アプリケーションを起動します。
(上記のように).apkファイルでパッケージ名を見つけることができなかったため、アプリ「ES Datei Explorer」/「ES File Explorer」(無料バージョン)で機能を確認しました。すでにインストールされていました。このツールでは、パッケージ名が適切に表示されます。
私は良いファイルエクスプローラーが携帯電話に欠けてはいけないと思うので、このツールを使用することをお勧めします(すでに携帯電話にapkをインストールしていて、パッケージ名を知っている必要がある場合)。
AAPTが廃止予定であるとAndroidのドキュメントで言及されているため、LinuxでAAPT2コマンドを使用してパッケージ名を取得する方法は次のとおりです。
./aapt2 dump packagename <path_to_apk>
私は古いバージョンのGradleビルドを使用しているため、ここに記載されているように、新しいバージョンのAAPT2をダウンロードする必要がありました。
私のSDKのビルドツールを使用して-25.0.3、26.0.1および27.0.3を実行すると、aapt2コマンドを実行するとエラーが表示されます: 'packagename'を開けません:そのようなファイルまたはディレクトリはありません。そのため、AAPT2の新しいバージョンを選びました。
Linuxには3.3.0-5013011を使用しました。