หลังจาก android ติดตั้งแอพพลิเคชั่นจาก Marketplace แล้วจะเก็บไฟล์. apk ไว้หรือไม่?
มีตำแหน่งมาตรฐานที่ Android จะเก็บไฟล์ดังกล่าวหรือไม่?
หลังจาก android ติดตั้งแอพพลิเคชั่นจาก Marketplace แล้วจะเก็บไฟล์. apk ไว้หรือไม่?
มีตำแหน่งมาตรฐานที่ Android จะเก็บไฟล์ดังกล่าวหรือไม่?
คำตอบ:
แอปพลิเคชั่นที่ติดตั้งล่วงหน้าอยู่ใน/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
คุณสามารถใช้ package manager ( pm
) over adb shell
to 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
adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
หากคุณต้องการรับไฟล์ APK ของสิ่งที่คุณติดตั้งไว้ก่อนหน้าให้ทำดังนี้
คุณไม่จำเป็นต้องรูทโทรศัพท์ใช้งานadb
หรือเขียนอะไรเลย
ไม่มีตำแหน่งมาตรฐานอย่างไรก็ตามคุณสามารถใช้ PackageManager เพื่อค้นหาแพ็กเกจและคลาส ApplicationInfo ที่คุณได้รับจากที่นั่นมีข้อมูลต่าง ๆ เกี่ยวกับแพคเกจเฉพาะ: พา ธ ไปยัง. apk, พา ธ ไปยังไดเรกทอรีข้อมูล, พา ธ ไปยัง. apk เท่านั้นสำหรับทรัพยากร (สำหรับแอปที่ล็อคไปข้างหน้า) ฯลฯ โปรดทราบว่าคุณอาจมีหรือไม่มีสิทธิ์ในการอ่านไดเรกทอรีเหล่านี้ขึ้นอยู่กับความสัมพันธ์ของคุณกับแอปอื่น ๆ อย่างไรก็ตามแอปทั้งหมดสามารถอ่านทรัพยากร. apk (ซึ่งเป็น. apk จริงสำหรับแอปที่ไม่ได้ล็อคไว้)
หากคุณเพียงแค่แหย่ในเปลือกปัจจุบันแอพที่ไม่ได้ล็อคอยู่ข้างหน้าอยู่ใน /data/app/.apk ผู้ใช้เชลล์สามารถอ่าน. apk ที่เฉพาะเจาะจงแม้ว่าจะไม่สามารถแสดงรายการไดเรกทอรี ในรุ่นอนาคตการกำหนดชื่อจะมีการเปลี่ยนแปลงเล็กน้อยดังนั้นอย่านับเป็นแบบเดิม แต่ถ้าคุณได้รับพา ธ ของ. apk จากผู้จัดการแพ็คเกจคุณสามารถใช้มันในเชลล์ได้
แอพที่ติดตั้งไว้ล่วงหน้าโดยทั่วไปจะอยู่ใน / 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)
หากคุณกำลังมองหาเส้นทางของแอพที่เฉพาะเจาะจงทางออกที่รวดเร็วและสกปรกก็คือการรายงานข้อผิดพลาด:
$ adb bugreport | grep 'dir=/data/app'
ฉันไม่ทราบว่านี่จะให้รายการที่ครบถ้วนดังนั้นอาจช่วยให้เรียกใช้แอปก่อน
ติดตั้งจากตลาด
มันเป็นพฤติกรรมของตลาดว่าจะเก็บ 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 ที่แตกต่างกัน:
สำหรับแอพหุ้น
เหล่านั้นมักจะมีการจัดส่งในเครื่องโดยการผลิตรวมทั้งแอปหลักสำหรับระบบการทำงานและการให้บริการ Google คุณสามารถพบพวกเขาภายใต้ไดเรกทอรีและ/system/app
/system/priv-app
แอพที่ติดตั้งโดยผู้ใช้
apks ส่วนใหญ่อยู่ในหมวดหมู่นี้ apks เหล่านี้มักจะติดตั้งจากตลาดโดยผู้ใช้หรือโดยadb install
ไม่มี-s
ตัวเลือก คุณสามารถค้นหาได้ภายใต้ไดเรกทอรี/data/app
สำหรับอุปกรณ์ที่รูท
แอพใน sdcard
หาก apk เปิดใช้งานตำแหน่งการติดตั้งใน sdcard ด้วยandroid:installLocation="auto"
ในรายการจะสามารถย้ายแอปไปยัง sdcard จากเมนูตัวจัดการแอปของระบบ apk ที่เหล่านี้มักจะอยู่ในโฟลเดอร์ที่เชื่อถือได้ของ /mnt/sdcard/asec
sdcard
วิธีอับละอองเกสรที่จะบังคับให้สถานที่ติดตั้งลงใน sdcard adb install -s apk-to-install.apk
จะใช้คำสั่ง
โปรดทราบว่าไฟล์สำหรับแอพที่ติดตั้งล่วงหน้าไม่ได้อยู่ใน.apk
ไฟล์เดียวอีกต่อไป มีโฟลเดอร์ที่บรรจุไฟล์สำหรับทุกแอปที่ติดตั้งไว้แล้วในไดเรกทอรี/system/app
หรือ/system/priv-app
สำหรับ Android รุ่นล่าสุด
คุณสามารถดึงแอพด้วย ADB พวกเขาอยู่ใน / data / แอป / ฉันเชื่อว่า
adb pull (location on device) (where to save)
โปรดทราบว่าคุณต้องรูทโทรศัพท์ของคุณเพื่อดึงแอปที่มีการป้องกันการคัดลอก
ใน / data / app แต่เพื่อป้องกันการคัดลอกฉันไม่คิดว่าคุณสามารถเข้าถึงได้
หากคุณรูทแล้วให้ดาวน์โหลดแอป Root Explorer ตัวจัดการไฟล์ที่ดีที่สุดสำหรับผู้ใช้ที่รูท อย่างไรก็ตามระบบ / แอปมี apks เริ่มต้นทั้งหมดที่มาพร้อมกับโทรศัพท์และ data / apk มี apks ทั้งหมดของแอพที่คุณติดตั้ง เพียงกดบน apk ที่คุณต้องการ (ในขณะที่อยู่ในรูท Explorer) ไปที่โฟลเดอร์ / sdcard ของคุณและวาง
ใช้สิ่งนี้เพื่อแสดงรายการ. apk ทั้งหมดภายใต้ / data / app /
adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
คุณสามารถดึง. apk จากพวกเขา:
adb pull / mnt / asec
ไฟล์. apk สามารถอยู่ภายใต้ / data / app / directory การใช้ES File Explorerเราสามารถเข้าถึงไฟล์. APK เหล่านี้ได้
หากคุณกำลังใช้ eclipse goto DDMS จากนั้นสำรวจไฟล์ที่นั่นคุณจะเห็นโฟลเดอร์ System / Apps และ apks อยู่ที่นั่น
เมื่อฉันติดตั้งแอพของฉันบนอีมูเลเตอร์มันจะแสดงไฟล์. apk ของฉัน
data / app ฉันใช้ ls data / app // เพื่อดูว่ามีอยู่หรือไม่
หลังจากที่คุณติดตั้งแอปของคุณให้ใช้คำสั่ง ls vie shell และตรวจสอบไดเรกทอรีที่ต้องการ แต่ขึ้นอยู่กับประเภทของแอปพลิเคชันที่คุณพยายามติดตั้ง ฉันใช้วิธีนี้ในการติดตั้งพ อยต์หากมีสิ่งผิดปกติ
อีกวิธีในการรับapk
ของที่คุณหาไม่ได้บนอุปกรณ์ที่รูทคือกล่องเครื่องมือรอมกล่องเครื่องมือรอม
สำรองข้อมูลโดยใช้ตัวจัดการแอปแล้วไปstorage/emulated/appmanager
และตรวจสอบทั้งการสำรองข้อมูลแอประบบหรือapp ที่ใช้งานสำรองข้อมูล
ในการค้นหาให้apk
ดาวน์โหลดและติดตั้ง Bluetooth App Sender จาก Play store เมื่อการติดตั้งเสร็จสิ้นให้เปิด Bluetooth App Sender มันจะแสดงแอพทั้งหมดที่(.apk)
ติดตั้งในอุปกรณ์ของคุณจากนั้นคุณสามารถถ่ายโอนแอพไปยังพีซีของคุณผ่านบลูทู ธ ได้อย่างง่ายดาย
ตรงข้ามกับสิ่งที่เขียนไว้ในคำตอบที่เลือกคุณไม่จำเป็นต้องรูทและเป็นไปได้ที่จะได้รับ APK ของแอพที่ติดตั้งซึ่งเป็นวิธีที่ฉันทำบนแอปของฉัน ( ที่นี่ ) ตัวอย่าง:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
จากนั้นสำหรับแต่ละรายการในรายการคุณสามารถเข้าถึงpackageInfo.applicationInfo.sourceDirซึ่งเป็นเส้นทางแบบเต็มของ APK ของแอพที่ติดตั้ง
ฉันมาที่โพสต์นี้เพราะฉันต้องการติดตั้งแอพที่ฉันชอบอีกมาก หากเป็นกรณีของคุณเพียงไปที่ Google Play แล้วมองหาแอพของฉันแท็บทั้งหมดและคุณจะพบวิธีติดตั้งแอพที่คุณชอบอีกครั้ง ฉันประสบปัญหาที่ไม่สามารถค้นหาได้โดยค้นหาแอปหนึ่ง แต่มีอยู่ในแอพของฉันดังนั้นฉันจึงสามารถติดตั้งในมือถือเครื่องใหม่ของฉันได้)