Saya mencari kemungkinan untuk mengambil keduanya , nama - nama paket dan nama umum aplikasi yang diinstal pada perangkat Android melalui ADB - atau setidaknya untuk mengambil nama umum jika nama paket diketahui. Pencarian cepat di situs kami memunculkan dua pertanyaan terkait, tetapi mereka tidak menyelesaikan masalah saya:
- Bagaimana cara mendapatkan nama umum aplikasi yang memiliki nama paket (seperti com.android.blabla)? (baris perintah atau aplikasi yang disertakan) tidak berfungsi melalui ADB (tetapi menggunakan aplikasi yang harus Anda cari secara manual), cocok dengan permintaan OP
- Bagaimana menemukan aplikasi berdasarkan nama paket? kembali saja ke pencarian URL di Google Play , yang tidak selalu cocok (karena tidak semua aplikasi tersedia di sana).
Saya mencari cara untuk mengambil informasi langsung dari perangkat, jika mungkin - bukan cara "apa pun" (termasuk "pencarian web" atau "melalui aplikasi") karena kedua pertanyaan itu memilikinya.
Saya tahu ada beberapa alat yang tersedia untuk memperoleh detail paket:
adb dumpsys package
: Meskipun ini mencantumkan semua paket dengan banyak detail, "nama umum" tidak ditampilkanadb shell pm list
: hanya memberikan nama paketaapt
akan dapat memperoleh nama umum, tetapi harus terlebih dahulu menarik.apk
file dari perangkat, yang tidak terlalu nyaman (dan jelas akan sangat lambat dengan banyak dan / atau aplikasi besar diinstal)
Apakah saya melewatkan sesuatu? Saya tahu informasi itu harus ada di perangkat (bagaimana lagi itu bisa menunjukkan nama aplikasi di GUI? Saya ragu Android mem-parsing .apk
file setiap kali GUI membutuhkan "nama umum"). Jadi apakah ada cara untuk mendapatkannya, menggunakan ADB secara langsung?
TL; DR
Latar belakang (jika ada yang ingin tahu): Saya ingin dapat dengan cepat mendapatkan daftar aplikasi pengguna dari salah satu perangkat saya, tanpa harus kembali ke akrobat. Daftar nama paket mereka yang bisa saya ambil menggunakan adb shell pm list -3
, tetapi karena itu hanya nama paket, mengenali aplikasi adalah pekerjaan menebak. Jadi, jika ada beberapa perintah ADB untuk mengambil nama umum untuk nama paket yang diberikan, saya bisa menggunakan loop seperti for pkg in $(adb shell pm list -3); do echo "- $(adb <whatever_the_command_is> $pkg) ($pkg)"; done
- dan mendapatkan daftar semua aplikasi pengguna yang terinstal dalam "format yang dapat dibaca manusia" bersama dengan nama paket mereka.
Kasus penggunaan:
- Lihat aplikasi "superflous" apa yang diinstal (yang bisa saya hapus)
- Periksa silang daftar dari beberapa perangkat
- Dokumentasi;)
- dan mungkin lebih (tetapi 3 di atas adalah apa yang saya butuhkan)
sumber
Jawaban:
Ini bukan jawaban akhir, karena ini bukan generik (hanya berfungsi pada beberapa perangkat) - tetapi ini setidaknya merupakan permulaan:
Seperti yang telah kita ketahui , setidaknya ROM berbasis CM dengan Kitkat (Android 4.4) dan yang lebih tinggi dengan
aapt
biner tersedia dalam/system/bin
1 . Jika ROM Anda tidak memilikinya, dan menginstal biner pada perangkat adalah sebuah pilihan, Anda dapat menemukannya di sini .Menggunakan
aapt
, mengambil nama aplikasi dimungkinkan denganOutputnya akan seperti
label='Funny App'
, yang kemudian dengan mudah Anda dapat menguraikan nama aplikasi, misalnya(tidak baik jika nama aplikasi berisi tanda kutip tunggal, tetapi itu mungkin dianggap sebagai kosmetik - atau Anda mencari cara untuk meningkatkan bagian sed untuk mengatasinya).
1: kami tidak menemukan ini di ROM stok Kitkat-dan-di atas yang telah kami periksa, jadi itu mungkin hanya ROM berbasis CM
sumber
aapt
biner itu. Anda dapat mengunduh dan mengubah nama biner menjadiaapt
PC, mengatur izin yang dapat dieksekusi yang kompatibel dengan Linux pada biner dan mendorongnya/data/local/tmp
, kemudian menggunakan jalur absolut/data/local/tmp/aapt
untuk menggunakan biner dalam perintah-perintah itu.aapt d badging <path to apk> | grep 'package: name' | awk '{print $2}'
Inilah solusi saya untuk ponsel yang tidak di-root yang memerlukan sedikit perubahan dari atas yang saya gunakan pada Moto G 2nd gen yang menjalankan Android 5.0.2.
Saya tidak memiliki aapt binary di / system / bin, jadi saya pertama kali mencoba mengunduh dari: https://android.izzysoft.de/downloads
tetapi ketika saya mencoba menjalankannya saya mendapat pesan kesalahan:
kesalahan: hanya posisi executable independen (PIE) yang didukung.
Jadi saya mencari versi PIE dan menemukan: https://github.com/Calsign/APDE/blob/master/APDE/src/main/assets/aapt-binaries/aapt-arm-pie
dan ini bekerja dengan menyalin biner ke / data / local / tmp:
Sehingga kemudian:
mendapatkan daftar aplikasi pihak ke-3 (aplikasi yang telah Anda instal, bukan aplikasi sistem) dan kemudian Anda dapat menggunakan paket dari perintah di atas dalam aapt untuk mendapatkan informasi tentang paket - contoh:
Jadi di bawah ini adalah skrip (untuk klien Linux) untuk mendapatkan nama "umum" untuk aplikasi pihak ketiga: ``
Jika Anda ingin paket dan versi juga, maka ubah yang terakhir tetapi satu baris dari:
untuk:
Contoh output:
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
sumber
aapt
! Akan memeriksanya segera setelah waktu mengizinkan (saya agak terburu-buru saat ini). Terpilih untuk saat ini, mungkin diterima setelah memverifikasi :)