Baca nama paket APK Android

200

Saya perlu mendapatkan nama paket APK Android. Saya sudah mencoba unzip APK dan membaca isinya AndroidManifest.xml, tetapi sepertinya itu bukan file teks.

Bagaimana saya bisa mengekstrak nama paket APK?

Dagang
sumber

Jawaban:

320
aapt dump badging <path-to-apk> | grep package:\ name
hackbod
sumber
1
Apakah ada cara untuk memanggil ini dari dalam kode Android? Saya ingin dapat meluncurkan paket apk yang saya unduh melalui aplikasi saya.
Matt Wear
7
appt dump badging <path-to-apk> | paket grep: \ name
herbertD
2
@Ampiador Anda cukup mengetik hingga pipa |, tekan enter dan kemudian cari output untuk parameter yang Anda inginkan. Ingatlah bahwa itu aaptperlu di jalan Anda
Patrick
Lihat jawaban saya di bawah ini jika Anda perlu mendapatkan ini secara terprogram (untuk skrip).
Bruno Bronosky
15
aaptperintah terletak di bawah Android\SDK\build-tools\version. pada perintah windows bisa aapt dump badging <path-to-apk> | findstr -i "package: name"atauaapt dump badging <path-to-apk>
equiman
75

Anda dapat menginstal apk di ponsel Anda, lalu

terhubung menggunakan adb, Anda dapat meluncurkan shell adb dan menjalankan paket daftar pm -f, yang menunjukkan nama paket untuk setiap apk diinstal.

Ini diambil dari Temukan nama paket untuk aplikasi Android untuk menggunakan Intent untuk meluncurkan aplikasi Market dari web

Danail
sumber
1
Selain itu, Anda harus memastikan bahwa Anda menjalankan dengan hak istimewa yang ditinggikan. Pada dasarnya, di terminal, gunakan superintah terlebih dahulu.
palswim
4
untuk mencari nama paket spesifikpm list packages -f | grep term-to-search-for
Patrick Favre
14

Berdasarkan jawaban @hackbod ... tetapi terkait dengan windows.

aaptperintah terletak di Android\SDK\build-tools\version. Jika Anda memerlukan info lebih lanjut tentang apa itu appt command(Perangkat Pengemasan Aset Android) baca ini https://stackoverflow.com/a/28234956/812915

The dumpsub-perintah aaptyang digunakan untuk menampilkan nilai-nilai elemen individu atau bagian dari sebuah paket:

aapt dump badging <path-to-apk>

Jika Anda hanya ingin melihat baris dengan package: nameinfo, gunakanfindstr

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

Semoga ini bisa membantu pengguna windows lainnya!

Equiman
sumber
13

Jika Anda mencari di google play dan ingin tahu nama paketnya maka Anda dapat melihat url atau bilah alamat. Anda akan mendapatkan nama paket. Ini com.landshark.yaumnama paketnya

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

Jika Anda membuka AndroidManifest.xml menggunakan MS Notepad, cari frasa packagedan Anda akan menemukan yang berikut:

package manifest $xxx.xxxxxxx.xxxxxxx |

di mana xxx.xxxxxxx.xxxxxxx adalah nama paket Anda, hanya ditulis dengan spasi setelah setiap karakter.

Ini berguna saat Anda tidak memiliki alat khusus yang diinstal.

Wojciech
sumber
Ini sangat berguna jika kode untuk aplikasi ada di github! Jauh lebih mudah daripada metode lainnya, terima kasih!
sarink
1
Saya membongkar APK, tetapi AndroidManifest.xml adalah file biner. Aneh tapi benar.
phatmann
12

Skrip bash berikut akan menampilkan nama paket dan nama aktivitas utama:

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"

jalankan seperti ini:

apk_package.sh /path/to/my.apk
Taman Brad
sumber
Jangan pernah menggabungkan grep dan sed dengan awk. Menggunakan awk sudah cukup.
Bruno Bronosky
8

Jawaban Programatik

Jika Anda perlu melakukan ini secara terprogram, itu sedikit lebih terlibat daripada hanya memasukkan jawabannya ke dalam otak Anda. Saya memiliki skrip yang saya gunakan untuk menandatangani semua aplikasi kami, tetapi masing-masing menggunakan kunci yang berbeda. Berikut adalah 2 cara untuk mendapatkan hanya Nama Paket sebagai output sehingga Anda dapat memasukkannya ke dalam variabel atau melakukan apa pun yang Anda perlukan.

Contoh output: com.example.appname (dan tidak lebih)

Persyaratan

aapt - Alat Pengemasan Aset Android, bagian dari unduhan SDK Tools

Solusi 1

Menggunakan awksebutkan 'sebagai Pemisah Bidang, cari baris dengan package: name=, dan cetak hanya "bidang 2" di baris:

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

Kelemahan dari metode ini adalah bahwa ia bergantung pada aapt untuk menampilkan bidang informasi paket dalam urutan yang sama:

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

Kami tidak memiliki komitmen dari pengembang untuk mempertahankan format ini.

Solusi 2

Menggunakan awksebutkan "sebagai Pemisah Bidang, cari baris dengan package=, dan cetak hanya "bidang 2" di baris:

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

Kelemahan dari metode ini adalah bahwa ia bergantung pada aapt untuk output package=hanya di Android Manifest:bagian output. Kami tidak memiliki komitmen dari pengembang untuk mempertahankan format ini.

Solusi 3

Luaskan file apk dengan apktool ddan baca AndroidManifest.xml.

Ini akan menjadi metode terbaik, tetapi AndroidManifest.xml adalah file biner dan semua jawaban SO yang saya lihat untuk mengubahnya menjadi teks tidak berfungsi. (Menggunakan apktool dalih-alih yang sederhana unzipseharusnya melakukan ini untuk Anda, tetapi tidak.) Berikan komentar jika Anda memiliki solusi untuk masalah ini

Bruno Bronosky
sumber
1
Terima kasih telah memberikan lebih banyak informasi untuk dipahami daripada hanya memberikan satu baris perintah untuk disalin.
Ali Zeynali
4

Solusi sederhana adalah Open Android Studio -> Build -> Analyze Apk ... browse dan pilih APK sekarang Anda dapat menemukan nama paket dan cukup banyak yang dapat Anda baca.

Sai
sumber
2

Jika Anda hanya ingin tahu nama paket, jalankan adb logcat, luncurkan aktivitas yang Anda inginkan, Anda akan mendapatkan petunjuk tentang nama paket.

duduk
sumber
2

Solusi lain adalah dengan menggunakan daftar aapt dan menggunakan sed untuk mem-parsing melalui itu:

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

JohnnyLambada
sumber
Paket Nama Grup hanya secara kebetulan sama dengan Nama Paket di beberapa aplikasi. Anda benar-benar harus menggunakan A:package="com.example.appname"di Android Manifest:bagian jika Anda melakukanaapt list -a
Bruno Bronosky
2

Metode yang sangat sederhana adalah dengan menggunakan apkanalyzer.

apkanalyzer manifest application-id "${_path_to_apk}"
William George
sumber
1

Saya pikir cara terbaik dan paling sederhana untuk mengekstrak hanya nama paket di Linux

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

Penjelasan:

  1. AAPT mengekstrak informasi APK
  2. Grep "paket" untuk menjaga hanya baris tentang informasi paket
  3. Buat sed ganti seluruh baris dengan nama paket hanya menggunakan regex berikut: package: name='([a-z0-9.]*)'.*dan ganti dengan grup yang cocok pertama (dan hanya).
m0skit0
sumber
1

Anda dapat mengekstrak AndroidManifest.xml dari APK, menghapus semua byte NULL, lewati semuanya sampai setelah string 'manifes', dan kemudian Anda berada pada byte panjang diikuti dengan nama paket (dan apa yang muncul setelahnya). Untuk tugas yang sulit saya menggunakan alat GEMA yang hebat , sehingga perintahnya terlihat seperti ini:

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

Tentu saja, Anda dapat menggunakan alat lain untuk melakukan penyaringan.

Hartmut Schäfer
sumber
1

Jika Anda tidak menginstal Android SDK, seperti pada beberapa skenario pengujian, Anda bisa mendapatkan nama paket menggunakan metode bash berikut:

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"
}

Diuji pada mac. 'string' dan 'unzip' adalah standar pada sebagian besar linux, jadi harus juga bekerja pada linux.

mmccabe
sumber
0

Anda dapat menginstal Package_Name_Viewer.apk pada emulator Anda dan selanjutnya Anda dapat melihat nama paket semua aplikasi yang diinstal pada emulator Anda.

esideli
sumber
0

Saya juga mencoba hal de-kompilasi, itu berhasil tetapi baru-baru ini saya menemukan cara termudah:

  1. Unduh dan instal Appium dari situs web Appium

  2. Buka Appium-> pengaturan Android, pilih file apk target. Dan kemudian Anda mendapatkan semua yang Anda inginkan, info paket, info aktivitas.

Wen
sumber
0

Untuk menggunakan ini dalam skrip batch, sangat berguna untuk membuat skrip mengembalikan hanya nama paket (misalnya untuk mencopot aplikasi ketika Anda memiliki APK).

Berikut skrip yang saya gunakan:

# 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

tersedia di intisari

Jadi Anda bisa menulis:

hapus adb `./getPackageName.sh file.apk`

Ben Clayton
sumber
0

Untuk Windows berikut ini berfungsi untuk saya:

:: // 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

Catatan

Harap edit jalur adb, aapt, APKPath sesuai dengan jalur adb, aapt, dan lokasi apk di sistem Anda.

Kerja:

  • Di sini saya telah menambahkan apk dalam folder di Desktop "\ Desktop \ APK \ Instant_Instal \".
  • Perintah %adb% install %apk%menginstal aplikasi jika perangkat terhubung.
  • Ini %aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt mengambil nama paket dan beberapa detail lainnya seperti versi dll dari apk dan menyimpan dalam file temp.txt di lokasi yang sama dengan apk.
  • UNTUK / F "token = 2 delims = '" %% s IN (temp.txt) LAKUKAN SET pkgName = %% s extracts the package name and assigns topkgName` variabel
  • Akhirnya %adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1meluncurkan aplikasi.

Intinya kode di atas menginstal apk dari lokasi yang diberikan di desktop "Desktop \ APK \ Instant_Instal \" ke perangkat dan meluncurkan aplikasi.

Kailas
sumber
0

Karena saya tidak dapat menemukan nama paket di file .apk dengan editor (seperti yang disarankan di atas), saya telah memeriksa fungsi di App "ES Datei Explorer" / "ES File Explorer" (versi gratis) yang saya sudah diinstal. Dalam alat ini, nama paket ditampilkan dengan benar.
Karena saya pikir file explorer yang baik tidak boleh hilang di ponsel, saya sarankan untuk menggunakan alat ini (jika Anda sudah menginstal apk pada ponsel dan harus tahu nama paket).

FredyWenger
sumber
0

Karena disebutkan dalam dokumentasi Android bahwa AAPT telah ditinggalkan , mendapatkan nama paket menggunakan perintah AAPT2 di Linux adalah sebagai berikut:

./aapt2 dump packagename <path_to_apk>

Karena saya menggunakan versi Gradle build yang lebih lama, saya harus mengunduh versi AAPT2 yang lebih baru seperti yang disebutkan di sini:

Unduh AAPT2 dari Google Maven

Menggunakan alat-alat build di SDK saya - 25.0.3, 26.0.1 dan 27.0.3, mengeksekusi perintah aapt2 menunjukkan kesalahan: Tidak dapat membuka 'nama paket': Tidak ada file atau direktori. Itu sebabnya saya memilih versi AAPT2 yang lebih baru.

Saya menggunakan 3.3.0-5013011 untuk linux.

pengguna198530
sumber
0

Anda dapat menggunakan Analyze APK...dari menu Bangun di Android Studio, itu akan menampilkan nama paket di bagian atas jendela baru.

Daniel Zolnai
sumber
-1

aapt list -a "path_to_apk"

Saya sarankan Anda menyimpannya dalam .txt, karena ini bisa sangat panjang. Begitu:

aapt list -a "path_to_apk"> file.txt

Kemudian lihat file.txt di direktori Anda saat ini.

Delano
sumber