Bagaimana cara mendapatkan APK aplikasi yang diinstal tanpa akses root?

196

Saya mencoba mengekstrak file APK dari aplikasi Android yang diinstal TANPA izin root.

Saya pikir ini tidak mungkin, karena semua file APK untuk aplikasi non-sistem terletak di / data / aplikasi, dan mengakses folder ini memerlukan izin root. Kemudian saya menemukan bahwa ada banyak aplikasi di Google Play store yang tampaknya memiliki akses ke file APK bahkan pada perangkat yang tidak di-rooting.

Dapatkah seseorang memberi tahu saya bagaimana ini mungkin? Tidak ada aplikasi cadangan yang membuat cadangan file APK tanpa root?

pinas
sumber
2
Saya pikir pertanyaan ini sudah dijawab. Mohon lihat stackoverflow.com/a/12197924/1016544
Wahib Ul Haq
2
Kemungkinan duplikat dari Bagaimana cara mendapatkan file apk dari perangkat Android?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
3
Bacaan saya tentang ini adalah bahwa @pinas menanyakan bagaimana cara membuat kode program ini - merujuk aplikasi yang melakukannya seolah-olah mengatakan "Aplikasi ini yang melakukannya, tetapi bagaimana?". Alasan "ditahan" di sini salah menurut saya karena itu.
Richard Le Mesurier

Jawaban:

380

Mengakses / data / aplikasi dimungkinkan tanpa izin root; izin pada direktori tersebut adalah rwxrwx - x. Menjalankan izin pada direktori berarti Anda dapat mengaksesnya, namun kurangnya izin baca berarti Anda tidak dapat memperoleh daftar kontennya - jadi untuk mengaksesnya Anda harus mengetahui nama file yang akan Anda akses. Pengelola paket Android akan memberi tahu Anda nama apk yang disimpan untuk paket yang diberikan.

Untuk melakukan ini dari baris perintah, gunakan adb shell pm list packagesuntuk mendapatkan daftar paket yang diinstal dan menemukan paket yang diinginkan.

Dengan nama paket, kita bisa mendapatkan nama file aktual dan lokasi APK menggunakan adb shell pm path your-package-name.

Dan mengetahui direktori lengkapnya, kita akhirnya dapat menarik adb menggunakan adb pull full/directory/of/the.apk

Kredit ke @tarn untuk menunjukkan bahwa di bawah Lollipop, jalur apk akan /data/app/your-package-name-1/base.apk

mah
sumber
33
Untuk melakukan ini dari baris perintah, gunakan adb shell pm list packagesuntuk mendapatkan daftar paket yang diinstal, pilih paket yang diinginkan, tambahkan -1.apk, dan tarik dari /data/app. Contoh: Jika nama paketnya adalah org.mozilla.firefox, gunakan adb pull /data/app/org.mozilla.firefox-1.apk.
sschuberth
11
Untuk mendapatkan nama file sebenarnya dari APK, gunakan adb shell pm path your-package-name. Lihat pertanyaan ini untuk jawaban yang lebih terperinci stackoverflow.com/questions/4032960/…
Yojimbo
2
untuk lollipop jalur apk adalah /data/app/your-package-name-1/base.apk
tarn
Ini tidak berhasil untuk saya. Saya mendapatkan kesalahan berikut:adb: error: remote object '/data/app/com.Slack-1/base.apk' does not exist
0xcaff
1
@ 0xcaff Android telah berubah sedikit dalam 5 tahun sejak jawaban ini diberikan; mungkin jalan ini adalah salah satu dari perubahan itu. Anda harus dapat masuk dan mencari file secara manual untuk menemukan jalur apa pun yang sesuai untuk versi os Anda.
mah
55

Android menambahkan nomor urut ke nama paket untuk menghasilkan nama file APK akhir (mungkin ini bervariasi dengan versi OS Android). Urutan perintah berikut ini berfungsi pada perangkat yang tidak di-root :

  1. Dapatkan nama path lengkap file APK untuk paket yang diinginkan.

    adb shell pm path com.example.someapp

    Hal ini memberikan output sebagai: package:/data/app/com.example.someapp-2.apk.

  2. Tarik file APK dari perangkat Android ke kotak pengembangan.

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

Lokasi APK setelah penarikan berhasil adalah di ../sdk/platform-tools/base.apk di komputer / laptop Anda.

Yojimbo
sumber
4
Dapat mengkonfirmasi solusi ini berfungsi pada perangkat yang tidak di-rooting, meskipun memang membutuhkan pengetahuan tentang nama paket sebelum perintah pertama! Gunakan 'adb shell pm daftar paket' untuk mendapatkan daftar semua paket di telepon jika Anda tidak yakin dengan nama paket dari aplikasi yang Anda inginkan
AndroidNoob
Folder apa pada mesin lokal penarik yang masuk apk? EDIT: nvm, direktori apa pun yang Anda gunakan ketika melakukan adb pull ...
Adam Johns
@IgorGanapolsky coba gunakan adb pull / data
Chris - Jr
@zelanix setelah melakukan adb pull, di mana saya bisa c file .apk. Terima kasih
Vijaya Varma Lanke
21

Anda tidak memerlukan izin ROOT untuk mendapatkan daftar Aplikasi yang Diinstal.

Anda dapat melakukannya dengan PackageManager android.

Di bawah ini adalah cuplikan kode kecil.

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);
}
Sagar Waghmare
sumber
7
  1. periksa daftar apk yang diinstal (perintah berikut juga mencantumkan jalur tempat menginstalnya dan nama paket). adb shell pm daftar paket -f
  2. gunakan adb pull / package_path / nama paket / path_in_pc (jalur paket dan nama paket yang dapat diperoleh dari perintah di atas 1.)
goldy021
sumber
6

Ketika Anda menginstal Eclipse untuk Android:

  • Gunakan perangkat Anda sebagai perangkat debug. Di ponsel Anda: Pengaturan> Aplikasi> Pengembangan dan aktifkan USB debugging, lihat http://developer.android.com/tools/device.html
  • Di Eclipse, buka DDMS-window: Window> Open Perspective> Other ...> DDMS, lihat http://developer.android.com/tools/debugging/ddms.html
  • Jika Anda tidak dapat melihat perangkat Anda, coba instal ulang USB-Driver untuk perangkat Anda
  • Di panel tengah pilih tab "File Explorer" dan pergi ke sistem> aplikasi
  • Sekarang Anda dapat memilih satu atau lebih file dan kemudian klik ikon "Tarik file dari perangkat" di bagian atas (kanan ke tab)
  • Pilih folder target - tada!
segera
sumber
Hanya ada aplikasi sistem (alias aplikasi yang diinstal sebelumnya) di / sistem / aplikasi.
arne.jans
6

Pada Nougat (7.0) versi Android dijalankan adb shell pm list packagesuntuk mendaftar paket yang diinstal pada perangkat. Kemudian jalankan adb shell pm path your-package-nameuntuk menunjukkan jalur apk. Setelah menggunakan adb untuk menyalin paket ke Unduhan adb shell cp /data/app/com.test-1/base.apk /storage/emulated/0/Download. Kemudian tarik apk dari Unduhan ke mesin Anda dengan menjalankan adb pull /storage/emulated/0/Download/base.apk.

Buhiire Keneth
sumber
2

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)
vanduc1102
sumber
0

Daftar PackageManager.getInstalledApplications () akan memberi Anda daftar aplikasi yang diinstal, dan ApplicationInfo.sourceDir adalah path ke file .apk.

// 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
Pankaj Arora
sumber
0

Saya menemukan cara untuk mendapatkan nama paket APK di perangkat non-root. itu tidak begitu elegan, tetapi bekerja sepanjang waktu.

Langkah 1 : di perangkat Anda, buka APK target

Langkah 2 : di jendela cmd PC, ketikkan perintah ini:

 adb shell dumpsys activity a > dump.txt

karena output dari perintah ini banyak, redirect ke file disarankan.

Langkah 3 : buka file dump.txt ini dengan editor apa pun.

untuk perangkat sebelum Android 4.4:
awal file akan terlihat seperti ini:

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 

nama paket ada di baris ke-3, com.tencent.mm untuk contoh ini.

untuk Android 4.4 dan yang lebih baru:
output dumpsys telah berubah sedikit. coba cari "Stack # 1", nama paket akan sangat dekat di bawahnya.

Juga, cari "baseDir", Anda akan menemukan path lengkap file apk!

Ayunan
sumber
-1

Buka ES explorer -> tekan tombol Menu di sudut kiri atas (tiga garis horizontal) -> di bagian Perpustakaan pilih aplikasi.

Dengan demikian, Anda mendapatkan daftar semua aplikasi pengguna. Temukan aplikasi Anda dan pilih dengan lama mendorongnya. Kemudian tekan "Lainnya" di sudut kanan bawah dan pilih "Kirim". Kemudian Anda dapat menggunakan opsi yang berbeda, misalnya Anda dapat memilih "ES Save To" untuk menyimpan file .apk ke direktori home Anda atau di mana pun.

JenyaKh
sumber
-2

Atau Anda bisa mendapatkan 'Transfer File Bluetooth' dari Google Play dan mengatur folder home ke /system/. Maka Anda bahkan dapat pergi ke /.

AJD
sumber