Apakah Android menyimpan file .apk? jika demikian dimana?

187

Setelah Android menginstal aplikasi dari Marketplace, apakah itu menyimpan file .apk?

Apakah ada lokasi standar di mana Android akan menyimpan file seperti itu?

Gubatron
sumber

Jawaban:

125

Aplikasi yang sudah diinstal sebelumnya ada di /system/appfolder. Aplikasi yang diinstal oleh pengguna berada di /data/app. Saya kira Anda tidak dapat mengakses kecuali Anda memiliki ponsel yang di-rooting. Saya tidak memiliki ponsel yang di-rooting di sini tetapi coba kode ini:

public class Testing extends Activity {
    private static final String TAG = "TEST";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        File appsDir = new File("/data/app");

        String[] files = appsDir.list();

        for (int i = 0 ; i < files.length ; i++ ) {
            Log.d(TAG, "File: "+files[i]);

        }
    }

Itu memang mencantumkan apks di magic htc saya yang telah di-root dan di emu.

Makarse
sumber
Ini berfungsi seperti Mantra pada Motorola Droid dan juga pada Nexus One keduanya Non-rooted.
Gubatron
Ok, Anda tidak pernah mengatakan apa yang Anda inginkan dari mereka :)
Macarse
Saya ingin dapat membacanya dan melakukan sesuatu dengan mereka. Untungnya itu bisa dibaca.
Gubatron
3
Hal yang baik adalah bahwa tidak hanya file-file yang "dapat didaftar", mereka juga dapat dibaca, sehingga mereka akan sesuai dengan tujuan saya.
Gubatron
Saya telah membaca di tempat lain bahwa APK di / data / aplikasi hanya sesuai dengan aplikasi yang diunduh dari Play store. Apakah itu benar atau apakah itu termasuk sesuatu yang diinstal pengguna?
Christian
135

Anda dapat menggunakan manajer paket ( pm) adb shellke daftar paket:

adb shell pm list packages | sort

dan untuk menampilkan di mana .apkfile tersebut:

adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk

Dan adb pulluntuk mengunduh apk.

adb pull data/app/com.king.candycrushsaga-1/base.apk
Mariusz Jamro
sumber
2
setiap aplikasi memiliki folder dengan nama yang sama dengan nama paket tetapi '-1' atau '-2' pada akhirnya, Ada ide mengapa?
shadygoneinsane
Untuk menentukan path atau nama file target,adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta
95

Jika Anda hanya ingin mendapatkan file APK dari sesuatu yang sebelumnya Anda instal, lakukan ini:

  1. Dapatkan AirDroid dari Google Play
  2. Akses ponsel Anda menggunakan AirDroid dari browser web PC Anda
  3. Buka Aplikasi dan pilih aplikasi yang diinstal
  4. Klik tombol "unduh" untuk mengunduh versi APK aplikasi ini dari ponsel Anda

Anda tidak perlu me-root ponsel Anda, menggunakan adb, atau menulis apa pun.

Jan Przybylo
sumber
2
Diturunkan karena ini tidak benar-benar menjawab pertanyaan. Bagaimana jika OP ingin menggunakan ADB, sehingga dapat digunakan pada perangkat di mana debugging diotorisasi, tetapi kata sandi dilupakan atau layar rusak.
Hack5
cara yang lebih mudah untuk mendapatkan file apk untuk perangkat yang tidak di-root.
fahmi hammadi
Terima kasih. Disebabkan karena itu menjawab pertanyaan dengan mengatakan dengan cara: "Itu membuat mereka tetap di / data, tetapi hanya jika Anda melakukan prosedur X"
ntg
26

Tidak ada lokasi standar, namun Anda dapat menggunakan PackageManager untuk mencari tahu tentang paket dan kelas ApplicationInfo yang bisa Anda dapatkan dari sana memiliki berbagai informasi tentang paket tertentu: path ke .apk, path ke direktori datanya, path ke .apk khusus sumber daya (untuk aplikasi yang dikunci ke depan), dll. Perhatikan bahwa Anda mungkin atau mungkin tidak memiliki izin untuk membaca direktori ini tergantung pada hubungan Anda dengan aplikasi lain; namun, semua aplikasi dapat membaca resource .apk (yang juga merupakan .apk nyata untuk aplikasi yang tidak dikunci).

Jika Anda hanya mencari-cari di dalam shell, aplikasi yang saat ini tidak dikunci terletak di /data/app/.apk. Pengguna shell dapat membaca .apk tertentu, meskipun ia tidak dapat mencantumkan direktori. Dalam rilis mendatang konvensi penamaan akan diubah sedikit, jadi jangan berharap tetap sama, tetapi jika Anda mendapatkan jalur .apk dari manajer paket maka Anda dapat menggunakannya dalam shell.

hackbod
sumber
2
apa itu "aplikasi yang dikunci ke depan"?
Tony Chan
1
Ini adalah mekanisme perlindungan salinan lama yang menginstal .apk dengan izin yang hanya memungkinkan aplikasi untuk membacanya.
hackbod
18

Aplikasi pra-instal biasanya di / sistem / aplikasi dan aplikasi yang diinstal pengguna di / data / aplikasi.

Anda dapat menggunakan "adb pull", tetapi Anda harus mengetahui path lengkap file APK. Pada emulator, Anda bisa mendapatkan daftar direktori menggunakan "adb shell" + "ls". Tetapi pada perangkat android, Anda tidak akan dapat melakukannya di folder "/ data" karena alasan keamanan. Jadi bagaimana Anda mengetahui path lengkap file APK?

Anda bisa mendapatkan daftar lengkap semua aplikasi yang diinstal dengan menulis program yang menanyakan PackageManager. Cuplikan kode pendek di bawah ini:

PackageManager  pm = getPackageManager();
List<PackageInfo> pkginfo_list = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
List<ApplicationInfo> appinfo_list = pm.getInstalledApplications(0);
for (int x=0; x < pkginfo_list.size(); x++){             
  PackageInfo pkginfo = pkginfo_list.get(x);
  pkg_path[x] = appinfo_list.get(x).publicSourceDir;  //store package path in array
}

Anda juga dapat menemukan aplikasi yang akan memberikan info tersebut. Ada banyak dari mereka. Coba yang ini (AppSender).

xmaslatte
sumber
9

Jika Anda mencari jalur aplikasi tertentu, solusi cepat dan kotor adalah dengan hanya menerima laporan bug:

$ adb bugreport | grep 'dir=/data/app' 

Saya tidak tahu bahwa ini akan memberikan daftar lengkap, jadi mungkin membantu menjalankan aplikasi terlebih dahulu.

puting susu
sumber
9

Instal dari pasar

Ini adalah perilaku marketplace apakah akan menjaga apk setelah instalasi. Google play tidak menyimpan apk setelah instalasi. Pasar pihak ketiga lainnya mungkin memiliki perilaku yang berbeda.

Instal dari alat pengembangan / debug (adb, eclipse, android studio)

Ketika kita menginstal apk dari alat debug, secara langsung memanggil adb installatau dari eclipse / android studio, apk akan ditransfer ( adb push) ke direktori baca publik dan dapat ditulis, biasanya /data/local/tmp/. Setelah itu, alat akan menggunakan pmperintah untuk menginstal, itu akan menghapus apk sementara di/data/local/tmp/ setelah instalasi berhasil.

Kami bisa mendapatkan informasi ini dari hasil debug seperti berikut.

$ adb install bin/TestApplication.apk 
3155 KB/s (843375 bytes in 0.260s)
    pkg: /data/local/tmp/TestApplication.apk
Success

Bagaimana sistem menjaga apk

Tentu saja sistem harus menyimpan semua aplikasi di suatu tempat. Ada tiga tempat bagi sistem untuk menjaga apks berdasarkan berbagai jenis apks:

  1. untuk aplikasi stok

    Itu biasanya dikirim dalam perangkat oleh manufaktur, termasuk aplikasi inti untuk menjalankan sistem dan layanan google, Anda dapat menemukannya di bawah direktori /system/appdan /system/priv-app.

  2. aplikasi yang dipasang pengguna

    Sebagian besar aplikasi masuk dalam kategori ini. Apks ini biasanya dipasang dari pasar oleh pengguna atau adb installtanpa -sopsi. Anda dapat menemukannya di bawah direktori /data/appuntuk perangkat yang di-rooting.

  3. aplikasi di sdcard

    Jika apk mengaktifkan lokasi instalnya di sdcard dengan manifesnya android:installLocation="auto", aplikasi dapat dipindahkan ke sdcard dari menu manajer aplikasi sistem. Apks ini biasanya terletak di folder sdcard yang aman /mnt/sdcard/asec.

    Cara lain untuk memaksa lokasi instalasi ke sdcard adalah dengan menggunakan perintah adb install -s apk-to-install.apk.

Sebagai catatan, file untuk aplikasi pra-instal tidak ada dalam satu .apkfile lagi. Ada folder yang berisi file untuk setiap aplikasi pra-instal di direktori /system/appatau /system/priv-appuntuk rilis android terbaru.

alijandro
sumber
8

Anda dapat menarik aplikasi dengan ADB. Mereka ada di / data / App /, saya percaya.

adb pull (location on device) (where to save)

Perhatikan bahwa Anda harus melakukan root pada ponsel Anda untuk menarik aplikasi yang dilindungi salinan.

Bryan Denny
sumber
5

Dalam / data / aplikasi tetapi untuk perlindungan salinan Saya rasa Anda tidak dapat mengaksesnya.

Robby Pond
sumber
2
Jadi bagaimana tepatnya aplikasi yang memungkinkan berbagi APK melalui bluetooth berfungsi? Bagaimana mereka melakukannya?
Anak Kecil
5

Jika Anda di-root, unduh aplikasi Root Explorer. Manajer file terbaik untuk pengguna yang di-rooting. Bagaimanapun, Sistem / aplikasi memiliki semua aplikasi default yang datang dengan telepon, dan data / apk memiliki semua aplikasi aplikasi yang telah Anda instal. Cukup tekan lama pada apk yang Anda inginkan (saat di Root Explorer), buka folder / sdcard Anda dan cukup tempel.

Tanzer
sumber
4

Gunakan ini untuk mendaftar semua .apks di bawah / data / app /

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
gilm
sumber
4
  • data / aplikasi
  • sistem / aplikasi
  • sistem / aplikasi privat
  • mnt / asec (saat dipasang di sdcard)

Anda dapat menarik .apks dari salah satunya:

adb pull / mnt / asec

Ignorante
sumber
3

File .apk dapat ditemukan di bawah / data / app / direktori. Menggunakan ES File Explorer, kita dapat mengakses file .APK ini.

vgokul129
sumber
2

jika Anda menggunakan eclipse goto DDMS dan kemudian file explorer di sana Anda akan melihat folder System / Apps dan apks ada di sana.

Jawad Amjad
sumber
0

Ketika saya menginstal aplikasi saya di emulator, itu menunjukkan file .apk saya di

data / app Lalu saya menggunakan data / app ls // untuk melihat apakah ada atau tidak

Setelah Anda menginstal aplikasi Anda cukup gunakan ls command vie shell dan periksa direktori yang diinginkan tetapi itu tergantung pada jenis aplikasi yang Anda coba instal. Saya menggunakan metode ini untuk Menginstal Point jika ada sesuatu yang salah.

DeAviator
sumber
Saya juga mencoba mencari aplikasi tetapi yang saya temukan adalah bahwa Anda tidak dapat menemukan semua aplikasi sehingga saya menyarankan metode rooting. Saya tidak bisa mendapatkan semua aplikasi yang diinstal. Jadi lebih baik Anda melakukan root pada ponsel Anda dan dapatkan semua apks menggunakan Titanium Backup dan dapatkan kontrol lebih besar atas ponsel Anda.
Jawad Amjad
0

Cara lain untuk mendapatkan yang apktidak dapat Anda temukan, pada perangkat yang di-rooting adalah dengan kotak alat rom .

Buat cadangan menggunakan pengelola aplikasi kemudian buka storage/emulated/appmanagerdan periksa apakah cadangan aplikasi sistem atau cadangan aplikasi pengguna .

beban
sumber
0

Untuk menemukan apk, unduh dan Instal Pengirim Aplikasi Bluetooth dari Play store. Setelah instalasi selesai, buka Pengirim Aplikasi Bluetooth. Ini akan menunjukkan semua aplikasi yang (.apk)diinstal di perangkat Anda, maka Anda dapat dengan mudah mentransfer aplikasi ke PC Anda melalui Bluetooth.

Prem
sumber
0

Berbeda dengan apa yang tertulis pada jawaban yang dipilih, Anda tidak perlu root dan dimungkinkan untuk mendapatkan APK dari aplikasi yang diinstal, yang merupakan cara saya melakukannya pada aplikasi saya (di sini ). Contoh:

List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);

Kemudian, untuk setiap item dalam daftar, Anda dapat mengakses packageInfo.applicationInfo.sourceDir , yang merupakan jalur lengkap APK dari aplikasi yang diinstal.

pengembang android
sumber
-1

Yah saya datang ke posting ini karena saya ingin menginstal ulang beberapa aplikasi yang saya sukai. Jika ini kasus Anda, buka Google Play, dan cari Aplikasi Saya, tab Semua, dan Anda akan menemukan cara untuk menginstal ulang beberapa aplikasi yang Anda sukai. Saya menghadapi masalah yang tidak dapat saya temukan dengan mencari satu aplikasi, tetapi ada di aplikasi saya sehingga saya bisa menginstal ulang di ponsel baru saya;)

Sergio Abreu
sumber