ADB経由でアプリのパッケージ名と共通名を取得する


14

パッケージ名 ADBを介してAndroidデバイスにインストールされたアプリの共通名の両方を取得するか、少なくともパッケージ名がわかっている場合は共通名を取得する可能性を探しています。私たちのサイトをすばやく検索すると、2つの関連する質問が表示されましたが、私の問題は解決しません。

可能な場合は、デバイスから直接情報を取得する方法を探しています。これらの2つの質問にある「任意の」方法(「Webルックアップ」や「アプリ経由」を含む)ではありません。

パッケージの詳細を取得するために利用できる複数のツールがあることを知っています。

  • adb dumpsys package:これにはすべてのパッケージが詳細情報とともにリストされますが、「共通名」は表示されません
  • adb shell pm list:パッケージ名のみを提供します
  • aapt共通名を取得することはでき.apkますが、最初にデバイスからファイルをプルする必要がありますが、これはあまり便利ではありません(そして、多くのアプリや大きなアプリをインストールすると明らかに遅くなります)

私は何か見落としてますか?情報はデバイス上にある必要があることを知っています(GUIでアプリ名を表示する方法は他にありますか?.apkGUIが「共通名」を必要とするたびにAndroidがファイルを解析することを疑います)。ADBを直接使用して、それを手に入れる方法はありますか?


TL; DR

背景(誰かが好奇心が強い場合):アクロバットに戻らなくても、どのデバイスからでもユーザーアプリのリストをすばやく取得できるようにしたいです。パッケージ名のリストはを使用して取得できますadb shell pm list -3が、これらはパッケージ名のみであるため、アプリの認識は推測作業です。したがって、特定のパッケージ名の共通名を取得するADBコマンドがある場合、次のようなループを使用するだけでfor pkg in $(adb shell pm list -3); do echo "- $(adb <whatever_the_command_is> $pkg) ($pkg)"; done、インストールされたすべてのユーザーアプリの一覧をパッケージ名と共に「人間が読み取れる形式」で取得できます。

ユースケース:

  • インストールされている「スーパーフロース」アプリを確認します(削除できます)。
  • 複数のデバイスからのリストをクロスチェック
  • ドキュメンテーション ;)
  • そしておそらくもっと(しかし、上記の3は私がそれを必要とするものです)

ただのアイデア(すでに試したと思う?)。なぜあなたはアンドロイド用にaaptをコンパイルせず、代わりにシェルから実行するのですか?:D
user3344236

1
@ user3344236私はその可能性を知っています。しかし、問題のデバイスに何かをインストールするオプション、特に自己コンパイルされたバイナリではない場合がありますデバイスを変更するのではなく、探索するだけです」)。
イジー

したがって、2番目のアイデアは、adbシェル経由で実行するツールを自分で作成することです...デバイス上で変更されたadbdを使用せず、そこにいくつかのファイルをプッシュすることもありません。これを達成するには時間がかかると思います(成功する場合):D
user3344236

@ user3344236は、特にAndroid開発者ではないので、あまりにも心配です。私は現在、「Webベースのソリューション」(「Google Playルックアップ」に似ています)を使用しています。ここにはネイティブソリューションが存在しないようです(まだ?)。
イジー

こんにちはIzzy!上記のコメントを考慮すると、ルート化されていないデバイスを考慮したソリューションが必要であることを意味しますか?
消防士

回答:


8

これは一般的なものではないため(最終的には一部のデバイスでのみ機能します)、最終的な回答ではありませんが、少なくとも開始点です。

我々は考え出したキットカット(アンドロイド4.4)としてと船上記少なくともCMベースのROMで、aaptで利用可能なバイナリ/system/bin1。ROMにそれがなく、デバイスへのバイナリのインストールがオプションである場合、ここで見つけることができます

を使用aaptすると、アプリ名を取得できます

aapt d badging <path to apk> | grep "application: label" |awk '{print $2}'

出力はのようなものになりlabel='Funny App'、アプリ名を簡単に解析できます。たとえば、

aapt d badging <path to apk> | grep 'application: label' | sed -n \"s/.*label\='\([^']*\)'.*/\1/p\"

(アプリ名に一重引用符が含まれている場合は適切ではありませんが、それは化粧品としてカウントされる可能性があります。または、sed部分を改善してそれに対処する方法を考えます)。


1:チェックしたキットカット以上のストックROMでこれを見つけられなかったため、CMベースのROMのみである可能性があります


3
読者への注意:そのaaptバイナリを使用するためにルート化されたデバイスを持っている必要はありません。aaptPCでバイナリをダウンロードして名前を変更し、バイナリにLinux互換の実行可能権限を設定してにプッシュし/data/local/tmp、絶対パス/data/local/tmp/aaptを使用してこれらのコマンドでバイナリを使用できます。
消防士

パッケージの名前(元の質問の最初の部分)については、aapt d badging <path to apk> | grep 'package: name' | awk '{print $2}'
gmoz22

7

Android 5.0.2を実行しているMoto Gの第2世代で実行した上からいくつかのわずかな変更を必要とした、ルート化されていない電話のソリューションを次に示します。

/ system / binにaaptバイナリがなかったため、最初にhttps://android.izzysoft.de/downloadsからダウンロードしてみました

しかし、それを実行しようとすると、次のようなエラーが表示されました。

エラー:位置独立実行可能ファイル(PIE)のみがサポートされています。

それで、PIEバージョンを検索して見つけました:https : //github.com/Calsign/APDE/blob/master/APDE/src/main/assets/aapt-binaries/aapt-arm-pie

そして、これはバイナリを/ data / local / tmpにコピーすることで機能しました:

adb push aapt-arm-pie /data/local/tmp
adb shell chmod 0755 /data/local/tmp/aapt-arm-pie

それで:

adb shell pm list packages -3 -f

サードパーティアプリ(システムアプリではなく、インストールしたアプリ)のリストを取得し、aaptで上記のコマンドからパッケージを使用して、パッケージに関する情報を取得できます-例:

adb shell /data/local/tmp/aapt-arm-pie d badging /data/app/com.facebook.katana-3/base.apk

以下は、サードパーティアプリの「共通」名を取得するためのスクリプト(Linuxクライアント用)です:」

for pkg in `adb shell pm list packages -3 -f | awk -F= '{sub("package:","");print $1}'`
do
  adb shell /data/local/tmp/aapt-arm-pie d badging $pkg | awk -F: '
      $1 == "application-label" {print $2}'
done

パッケージとバージョンも必要な場合は、最後の1行を以下から変更します。

$1 == "application-label" {print $2}'

に:

$1 == "package" { split($2,space," ")
name=space[1];version=space[3]}
$1 == "application-label" {print name, version, $2 }'

出力例:

name='com.ultimarom.launchnavigation' versionName='1.28' 'Navigation' name='com.enhanced.skineditorstudio' versionName='3.3' 'Custom Skin Creator' name='com.mojang.minecraftpe' versionName='1.2.6.60' 'Minecraft' name='org.videolan.vlc' versionName='2.5.13' 'VLC' name='com.jrustonapps.myauroraforecast' versionName='1.7.2' 'My Aurora Forecast' name='de.j4velin.wifiAutoOff' versionName='1.7.6' 'WiFi Automatic' name='com.facebook.katana' versionName='153.0.0.54.88' 'Facebook' name='com.metago.astro' versionName='6.0.5' 'ASTRO File Manager' name='za.co.hardrive.smartinfo.parkrun' versionName='2.0.2' 'My 5krun' name='com.PYOPYO.StarTrackerVR' versionName='1.0.1' 'StarTracker VR' name='cz.aponia.bor3.offlinemaps' versionName='1.1.19' 'Offline Maps' name='com.groupon' versionName='16.11.63973' 'Groupon' name='com.ebay.mobile' versionName='5.16.1.2' 'eBay' name='com.runtastic.android' versionName='8.1.1' 'Runtastic' name='com.google.android.diskusage' versionName='3.8.3' 'DiskUsage'

マイク


マイクに感謝します。Mike:1回目はシェルスクリプト、2回目はaapt!のARMバリアントへのポインタです。時間が許せばすぐにチェックアウトします(現在急いでいます)。現時点では賛成です。検証してから承認される可能性があります:)
Izzy

PS:私のダウンロードページは、指定したソースにもリンクするようになりました。「1レベル上げる」だけなので、ARMビルドとx86ビルドのどちらかを選択できます。
イジー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.