Yanıtlar:
Adb kullanın . Adb pull ile , cihaz USB ile bağlıyken dosyaları cihazınızdan sisteminize kopyalayabilirsiniz.
Tabii ki dosyanızın bulunduğu dizine erişmek için de doğru izinlere ihtiyacınız vardır. Değilse, önce cihazı rootlamanız gerekir.
APK'ların çoğunun "base.apk" olarak adlandırıldığını fark ederseniz, tüm APK'ları paket adına "base.apk" adlarını yeniden adlandırırken erişebileceğiniz bir telefondan çekmek için de bu tek satır komutunu kullanabilirsiniz. Bu, addan sonra görünüşte rastgele karakterler içeren APK yolları için dizin bulunamadı sorununu da giderir:
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
Gerekli izinlere sahip olmadığınızı belirten "adb: error: uzak nesneyi statme başarısız oldu" iletisini alırsanız. Bunu köklü olmayan bir Moto Z2'de çalıştırdım ve kaldırmadım TÜM APK'ları (aşağıya bakın) indirebildim.
adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver <--- kills presidential alert app!
(adb shell pm list kullanıcılarını çalıştıran kullanıcıları görüntülemek için) Bu, kök DAHİL sistem uygulamaları OLMADAN neredeyse HERHANGİ bir uygulama (telefonunuzu güncelleyen can sıkıcı güncelleme uygulaması ipucu) satır veya satır "ccc" için selamlayarak bulunabilir)
adb shell pm list packages
tam yolunu ve tam yolunu adb shell pm path your.package.name
daha sonra bilgisayarınızdan bulun, basitçe yapabilirsinizadb pull /full/path/to/your.apk
Bu önerilerin hiçbiri benim için işe yaramadı, çünkü Android son APK dosya adını üretmek için paket adına bir sıra numarası ekliyordu. Android'in (Oreo ve Pie) daha yeni sürümlerinde, öngörülemeyen rastgele bir dize eklenir. Kök olmayan bir cihazda benim için çalışan aşağıdaki komut dizisi :
1) Uygulamanın paket adını belirleyin, örneğin "com.example.someapp". Paket adını zaten biliyorsanız bu adımı atlayın.
adb shell pm list packages
Paket adları listesine bakın ve söz konusu uygulama ile paket adı arasında bir eşleşme bulmaya çalışın. Bu genellikle kolaydır, ancak paket adının uygulama adıyla tamamen ilgisiz olabileceğini unutmayın. Uygulamayı paket adları listesinden tanıyamıyorsanız, bir tarayıcı kullanarak uygulamayı Google Play'de bulmayı deneyin. Google Play'de bir uygulamanın URL'si paket adını içerir.
2) İstenen paket için APK dosyasının tam yol adını alın.
adb shell pm path com.example.someapp
Çıktı
paket gibi görünecektir : /data/app/com.example.someapp-2.apk
veya
paket: /data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ == / base.apk
3) Adım 2'deki tam yol adını kullanarak APK dosyasını Android cihazdan geliştirme kutusuna çekin.
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
pm list packages
-f
gibi .apk konumunu listeleyen bayrağı destekler package:/data/app/com.google.android.apps.maps-1.apk=com.google.android.apps.maps
. Yerleşik pm yardımı işe yaramaz, ancak pm paket türlerini de filtreleyebilir, daha fazla bilgi için developer.android.com/studio/command-line/adb.html#pm adresine bakın . EDIT: sadece aşağıdaki cevabın bunu söylediğini fark ettim, ama bu cevap neredeyse bu kadar değil.
adb: error: remote object '/data/app/path.of.the.app-2/base.apk' does not exist
. Bu klasörlere bir dosya tarayıcısıyla göz atarsam, klasörler boştur.
adb shell
sonra cp PathToApk /sdcard/
ve sonra kopyalayarak düzelttim .
Kök gerekmez:
Bu kod, adınızı içeren 3. taraf paketleri yolunu alacaktır, böylece APK'nızı kolayca tanımlayabilirsiniz
adb shell pm list packages -f -3
çıktı olacak
paketlemek: /data/app/XX.XX.XX.apk=YY.YY.YY
şimdi aşağıdaki kodu kullanarak paketi çekin:
adb pull /data/app/XX.XX.XX.apk
cmd'nin üstünde çalıştırdıysanız C:>\
, o paketi orada bulacaksınız.
-f -s
yerine sistem uygulamaları kullanmak için-f -3
Bu soruna birçok çözümün telefonunuzu rootlamanız veya bir uygulama yüklemeniz gerektiğini gördüm. Sonra çok googling sonra ben köklü olmayan / köklü telefonlar için bu çözümü aldım .
Şimdiye kadar hangi uygulamaları aldığınızı listelemek için.
adb shell pm list packages
Sonra bir uygulama seçebilirsiniz, örneğin twitter
adb backup -apk com.twitter.android
Burada önemli olan, yedeklemenizi şifrelemek için bir parola ayarlamamaktır
Bu, backup.ap adında bir dosya oluşturacak, ancak yine de açamıyorsunuz. Bunun için tekrar dd komutunu kullanarak çıkarmanız gerekiyor.
dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar
Bundan sonra yapmanız gereken tek şey katran içeriğini çıkarmak ve bitti.
Umarım sizin için çalışır
APK'yı Cihazdan Masaüstüne İndirme Adımları
A) Çalıştığınızdan (emülatör / gerçek Aygıt) emin olun. Kontrol etmek için bu komutu kullanın
adb devices
B) Cihazınızda kurulu olan tüm kullanılabilir paket listesini seçin. İndirmek istediğiniz paketi seçmek için grep komutunu kullanabilirsiniz.
adb shell pm list packages
adb shell pm list packages -f -3
Çıktı (Mevcut paketlerin listesi)
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) Yukarıdaki linkten (indirmek istediğiniz ) paketi kopyalayın. Davamızı oluşturun Bu (com.example.myapplication) paketini seçiyorum
Syntax : adb shell pm path [your_package_name]
Command: adb shell pm path com.example.myapplication
Çıktı
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk
D) Son olarak, APK'nızı (emülatör / gerçek cihazınızdan) indirmek için
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
Örnek: Bu CertInstaller.apk dosyasını yerel makinenizde çekmeye çalışmak (Mac)
adb pull /system/app/CertInstaller/CertInstaller.apk /Users/$(whoami)/Documents/APK/download_apk/
E) Yerel dizininizde onaylayın
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)
Tüm Android sürümleri için çalışan bir astar:
adb shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
@Yojimbo'nun cevabını tamamlayarak, yaptığım bu (sadece Linux / Mac, Windows'ta kutudan çıkmayacak ... belki git'in bash kabuğunda):
for i in $(adb shell pm list packages -f -3 | cut -d= -f 1 | cut -d ":" -f 2); do adb pull $i; done
Bu çirkin bash ama işe yarıyor :)
EDIT: Artık AndroidM üzerinde çalışmıyor: tüm dosyalar başka bir dizin altında "base.apk" olarak adlandırılır. Düzeltmek için "önemsiz" olmalıdır.
Unix sistemlerde bu işlevi deneyebilirsiniz:
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
Yukarıda belirtildiği gibi, apk'yi adb'deki pull komutunu kullanarak alabilirsiniz.
Yüklü uygulamalarınızdan bahsediyorsunuz, devam edin ve Android dosya sisteminizin / data / app dizinine bakın. APK'ları orada bulacaksınız.
Ardından adb komutunu kullanın - adb pull /data/data/appname.apk
Tüm uygulamalarınızı yedeklemek için bu tek satırlık bash komutunu deneyin:
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
Bu komut Firelord'un senaryosundan türetilmiştir . Elcuco'nun komut dosyasıyla ilgili sorunu çözmek için tüm apks'leri paket adlarına yeniden adlandırdım , yani aynı base.apk
dosya Android 6.0 "Marshmallow" ve üstü üzerinde üzerine yazılıyor .
Bu komutun yalnızca 3. taraf uygulamalarını yedeklediğini unutmayın, çünkü yerleşik uygulamaları yedekleme noktasını göremiyorum. Ancak sistem uygulamalarını da yedeklemek istiyorsanız, -3
seçeneği atlamanız yeterlidir .
Biliyorsanız yolunu (siz "tahmin" eğer ya) .apk
(o görünüyor biçimi olması /data/app/com.example.someapp-{1,2,..}.apk
için, o zaman sadece kopyalayabilirsiniz/data/app
. Bu bile rootsuz, stok Android telefonumda çalıştı.
Sadece (örneğin bir Terminal Emülatörü uygulamasını kullanmak bu bir ) ve çalıştırın:
# 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/
Daha sonra SD karttan istediğiniz yere taşıyabilirsiniz (veya bir e-postaya vb.). Son bit teknik olarak isteğe bağlı olabilir, ancak .apk
dosyayla bir şey yapmaya çalışırken hayatınızı çok daha kolay hale getirir .
Burada özetlenen prosedürler Android 7 (Nougat) [ve muhtemelen Android 6 için çalışmıyor, ancak doğrulayamıyorum]. .Apk dosyalarını doğrudan Nougat altında çekemezsiniz (kök modunda değilse, ancak köklü bir telefon gerektirir). Ancak, .apk dosyasını adb kabuğunu kullanarak telefonda alternatif bir yola (say / sdcard / Download) kopyalayabilir, ardından alternatif yoldan bir adb çekme işlemi yapabilirsiniz.
adb shell
@Isa A'nın yorumundan gelen komutlar dahil ) Android 7.1.1'de köklü değil, benim için iyi çalıştı.
Şu anda açık olan uygulamayı edinin:
adb shell dumpsys activity activities | grep mFocusedActivity
Paket adının yolunu bulun
adb shell pm path <packagename.apk>
4. sdcard dizinine giden yolu kopyalayın
adb shell cp /data/app/<packagename.apk> /sdcard
5. apk apk
adb pull /sdcard/base.apk
Düzenle
Adım 2 işe yaramazsa şunu kullanın:
adb shell dumpsys window windows | grep mCurrentFocus
Bunu nasıl yapacağınız aşağıda açıklanmıştır:
APK Extractor'ı cihazınıza indirin ve yükleyin. Ücretsizdir ve neredeyse tüm Android cihazlarda uyumludur. Başka bir artı nokta bile kök veya çalışmak için herhangi bir şey gerektirmez. Yükledikten sonra başlatın. Burada, daha sonra yüklediğiniz uygulamaları içeren sistem uygulamalarının yanı sıra cihazınızda bulunan uygulamaların bir listesini göreceksiniz. Ayıklamak istediğiniz herhangi bir uygulamaya uzun basın (aynı anda birden fazla veya tüm uygulamaları seçebilirsiniz) ve üstte gördüğünüz ayıklama seçeneğini tıklayın. Ayrıca Bluetooth veya mesajlaşma yoluyla paylaşma seçeneğiniz de olacaktır. İşlemi tamamladınız, ayıklanan uygulamaları varsayılan olarak / sdcard / ExtractedApks / yoluna kaydedilecek olan AppName_AppPackage_AppVersionName_AppVersionCode.apk olarak göreceksiniz.
Android'de apk dosyalarını nasıl ayıklayacağınıza ilişkin ayrıntılı açıklama için şu adresi ziyaret edin: http://appslova.com/how-to-extract-apk-files-in-android/
Tüm bu cevaplar, cihazdan alınan her apk dosyası için birden fazla adım gerektirir. 1. paket adını belirleyin, 2. dosyayı bulun ve 3. indirin. Belirli bir normal ifadeyle eşleşen herhangi bir uygulama için bunu yapmak için basit bir apk_grabber
python betiği oluşturdum ve sonra bu apks'i kavanoz dosyalarına dönüştürüyor.
Mobilden .apk dosyasını çekmek için kod kullanmadım ama mobilden .apk dosyasını ayıklamak için yazılım kullanıyorum ve kullandığım yazılım google play bağlantısı ile aşağıda:
Umarım sana yardımcı olur.
1 dakika çok, çok rahat bir çözüm ister misiniz?
sadece bu uygulama https://play.google.com/store/apps/details?id=com.cvinfo.filemanager (google play'den akıllı dosya yöneticisi).
"uygulamalar" a dokunun, birini seçin ve "yedekle" ye dokunun. app_backup
klasördeki dosya sisteminizde sona erecektir ;)
Kök ve ADB aracı gerektirmez. MyAppSharer uygulamasını oyun mağazasından yükleyin .
Bende var does not exist error
İşte nasıl çalıştıracağım
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)
Yine başka bir bash betiği (yani çoğu unix tabanlı sistem için çalışacaktır). Pedro Rodrigues'in cevabına dayanarak, kullanımı biraz daha kolay.
Pedro'nun versiyonundaki iyileştirmeler:
adb pull
şikayet no such file or directory
etmeye devam etti adb shell
. Bu nedenle geçici dosya ile farklı yaklaşımlar kullandım.Bunu yürütülebilir bir dosyaya kaydedin:
#!/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\""
Bütün bu cevapları çok beğendim. Tümünü dışa aktarmak ve yeniden adlandırmak için çoğu komut dosyası Bash'te yazılmıştır. Aynı olan küçük bir Perl betiği yaptım (Windows ve linux için Perl'de çalışmalı, sadece Ubuntu'da test edildi).
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;
}
Çıktı şuna benzer:
# ./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.
Bu teknik olmayan bir cevap arayan biri için yardımcı olacaktır
Bu basit bir kesmek
Uygulamayı App Share/Send Pro
google play store'dan indirin. Göndermek istediğiniz uygulamayı ve gönderme yöntemini seçin.
Uygulamaları bilgisayarıma veya başka bir telefona göndermek için genellikle Bluetooth kullanıyorum.