Jawaban:
Gunakan adb . Dengan adb pull Anda dapat menyalin file dari perangkat Anda ke sistem Anda, ketika perangkat terpasang dengan USB.
Tentu saja Anda juga memerlukan izin yang tepat untuk mengakses direktori tempat file Anda berada. Jika tidak, Anda harus melakukan root pada perangkat terlebih dahulu.
Jika Anda menemukan bahwa banyak APK diberi nama "base.apk", Anda juga dapat menggunakan perintah satu baris ini untuk menarik semua APK dari telepon yang dapat Anda akses sambil mengganti nama "base.apk" apa pun dengan nama paket. Ini juga memperbaiki direktori tidak ditemukan masalah untuk jalur APK dengan karakter yang tampaknya acak setelah nama:
for i in $(adb shell pm list packages | awk -F':' '{print $2}'); do adb pull "$(adb shell pm path $i | awk -F':' '{print $2}')"; mv base.apk $i.apk 2&> /dev/null ;done
Jika Anda mendapatkan "adb: error: gagal ke objek jarak jauh stat" yang menunjukkan Anda tidak memiliki izin yang diperlukan. Saya menjalankan ini pada Moto Z2 yang tidak di-rooting dan dapat mengunduh SEMUA APK yang tidak saya hapus (lihat di bawah) kecuali youtube.
adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver <--- kills presidential alert app!
(pandangan pengguna menjalankan adb daftar pengguna shell pm) Ini adalah cara untuk menghapus / uninstall (bukan dari ponsel karena dilengkapi kembali dengan reset pabrik) hampir APAPUN aplikasi TANPA aplikasi akar sistem TERMASUK (petunjuk mengganggu pembaruan aplikasi yang update ponsel Anda berbaris atau tidak dapat ditemukan dengan mencari "ccc")
adb shell pm list packages
, dan path lengkapnya adb shell pm path your.package.name
dari pc Anda, Anda dapat dengan mudahadb pull /full/path/to/your.apk
Tidak ada saran ini yang bekerja untuk saya, karena Android menambahkan nomor urut ke nama paket untuk menghasilkan nama file APK akhir. Pada versi Android yang lebih baru (Oreo dan Pie), string acak yang tidak dapat diprediksi ditambahkan. Urutan perintah berikut adalah yang bekerja untuk saya di perangkat yang tidak di-rooting :
1) Tentukan nama paket aplikasi, misalnya "com.example.someapp". Lewati langkah ini jika Anda sudah tahu nama paketnya.
adb shell pm list packages
Lihat daftar nama paket dan coba temukan kecocokan antara aplikasi yang dimaksud dan nama paket. Ini biasanya mudah, tetapi perhatikan bahwa nama paket bisa sama sekali tidak terkait dengan nama aplikasi. Jika Anda tidak dapat mengenali aplikasi dari daftar nama paket, coba temukan aplikasi di Google Play menggunakan browser. URL untuk aplikasi di Google Play berisi nama paket.
2) Dapatkan nama path lengkap file APK untuk paket yang diinginkan.
adb shell pm path com.example.someapp
Outputnya akan terlihat seperti
package: /data/app/com.example.someapp-2.apk
atau
paket: /data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ == / base.apk
3) Menggunakan nama path lengkap dari Langkah 2, tarik file APK dari perangkat Android ke kotak pengembangan.
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
pm list packages
mendukung -f
bendera, yang mencantumkan lokasi .apk untuk Anda, seperti package:/data/app/com.google.android.apps.maps-1.apk=com.google.android.apps.maps
. Bantuan pm bawaan tidak berguna, tetapi pm juga dapat memfilter jenis paket juga, lihat developer.android.com/studio/command-line/adb.html#pm untuk info lebih lanjut. EDIT: cukup perhatikan bahwa jawaban di bawah ini mengatakan ini, tetapi jawaban itu hampir tidak tervotifikasi seperti ini.
adb: error: remote object '/data/app/path.of.the.app-2/base.apk' does not exist
. Jika saya menelusuri folder ini dengan browser file, folder tersebut kosong.
adb shell
dan kemudian cp PathToApk /sdcard/
dan kemudian menyalin dari sdcard.
Tidak diperlukan root:
Kode ini akan mendapatkan jalur paket pihak ke-3 dengan nama sehingga Anda dapat dengan mudah mengidentifikasi APK Anda
adb shell pm list packages -f -3
hasilnya akan
paket: /data/app/XX.XX.XX.apk=YY.YY.YY
sekarang tarik paket itu menggunakan kode di bawah ini:
adb pull /data/app/XX.XX.XX.apk
jika Anda menjalankan cmd di atas C:>\
, maka Anda akan menemukan paket itu di sana.
-f -s
bukannya-f -3
Saya telah melihat bahwa banyak solusi untuk masalah ini baik Anda harus me-root ponsel Anda atau Anda harus menginstal aplikasi. Kemudian setelah banyak googling saya mendapatkan solusi ini untuk ponsel yang tidak di-root / di-root.
Untuk daftar aplikasi yang Anda dapatkan sejauh ini.
adb shell pm list packages
Maka Anda dapat memilih aplikasi, misalnya twitter
adb backup -apk com.twitter.android
Yang penting di sini adalah tidak menyiapkan kata sandi untuk mengenkripsi cadangan Anda
Ini akan membuat file bernama backup.ap, tetapi Anda masih tidak bisa membukanya. Untuk ini, Anda harus mengekstraknya lagi tetapi menggunakan perintah dd.
dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar
Setelah ini yang harus Anda lakukan adalah mengekstrak konten tar dan selesai.
Semoga berhasil untuk kalian
Langkah-langkah untuk Mengunduh APK dari Perangkat ke Desktop
A) Pastikan Anda menjalankan (emulator / Perangkat nyata). Untuk memeriksa gunakan perintah ini
adb devices
B) Pilih semua daftar paket yang tersedia yang terpasang di perangkat Anda. Anda dapat menggunakan perintah grep untuk memilih paket spesifik yang ingin Anda unduh.
adb shell pm list packages
adb shell pm list packages -f -3
Output (Daftar paket yang tersedia)
package:/data/app/com.example.mytestapplication-sOzKi5USzfbYLPNDmaaK6g==/base.apk=com.example.mytestapplication
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk=com.example.myapplication
C) Salin paket (yang ingin Anda unduh) dari tautan di atas. Dari formulir kami, saya memilih paket (com.example.myapplication) ini
Syntax : adb shell pm path [your_package_name]
Command: adb shell pm path com.example.myapplication
Keluaran
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk
D) Akhirnya, Untuk mengunduh APK dari (emulator / perangkat nyata) Anda
Syntax : adb pull /data/app/[your_package_name]-1/base.apk [your_destination_path]
Command: adb pull /data/app/com.example.myapplication-3j4CVk0Tb2gysElgjz5O6A==/base.apk /Users/$(whoami)/Documents/your_apk.apk
Contoh: Mencoba untuk menarik file CertInstaller.apk ini di mesin lokal Anda (Mac)
adb pull /system/app/CertInstaller/CertInstaller.apk /Users/$(whoami)/Documents/APK/download_apk/
E) Konfirmasikan di direktori lokal Anda
ls -la /Users/$(whoami)/Documents/
C:\Users\xyz>adb shell pm list packages -f | findstr whatsapp
package:/data/app/com.whatsapp-1/base.apk=com.whatsapp
C:\Users\xyz>adb pull /data/app/com.whatsapp-1/base.apk Desktop
/data/app/com.whatsapp-1/base.apk: 1 f.... 13.8 MB/s (32803925 bytes in
2.269s)
Satu liner yang berfungsi untuk semua versi Android:
adb shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
Melengkapi jawaban @Yojimbo, inilah yang saya lakukan (Linux / Mac saja, tidak akan bekerja di luar kotak pada Windows ... mungkin di bash shell git):
for i in $(adb shell pm list packages -f -3 | cut -d= -f 1 | cut -d ":" -f 2); do adb pull $i; done
Ini jelek, tapi berhasil :)
EDIT: Ini tidak lagi berfungsi di AndroidM: semua file diberi nama "base.apk" di bawah dir lain. Harus "sepele" untuk memperbaikinya.
Pada sistem unix, Anda dapat mencoba fungsi ini:
function android_pull_apk() {
if [ -z "$1" ]; then
echo "You must pass a package to this function!"
echo "Ex.: android_pull_apk \"com.android.contacts\""
return 1
fi
if [ -z "$(adb shell pm list packages | grep $1)" ]; then
echo "You are typed a invalid package!"
return 1
fi
apk_path="`adb shell pm path $1 | sed -e 's/package://g' | tr '\n' ' ' | tr -d '[:space:]'`"
apk_name="`adb shell basename ${apk_path} | tr '\n' ' ' | tr -d '[:space:]'`"
destination="$HOME/Documents/Android/APKs"
mkdir -p "$destination"
adb pull ${apk_path} ${destination}
echo -e "\nAPK saved in \"$destination/$apk_name\""
}
android_pull_apk com.android.contacts
adb shell pm list packages
Seperti yang dikatakan di atas, Anda bisa mendapatkan apk dengan menggunakan perintah pull di adb.
Karena, Anda berbicara tentang aplikasi yang diinstal, silakan dan lihat di direktori / data / aplikasi sistem file Android Anda. Anda akan menemukan APK di sana.
Kemudian gunakan perintah adb - adb pull / data / data / appname.apk
Coba perintah bash one liner ini untuk mencadangkan semua aplikasi Anda:
for package in $(adb shell pm list packages -3 | tr -d '\r' | sed 's/package://g'); do apk=$(adb shell pm path $package | tr -d '\r' | sed 's/package://g'); echo "Pulling $apk"; adb pull -p $apk "$package".apk; done
Perintah ini berasal dari skrip Firelord . Saya baru saja mengganti nama semua apks ke nama paket mereka untuk menyelesaikan masalah dengan skrip elcuco's , yaitu base.apk
file yang sama ditimpa pada Android 6.0 "Marshmallow" dan di atasnya.
Perhatikan bahwa perintah ini hanya mencadangkan aplikasi pihak ke-3, karena saya tidak melihat titik untuk mencadangkan aplikasi bawaan. Tetapi jika Anda juga ingin mencadangkan aplikasi sistem, abaikan saja -3
opsi tersebut.
Jika Anda tahu (atau jika Anda dapat "menebak") path ke .apk
( sepertinya formatnya /data/app/com.example.someapp-{1,2,..}.apk
, maka Anda dapat menyalinnya dari/data/app
juga. Ini bekerja bahkan pada ponsel Android saya yang non-rooted, stock stock.
Cukup gunakan aplikasi Terminal Emulator (seperti ini ) dan jalankan:
# step 1: confirm path
ls /data/app/com.example.someapp-1.apk
# if it doesn't show up, try -2, -3. Note that globbing (using *) doesn't work here.
# step 2: copy (make sure you adapt the path to match what you discovered above)
cp /data/app/com.example.someapp-1.apk /mnt/sdcard/
Kemudian Anda dapat memindahkannya dari kartu-SD ke mana pun Anda inginkan (atau melampirkannya ke email dll). Bit terakhir mungkin secara teknis opsional, tetapi itu membuat hidup Anda jauh lebih mudah ketika mencoba melakukan sesuatu dengan .apk
file tersebut.
Prosedur yang diuraikan di sini tidak berfungsi untuk Android 7 (Nougat) [dan mungkin Android 6, tapi saya tidak dapat memverifikasi]. Anda tidak dapat menarik file .apk langsung di bawah Nougat (kecuali dalam mode root, tetapi itu membutuhkan ponsel yang di-rooting). Tetapi, Anda dapat menyalin .apk ke jalur alternatif (mis. / Sdcard / Unduh) di ponsel menggunakan adb shell, lalu Anda dapat melakukan tarikan adb dari jalur alternatif.
adb shell
perintah dari komentar @Isa A) bekerja dengan baik untuk saya di Android 7.1.1, tidak di-root.
Dapatkan aplikasi yang saat ini dibuka dengan:
adb shell dumpsys activity activities | grep mFocusedActivity
Dapatkan path ke nama paket
adb shell pm path <packagename.apk>
4. Salin jalur yang Anda dapatkan ke direktori sdcard
adb shell cp /data/app/<packagename.apk> /sdcard
5.Tarik apk
adb pull /sdcard/base.apk
Edit
Jika langkah no 2 tidak berhasil gunakan ini:
adb shell dumpsys window windows | grep mCurrentFocus
Begini cara melakukannya:
Unduh dan instal APK Extractor di perangkat Anda. Ini gratis, dan kompatibel di hampir semua perangkat Android. Poin plus lainnya adalah ia bahkan tidak memerlukan root atau apa pun untuk bekerja. Setelah Anda menginstalnya, luncurkan. Di sana Anda akan melihat daftar aplikasi yang ada di perangkat Anda, yang termasuk aplikasi yang Anda instal nanti, bersama dengan aplikasi sistem. Tekan lama aplikasi yang ingin Anda ekstrak (Anda dapat memilih beberapa atau semua aplikasi sekaligus), dan klik pada opsi ekstrak yang Anda lihat di atas. Anda juga akan memiliki opsi untuk dibagikan melalui Bluetooth atau perpesanan. Setelah selesai, Anda akan melihat aplikasi yang diekstrak sebagai AppName_AppPackage_AppVersionName_AppVersionCode.apk, yang akan disimpan di jalur / sdcard / ExtractedApks / secara default.
Untuk keterangan terperinci tentang cara mengekstrak file apk di android , kunjungi: http://appslova.com/how-to-extract-apk-files-in-android/
Semua jawaban ini memerlukan beberapa langkah untuk setiap file apk yang diambil dari perangkat. 1. tentukan nama paket, 2. cari file, dan 3. unduh. Saya membuat apk_grabber
skrip python sederhana untuk melakukan ini untuk aplikasi apa pun yang cocok dengan regex yang diberikan, dan kemudian mendekompilasi apks tersebut ke file jar.
Saya belum menggunakan kode untuk menarik file .apk dari ponsel tetapi saya telah menggunakan perangkat lunak untuk mengekstrak file .apk dari ponsel dan perangkat lunak yang telah saya gunakan di bawah ini dengan tautan google play:
Semoga ini bisa membantu Anda.
ingin solusi 1 menit sangat, sangat nyaman?
hanya Anda aplikasi ini https://play.google.com/store/apps/details?id=com.cvinfo.filemanager (pengelola file pintar dari google play).
ketuk "aplikasi", pilih satu dan ketuk "cadangan". itu akan berakhir di sistem file Anda di app_backup
folder;)
Tidak ada Root dan tidak ada alat ADB metode yang diperlukan. Instal aplikasi MyAppSharer dari play store.
Saya mendapat does not exist error
Inilah cara saya membuatnya bekerja
adb shell pm list packages -f | findstr zalo
package:/data/app/com.zing.zalo-1/base.apk=com.zing.zalo
adb shell
mido:/ $ cp /data/app/com.zing.zalo-1/base.apk /sdcard/zalo.apk
mido:/ $ exit
adb pull /sdcard/zalo.apk Desktop
/sdcard/zalo.apk: 1 file pulled. 7.7 MB/s (41895394 bytes in 5.200s)
Namun skrip bash lainnya (yaitu akan berfungsi untuk sebagian besar sistem berbasis unix). Berdasarkan jawaban Pedro Rodrigues , tetapi sedikit lebih mudah digunakan.
Peningkatan atas versi Pedro:
adb pull
terus mengeluh tentang no such file or directory
sementaraadb shell
bisa mengakses file. Karenanya saya menggunakan pendekatan yang berbeda, dengan file sementara.Simpan ini ke file yang dapat dieksekusi:
#!/bin/bash
# Obtain APK file for given package from the device connected over ADB
if [ -z "$1" ]; then
echo "Available packages: "
adb shell pm list packages | sed 's/^package://'
echo "You must pass a package to this function!"
echo "Ex.: android_pull_apk \"com.android.contacts\""
exit 1
fi
fullname=$(adb shell pm list packages | sed 's/^package://' | grep $1)
if [ -z "$fullname" ]; then
echo "Could not find package matching $1"
exit 1
fi
if [ $(echo "$fullname" | wc -l) -ne 1 ]; then
echo "Too many packages matched:"
echo "$fullname"
exit 1
fi
echo "Will fetch APK for package $fullname"
apk_path="`adb shell pm path $fullname | sed -e 's/package://g' | tr '\n' ' ' | tr -d '[:space:]'`"
apk_name="`basename ${apk_path} | tr '\n' ' ' | tr -d '[:space:]'`"
destination="${fullname}.apk"
tmp=$(mktemp --dry-run --tmpdir=/sdcard --suffix=.apk)
adb shell cp "${apk_path}" "$tmp"
adb pull "$tmp" "$destination"
adb shell rm "$tmp"
[ $? -eq 0 ] && echo -e "\nAPK saved in \"$destination\""
Saya sangat menyukai semua jawaban ini. Sebagian besar skrip untuk mengekspor dan mengganti nama semuanya ditulis dalam Bash. Saya membuat skrip Perl kecil yang melakukan hal yang sama (yang seharusnya berfungsi baik di Perl untuk windows dan linux, hanya diuji pada Ubuntu).
download-apk.pl
#!/usr/bin/perl -w
# Automatically export all available installed APK's using adb
use strict;
print "Connect your device...\n";
system("adb", "wait-for-device");
open(my $OUT, '-|', 'adb', 'shell', 'pm', 'list', 'package', '-f');
my @list = split(/\s*/, `adb shell pm list packages -f`);
my $count = 0;
while(my $line = <$OUT>) {
$line =~ s/^\s*|\s*$//g;
my ($type, $path, $package) = $line =~ /^(.*?):(.*)=(.*)$/ ? ($1,$2,$3) : die('invalid line: '.$line);
my $category = $path =~ /^\/(.*?)\// ? $1 : 'unknown';
my $baseFile = $path =~ /\/([^\/]*)$/ ? $1 : die('Unknown basefile in path: '.$path);
my $targetFile = "$category-$package.apk";
print "$type $category $path $package $baseFile >> $targetFile\n";
system("adb", "pull", $path);
rename $baseFile, $targetFile;
}
Outputnya mirip dengan:
# ./download-apk.pl
Connect your device...
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
package system /system/app/YouTube/YouTube.apk com.google.android.youtube YouTube.apk >> system-com.google.android.youtube.apk
5054 KB/s (11149871 bytes in 2.154s)
package data /data/app/com.ghostsq.commander-1/base.apk com.ghostsq.commander base.apk >> data-com.ghostsq.commander.apk
3834 KB/s (1091570 bytes in 0.278s)
package data /data/app/de.blinkt.openvpn-2/base.apk de.blinkt.openvpn base.apk >> data-de.blinkt.openvpn.apk
5608 KB/s (16739178 bytes in 2.914s)
etc.
Ini akan membantu seseorang yang mencari jawaban non teknis
Ini hack sederhana
Unduh aplikasi App Share/Send Pro
dari google play store. Pilih aplikasi yang ingin Anda kirim dan metode kirim aplikasi.
Saya biasanya menggunakan Bluetooth untuk mengirim aplikasi ke komputer saya atau telepon lain.