Android เก็บไฟล์. apk ไว้หรือไม่ ถ้าเป็นเช่นนั้น


187

หลังจาก android ติดตั้งแอพพลิเคชั่นจาก Marketplace แล้วจะเก็บไฟล์. apk ไว้หรือไม่?

มีตำแหน่งมาตรฐานที่ Android จะเก็บไฟล์ดังกล่าวหรือไม่?

คำตอบ:


125

แอปพลิเคชั่นที่ติดตั้งล่วงหน้าอยู่ใน/system/appโฟลเดอร์ /data/appการใช้งานของผู้ใช้ที่ติดตั้งอยู่ใน ฉันเดาว่าคุณไม่สามารถเข้าถึงได้หากคุณไม่มีโทรศัพท์รูท ฉันไม่มีโทรศัพท์รูทที่นี่ แต่ลองใช้รหัสนี้:

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]);

        }
    }

มันแสดงรายการ apks ในมายากล htc ที่รูทของฉันและใน emu


สิ่งนี้ทำงานได้อย่างมีเสน่ห์บน Motorola Droid และบน Nexus One ทั้งที่ไม่ใช่รูท
Gubatron

ตกลงคุณไม่เคยพูดในสิ่งที่คุณต้องการสำหรับ :)
384 Macarse

ฉันต้องการอ่านและทำสิ่งต่าง ๆ กับพวกเขา โชคดีที่พวกเขาอ่านได้
Gubatron

3
สิ่งที่ดีคือไม่เพียง แต่ไฟล์เป็น "ฟังได้" แต่ยังสามารถอ่านได้ดังนั้นพวกเขาจะพอดีกับวัตถุประสงค์ของฉัน
Gubatron

ฉันได้อ่านที่อื่นว่า APK ใน / data / app สอดคล้องกับแอพที่ดาวน์โหลดจาก Play store เท่านั้น มันถูกต้องหรือไม่รวมถึงสิ่งที่ผู้ใช้ติดตั้ง?
คริสเตียน

135

คุณสามารถใช้ package manager ( pm) over adb shellto list แพ็คเกจ:

adb shell pm list packages | sort

และเพื่อแสดงตำแหน่งของ.apkไฟล์:

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

และadb pullเพื่อดาวน์โหลด apk

adb pull data/app/com.king.candycrushsaga-1/base.apk

2
ทุกแอพมีโฟลเดอร์ที่มีชื่อเหมือนกับชื่อแพ็คเกจ แต่ '-1' หรือ '-2' ในตอนท้ายความคิดใด ๆ
shadygoneinsane

ในการระบุพา ธ หรือชื่อไฟล์เป้าหมายadb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta

95

หากคุณต้องการรับไฟล์ APK ของสิ่งที่คุณติดตั้งไว้ก่อนหน้าให้ทำดังนี้

  1. รับ AirDroid จาก Google Play
  2. เข้าถึงโทรศัพท์ของคุณโดยใช้ AirDroid จากเว็บเบราว์เซอร์พีซีของคุณ
  3. ไปที่แอพและเลือกแอพที่ติดตั้ง
  4. คลิกปุ่ม "ดาวน์โหลด" เพื่อดาวน์โหลดเวอร์ชัน APK ของแอพนี้จากโทรศัพท์ของคุณ

คุณไม่จำเป็นต้องรูทโทรศัพท์ใช้งานadbหรือเขียนอะไรเลย


2
ลงเนื่องจากไม่ได้ตอบคำถามจริงๆ จะเกิดอะไรขึ้นถ้า OP ต้องการใช้ ADB เพื่อให้สามารถใช้กับอุปกรณ์ที่ได้รับอนุญาตการดีบัก แต่ลืมรหัสผ่านหรือหน้าจอเสีย
Hack5

วิธีที่ง่ายกว่าในการรับไฟล์ apk สำหรับอุปกรณ์ที่ไม่ได้ใช้งาน
fahmi hammadi

Thanx โหวตขึ้นทำให้มันผู้ใช้คำถามด้วยการพูดในทาง: "มันเก็บไว้ใน / ข้อมูล แต่เฉพาะถ้าคุณทำตามขั้นตอน X"
ntg

26

ไม่มีตำแหน่งมาตรฐานอย่างไรก็ตามคุณสามารถใช้ PackageManager เพื่อค้นหาแพ็กเกจและคลาส ApplicationInfo ที่คุณได้รับจากที่นั่นมีข้อมูลต่าง ๆ เกี่ยวกับแพคเกจเฉพาะ: พา ธ ไปยัง. apk, พา ธ ไปยังไดเรกทอรีข้อมูล, พา ธ ไปยัง. apk เท่านั้นสำหรับทรัพยากร (สำหรับแอปที่ล็อคไปข้างหน้า) ฯลฯ โปรดทราบว่าคุณอาจมีหรือไม่มีสิทธิ์ในการอ่านไดเรกทอรีเหล่านี้ขึ้นอยู่กับความสัมพันธ์ของคุณกับแอปอื่น ๆ อย่างไรก็ตามแอปทั้งหมดสามารถอ่านทรัพยากร. apk (ซึ่งเป็น. apk จริงสำหรับแอปที่ไม่ได้ล็อคไว้)

หากคุณเพียงแค่แหย่ในเปลือกปัจจุบันแอพที่ไม่ได้ล็อคอยู่ข้างหน้าอยู่ใน /data/app/.apk ผู้ใช้เชลล์สามารถอ่าน. apk ที่เฉพาะเจาะจงแม้ว่าจะไม่สามารถแสดงรายการไดเรกทอรี ในรุ่นอนาคตการกำหนดชื่อจะมีการเปลี่ยนแปลงเล็กน้อยดังนั้นอย่านับเป็นแบบเดิม แต่ถ้าคุณได้รับพา ธ ของ. apk จากผู้จัดการแพ็คเกจคุณสามารถใช้มันในเชลล์ได้


2
"แอปที่ล็อคไปข้างหน้า" คืออะไร
Tony Chan

1
มันเป็นกลไกการป้องกันการคัดลอกแบบเก่าที่ติดตั้ง. apk พร้อมสิทธิ์ที่อนุญาตให้แอปพลิเคชันอ่านเท่านั้น
hackbod

18

แอพที่ติดตั้งไว้ล่วงหน้าโดยทั่วไปจะอยู่ใน / system / แอพและแอพที่ติดตั้งโดยผู้ใช้นั้นอยู่ใน / data / app

คุณสามารถใช้ "adb pull" แต่คุณต้องรู้เส้นทางแบบเต็มของไฟล์ APK บนอีมูเลเตอร์คุณสามารถรับรายชื่อไดเรกทอรีโดยใช้ "adb shell" + "ls" แต่บนอุปกรณ์ Android คุณจะไม่สามารถทำได้ในโฟลเดอร์ "/ data" เนื่องจากเหตุผลด้านความปลอดภัย ดังนั้นคุณจะหาเส้นทางเต็มของไฟล์ APK ได้อย่างไร

คุณสามารถรับรายการทั้งหมดของแอพทั้งหมดที่ติดตั้งโดยการเขียนโปรแกรมที่สอบถาม PackageManager ตัวอย่างรหัสสั้น ๆ ด้านล่าง:

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
}

คุณยังสามารถค้นหาแอพที่จะให้ข้อมูลดังกล่าว มีจำนวนมาก ลองใช้อันนี้ (AppSender)


9

หากคุณกำลังมองหาเส้นทางของแอพที่เฉพาะเจาะจงทางออกที่รวดเร็วและสกปรกก็คือการรายงานข้อผิดพลาด:

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

ฉันไม่ทราบว่านี่จะให้รายการที่ครบถ้วนดังนั้นอาจช่วยให้เรียกใช้แอปก่อน


9

ติดตั้งจากตลาด

มันเป็นพฤติกรรมของตลาดว่าจะเก็บ apk ไว้หลังจากการติดตั้งหรือไม่ Google play จะไม่เก็บ apk ไว้หลังจากการติดตั้ง ตลาดของบุคคลที่สามอื่น ๆ อาจมีพฤติกรรมที่แตกต่างกัน

ติดตั้งจากเครื่องมือพัฒนา / แก้ไขข้อบกพร่อง (adb, eclipse, android studio)

เมื่อเราติดตั้ง APK จากเครื่องมือแก้ไขข้อบกพร่องโดยตรงเรียกadb installหรือจากคราส / Android สตูดิโอ apk จะถูกโอน ( adb push) /data/local/tmp/เพื่ออ่านประชาชนและไดเรกทอรีที่สามารถเขียนได้มักจะ หลังจากนั้นเครื่องมือจะใช้pmคำสั่งเพื่อติดตั้งเครื่องมือจะลบ apk ชั่วคราว/data/local/tmp/หลังจากติดตั้งสำเร็จ

เราสามารถรับข้อมูลเหล่านี้จากผลลัพธ์การดีบักดังต่อไปนี้

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

ระบบเก็บ apk อย่างไร

แน่นอนว่าระบบต้องเก็บ apks ทั้งหมดไว้ที่ใดที่หนึ่ง มีอยู่สามที่ที่ระบบจะเก็บรักษา apks ตามชนิดของ apks ที่แตกต่างกัน:

  1. สำหรับแอพหุ้น

    เหล่านั้นมักจะมีการจัดส่งในเครื่องโดยการผลิตรวมทั้งแอปหลักสำหรับระบบการทำงานและการให้บริการ Google คุณสามารถพบพวกเขาภายใต้ไดเรกทอรีและ/system/app/system/priv-app

  2. แอพที่ติดตั้งโดยผู้ใช้

    apks ส่วนใหญ่อยู่ในหมวดหมู่นี้ apks เหล่านี้มักจะติดตั้งจากตลาดโดยผู้ใช้หรือโดยadb installไม่มี-sตัวเลือก คุณสามารถค้นหาได้ภายใต้ไดเรกทอรี/data/appสำหรับอุปกรณ์ที่รูท

  3. แอพใน sdcard

    หาก apk เปิดใช้งานตำแหน่งการติดตั้งใน sdcard ด้วยandroid:installLocation="auto"ในรายการจะสามารถย้ายแอปไปยัง sdcard จากเมนูตัวจัดการแอปของระบบ apk ที่เหล่านี้มักจะอยู่ในโฟลเดอร์ที่เชื่อถือได้ของ /mnt/sdcard/asecsdcard

    วิธีอับละอองเกสรที่จะบังคับให้สถานที่ติดตั้งลงใน sdcard adb install -s apk-to-install.apkจะใช้คำสั่ง

โปรดทราบว่าไฟล์สำหรับแอพที่ติดตั้งล่วงหน้าไม่ได้อยู่ใน.apkไฟล์เดียวอีกต่อไป มีโฟลเดอร์ที่บรรจุไฟล์สำหรับทุกแอปที่ติดตั้งไว้แล้วในไดเรกทอรี/system/appหรือ/system/priv-appสำหรับ Android รุ่นล่าสุด


8

คุณสามารถดึงแอพด้วย ADB พวกเขาอยู่ใน / data / แอป / ฉันเชื่อว่า

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

โปรดทราบว่าคุณต้องรูทโทรศัพท์ของคุณเพื่อดึงแอปที่มีการป้องกันการคัดลอก


5

ใน / data / app แต่เพื่อป้องกันการคัดลอกฉันไม่คิดว่าคุณสามารถเข้าถึงได้


2
แอปที่อนุญาตให้แชร์ APK ผ่านบลูทู ธ ทำงานอย่างไร พวกเขาทำมันได้อย่างไร?
เด็กเล็ก

5

หากคุณรูทแล้วให้ดาวน์โหลดแอป Root Explorer ตัวจัดการไฟล์ที่ดีที่สุดสำหรับผู้ใช้ที่รูท อย่างไรก็ตามระบบ / แอปมี apks เริ่มต้นทั้งหมดที่มาพร้อมกับโทรศัพท์และ data / apk มี apks ทั้งหมดของแอพที่คุณติดตั้ง เพียงกดบน apk ที่คุณต้องการ (ในขณะที่อยู่ในรูท Explorer) ไปที่โฟลเดอร์ / sdcard ของคุณและวาง


4

ใช้สิ่งนี้เพื่อแสดงรายการ. apk ทั้งหมดภายใต้ / data / app /

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4

4
  • ข้อมูล / แอป
  • ระบบ / แอป
  • ระบบ / priv แอป
  • mnt / asec (เมื่อติดตั้งใน sdcard)

คุณสามารถดึง. apk จากพวกเขา:

adb pull / mnt / asec


3

ไฟล์. apk สามารถอยู่ภายใต้ / data / app / directory การใช้ES File Explorerเราสามารถเข้าถึงไฟล์. APK เหล่านี้ได้


2

หากคุณกำลังใช้ eclipse goto DDMS จากนั้นสำรวจไฟล์ที่นั่นคุณจะเห็นโฟลเดอร์ System / Apps และ apks อยู่ที่นั่น


0

เมื่อฉันติดตั้งแอพของฉันบนอีมูเลเตอร์มันจะแสดงไฟล์. apk ของฉัน

data / app ฉันใช้ ls data / app // เพื่อดูว่ามีอยู่หรือไม่

หลังจากที่คุณติดตั้งแอปของคุณให้ใช้คำสั่ง ls vie shell และตรวจสอบไดเรกทอรีที่ต้องการ แต่ขึ้นอยู่กับประเภทของแอปพลิเคชันที่คุณพยายามติดตั้ง ฉันใช้วิธีนี้ในการติดตั้งพ อยต์หากมีสิ่งผิดปกติ


ฉันยังพยายามค้นหา apks แต่สิ่งที่ฉันพบคือคุณไม่สามารถค้นหา apks ทั้งหมดดังนั้นฉันแนะนำวิธีการรูท ฉันไม่สามารถรับ apks ที่ติดตั้งทั้งหมดได้ ดังนั้นดีกว่าที่จะรูทโทรศัพท์ของคุณและรับ apks ทั้งหมดโดยใช้ Titanium Backup และควบคุมโทรศัพท์ของคุณได้ดียิ่งขึ้น
Jawad Amjad

0

อีกวิธีในการรับapkของที่คุณหาไม่ได้บนอุปกรณ์ที่รูทคือกล่องเครื่องมือรอมกล่องเครื่องมือรอม

สำรองข้อมูลโดยใช้ตัวจัดการแอปแล้วไปstorage/emulated/appmanagerและตรวจสอบทั้งการสำรองข้อมูลแอประบบหรือapp ที่ใช้งานสำรองข้อมูล


0

ในการค้นหาให้apkดาวน์โหลดและติดตั้ง Bluetooth App Sender จาก Play store เมื่อการติดตั้งเสร็จสิ้นให้เปิด Bluetooth App Sender มันจะแสดงแอพทั้งหมดที่(.apk)ติดตั้งในอุปกรณ์ของคุณจากนั้นคุณสามารถถ่ายโอนแอพไปยังพีซีของคุณผ่านบลูทู ธ ได้อย่างง่ายดาย


0

ตรงข้ามกับสิ่งที่เขียนไว้ในคำตอบที่เลือกคุณไม่จำเป็นต้องรูทและเป็นไปได้ที่จะได้รับ APK ของแอพที่ติดตั้งซึ่งเป็นวิธีที่ฉันทำบนแอปของฉัน ( ที่นี่ ) ตัวอย่าง:

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

จากนั้นสำหรับแต่ละรายการในรายการคุณสามารถเข้าถึงpackageInfo.applicationInfo.sourceDirซึ่งเป็นเส้นทางแบบเต็มของ APK ของแอพที่ติดตั้ง


-1

ฉันมาที่โพสต์นี้เพราะฉันต้องการติดตั้งแอพที่ฉันชอบอีกมาก หากเป็นกรณีของคุณเพียงไปที่ Google Play แล้วมองหาแอพของฉันแท็บทั้งหมดและคุณจะพบวิธีติดตั้งแอพที่คุณชอบอีกครั้ง ฉันประสบปัญหาที่ไม่สามารถค้นหาได้โดยค้นหาแอปหนึ่ง แต่มีอยู่ในแอพของฉันดังนั้นฉันจึงสามารถติดตั้งในมือถือเครื่องใหม่ของฉันได้)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.