Yüklü bir uygulamanın APK'sını root erişimi olmadan nasıl edinebilirim?


198

Yüklü bir Android uygulamasının APK dosyasını root izinleri olmadan ayıklamaya çalışıyorum.

Bunun imkansız olduğunu düşündüm, çünkü sistem dışı uygulamalar için tüm APK dosyaları / data / app'de bulunur ve bu klasöre erişmek için root izni gerekir. Sonra Google Play Store'da, rootsuz cihazlarda bile APK dosyalarına erişime sahip gibi görünen çok sayıda uygulama olduğunu buldum.

Birisi bana bunun nasıl mümkün olduğunu söyleyebilir mi? APK dosyalarını root olmadan yedekleyen yedekleme uygulamaları yok mu?


2
Bence bu soru zaten cevaplandı. Nazikçe bir göz atın stackoverflow.com/a/12197924/1016544
Wahib Ul Haq




3
Bunu okuduğum şey, @pinas'ın bunu programlı olarak nasıl kodlayacağını sormasıydı - "Bu uygulamalar bunu yapıyor, ama nasıl?" Buradaki "beklemede" nedeni bence bu yüzden yanlış.
Richard Le Mesurier

Yanıtlar:


381

Kök izni olmadan / data / app'a erişmek mümkündür; bu dizindeki izinler rwxrwx - x şeklindedir. Bir dizinde izin yürütme, dizine erişebileceğiniz anlamına gelir, ancak okuma izninin olmaması, içeriğinin bir listesini elde edemeyeceğiniz anlamına gelir - bu nedenle erişebilmek için erişeceğiniz dosyanın adını bilmeniz gerekir. Android'in paket yöneticisi size belirli bir paket için saklanan apk'nin adını söyleyecektir.

Bunu komut satırından adb shell pm list packagesyapmak için, yüklü paketlerin listesini almak ve istediğiniz paketi bulmak için kullanın.

Paket adıyla, APK'nın gerçek dosya adını ve konumunu kullanarak alabiliriz adb shell pm path your-package-name.

Ve tam dizini bilerek, nihayet kullanarak adb çekebiliriz adb pull full/directory/of/the.apk

Lollipop altında apk yolunun olacağını belirttiği için @tarn'a teşekkür ederiz /data/app/your-package-name-1/base.apk


33
Bunu komut satırından adb shell pm list packagesyapmak için, yüklü paketlerin listesini almak için kullanın , istediğiniz paketi seçin, ekleyin -1.apkve ekleyin /data/app. Örnek: Paket adı ise org.mozilla.firefoxkullanın adb pull /data/app/org.mozilla.firefox-1.apk.
sschuberth

11
APK'nın gerçek dosya adını almak için adb shell pm yolunu paket adınızı kullanın. Daha ayrıntılı bir yanıt için bu soruya bakın stackoverflow.com/questions/4032960/…
Yojimbo

2
lolipop için apk yolu /data/app/your-package-name-1/base.apk
tarn

Bu benim için işe yaramıyor. Aşağıdaki hatayı alıyorum:adb: error: remote object '/data/app/com.Slack-1/base.apk' does not exist
0xcaff

1
@ 0xcaff Android, bu cevabın verilmesinden bu yana 5 yıl içinde biraz değişti; belki de bu yol bu değişikliklerden biridir. İşletim sisteminizin sürümüne uygun olan yolu bulmak için oturum açıp dosyayı manuel olarak bulabilmeniz gerekir.
mah

55

Android, son APK dosya adını üretmek için paket adına bir sıra numarası ekler (bunun Android OS sürümüne göre değişmesi mümkündür). Aşağıdaki komut dizisi köklü olmayan bir aygıtta çalışır :

  1. İstediğiniz paket için APK dosyasının tam yol adını alın.

    adb shell pm path com.example.someapp

    Bu şekilde çıktı verir: package:/data/app/com.example.someapp-2.apk.

  2. APK dosyasını Android cihazdan geliştirme kutusuna çekin.

    adb pull /data/app/com.example.someapp-2.apk

Başarılı çekildikten sonra APK'nın konumu, PC / dizüstü bilgisayarınızda ../sdk/platform-tools/base.apk adresinde olacaktır.


4
İlk çözümden önce paket adının bilinmesini gerektirse de, bu çözümün köklü olmayan bir cihazda çalıştığını doğrulayabilir! İstediğiniz uygulamanın paket adından emin değilseniz telefondaki tüm paketlerin bir listesini almak için 'adb shell pm list paketleri' ni kullanın
AndroidNoob

Aparat çektirmenin yerel makinesinde hangi klasöre girer? DÜZENLEME: nvm, adb pull yaparken hangi dizinde olursanız olun ...
Adam Johns

@IgorGanapolsky adb pull /data/app/com.example.someapp-2/base.apk
Chris - Jr

adb pull yaptıktan sonra @zelanix, burada .apk dosyasını c. Teşekkür ederim
Vijaya Varma Lanke

22

Yüklü Uygulamalar listesini almak için KÖK izinlerine ihtiyacınız yoktur.

Android PackageManager ile yapabilirsiniz.

Aşağıda küçük bir kod snippet'i verilmiştir.

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages =  pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Apk file path:" + packageInfo.sourceDir);
}

7
  1. kurulu apk listesini kontrol edin (aşağıdaki komut ayrıca kurulduğu yolu ve paket adını da listeler). adb shell pm list paketleri -f
  2. Kullanım adb çekme / package_path / paket adı / path_in_pc (paket yolu ve paket adı bir yukarıdaki komutla 1. alabilirsiniz)

6

Android geliştirme için Eclipse yüklüyse:

  • Cihazınızı hata ayıklama cihazı olarak kullanın. Telefonunuzda: Ayarlar> Uygulamalar> Geliştirme ve USB hata ayıklamayı etkinleştirme, bkz. Http://developer.android.com/tools/device.html
  • Eclipse'de DDMS penceresini açın: Pencere> Perspektifi Aç> Diğer ...> DDMS, bkz. Http://developer.android.com/tools/debugging/ddms.html
  • Cihazınızı göremiyorsanız, cihazınız için USB Sürücüsünü tekrar yüklemeyi deneyin
  • Orta bölmede "Dosya Gezgini" sekmesini seçin ve sistem> uygulamaya gidin
  • Şimdi bir veya daha fazla dosya seçebilir ve ardından üstteki "Cihazdan bir dosya al" simgesini (sağda sekmelere) tıklayabilirsiniz
  • Hedef klasörü seçin - tada!

/ System / app içinde yalnızca sistem uygulamaları (önceden yüklenmiş uygulamalar olarak da bilinir) vardır.
arne.jans

6

Nougat'ta (7.0) Android sürümü adb shell pm list packages, cihaza yüklenen paketleri listelemek için çalışır . Sonra adb shell pm path your-package-nameapk yolunu göstermek için çalıştırın . Adb kullandıktan sonra paketi İndirilenler'e kopyalamak için adb shell cp /data/app/com.test-1/base.apk /storage/emulated/0/Download. Ardından İndirmeler'den makinenize koşarak apk'yi çekin adb pull /storage/emulated/0/Download/base.apk.


2

Bende var does not exist error

İşte nasıl çalışır hale getirmek:

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)

0

List PackageManager.getInstalledApplications () size yüklü uygulamaların bir listesini verir ve ApplicationInfo.sourceDir .apk dosyasının yoludur.

// in oncreate
   PackageManager pm = getPackageManager(); 
   for (ApplicationInfo app : pm.getInstalledApplications(0)) {
 Log.d("PackageList", "package: " + app.packageName + ", sourceDir: " + app.sourceDir);
 }

//output is something like
D/PackageList(5010): package: com.example.xmlparse, sourceDir: /data/app   /com.example.xmlparse-2.apk
D/PackageList(5010): package: com.examples.android.calendar, sourceDir: /data/app/com.examples.android.calendar-2.apk
D/PackageList(5010): package: com.facebook.katana, sourceDir: /data/app/com.facebook.katana-1.apk
D/PackageList(5010): package: com.facebook.samples.profilepicture, sourceDir: /data/app/com.facebook.samples.profilepicture-1.apk
D/PackageList(5010): package: com.facebook.samples.sessionlogin, sourceDir: /data/app/com.facebook.samples.sessionlogin-1.apk
D/PackageList(5010): package: com.fitworld, sourceDir: /data/app/com.fitworld-2.apk
D/PackageList(5010): package: com.flipkart.android, sourceDir: /data/app/com.flipkart.android-1.apk
D/PackageList(5010): package: com.fmm.dm, sourceDir: /system/app/FmmDM.apk
D/PackageList(5010): package: com.fmm.ds, sourceDir: /system/app/FmmDS.apk

0

APK'nın paket adını root olmayan bir cihazda almanın bir yolunu buldum. o kadar zarif değil, ama her zaman çalışıyor.

Adım 1 : cihazınızda, hedefi açın APK

Adım 2 : PC cmd penceresinde şu komutları yazın:

 adb shell dumpsys activity a > dump.txt

Bu komutun çıktısı sayısız olduğundan, bir dosyaya yönlendirmeniz önerilir.

Adım 3 : Bu dump.txt dosyasını herhangi bir düzenleyiciyle açın.

Android 4.4 için cihaz için:
dosyanın başlangıcı şöyle görünecektir:

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)  
  Main stack:  
  * TaskRecord{41aa9ed0 #4 A com.tencent.mm U 0}  
    numActivities=1 rootWasReset=true userId=0  
    affinity=com.tencent.mm  
    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 cmp=com.tencent.mm/.ui.LauncherUI}  
    realActivity=com.tencent.mm/.ui.LauncherUI  
    askedCompatMode=false  
    lastThumbnail=null lastDescription=null  
    lastActiveTime=19915965 (inactive for 10s)  
    * Hist #9: ActivityRecord{41ba1a30 u0 com.tencent.mm/.ui.LauncherUI}  
        packageName=com.tencent.mm processName=com.tencent.mm 

bu örnek için paket adı com.tencent.mm 3. satırdadır .

Android 4.4 ve üstü için:
dumpsys çıkışı biraz değişti. "Stack # 1" aramasını deneyin, paket adı çok yakın olacaktır.

Ayrıca, "baseDir" arama, apk dosyasının tam yolunu bulacaksınız!


-1

ES explorer'ı açın -> sol üst köşedeki Menü düğmesine basın (üç yatay şerit) -> Kütüphaneler bölümünde APP'leri seçin.

Böylece, tüm kullanıcı uygulamalarının listesini alırsınız. Uygulamanızı bulun ve uzun süre iterek seçin. Ardından sağ alt köşedeki "Diğer" e basın ve "Gönder" i seçin. Ardından farklı seçenekler kullanabilirsiniz, örneğin .apk dosyasını ana dizininize veya başka bir yere kaydetmek için "ES Save To" seçeneğini seçebilirsiniz.


-2

Veya Google Play'den 'Bluetooth Dosya Aktarımı'nı alabilir ve ana klasörü olarak ayarlayabilirsiniz /system/. O zaman bile gidebilirsin /.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.