ฉันจะรับ APK ของแอพที่ติดตั้งโดยไม่ต้องเข้าถึงรูทได้อย่างไร


198

ฉันกำลังพยายามแยกไฟล์ APK ของแอพ Android ที่ติดตั้งโดยไม่ต้องมีการอนุญาตรูท

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

มีคนบอกฉันว่ามันเป็นไปได้ไหม ไม่มีแอพสำรองข้อมูลที่สำรองไฟล์ APK ที่ไม่มีรูทหรือไม่


2
ฉันคิดว่าคำถามนี้ตอบแล้ว กรุณาดูstackoverflow.com/a/12197924/1016544
Wahib Ul Haq




3
การอ่านของฉันเกี่ยวกับเรื่องนี้คือ @ pinas กำลังถามวิธีเขียนโค้ดนี้โดยใช้โปรแกรม - การอ้างอิงแอพที่ทำเหมือนกับว่าจะพูดว่า "แอพเหล่านี้ทำได้ แต่เป็นอย่างไร" เหตุผล "ระงับ" ที่นี่ไม่ถูกต้องในความคิดของฉันเนื่องจากการที่
Richard Le Mesurier

คำตอบ:


381

การเข้าถึง / data / app เป็นไปได้โดยไม่ได้รับอนุญาต สิทธิ์ในไดเรกทอรีนั้นคือ rwxrwx - x ดำเนินการการอนุญาตในไดเรกทอรีหมายความว่าคุณสามารถเข้าถึงได้อย่างไรก็ตามการไม่มีสิทธิ์การอ่านหมายความว่าคุณไม่สามารถรับรายชื่อของเนื้อหาได้ดังนั้นเพื่อที่จะเข้าถึงมันคุณจะต้องทราบชื่อของไฟล์ที่คุณจะเข้าถึง ผู้จัดการบรรจุภัณฑ์ของ Android จะบอกชื่อของ apk ที่เก็บไว้สำหรับแพ็คเกจที่ระบุ

เมื่อต้องการทำสิ่งนี้จากบรรทัดคำสั่งใช้adb shell pm list packagesเพื่อรับรายการแพ็กเกจที่ติดตั้งและค้นหาแพ็กเกจที่ต้องการ

adb shell pm path your-package-nameที่มีชื่อแพคเกจที่เราจะได้รับชื่อไฟล์ที่เกิดขึ้นจริงและสถานที่ตั้งของเอพีเคโดยใช้

และเมื่อรู้ไดเรกทอรีทั้งหมดเราก็สามารถดึง adb ได้โดยใช้ adb pull full/directory/of/the.apk

ขอมอบเครดิตให้แก่ @tarn สำหรับการชี้ให้เห็นว่าภายใต้ Lollipop เส้นทาง apk จะเป็น /data/app/your-package-name-1/base.apk


33
การทำเช่นนี้จากบรรทัดคำสั่งการใช้งานadb shell pm list packagesที่จะได้รับรายชื่อของแพคเกจติดตั้งที่รับแพคเกจที่ต้องการผนวกกับมันและดึงมันออกมาจาก-1.apk /data/appตัวอย่าง: ถ้าชื่อแพคเกจการใช้งานorg.mozilla.firefox adb pull /data/app/org.mozilla.firefox-1.apk
sschuberth

11
ในการรับชื่อไฟล์จริงของ APK ให้ใช้ adb shell pm path your-package-name ดูคำถามนี้สำหรับคำตอบเพิ่มเติมโดยละเอียดstackoverflow.com/questions/4032960/…
Yojimbo

2
สำหรับอมยิ้ม apk เส้นทางที่จะ /data/app/your-package-name-1/base.apk
Tarn

มันไม่ได้ผลสำหรับฉัน ฉันได้รับข้อผิดพลาดต่อไปนี้:adb: error: remote object '/data/app/com.Slack-1/base.apk' does not exist
0xcaff

1
@ 0xcaff Android มีการเปลี่ยนแปลงเล็กน้อยใน 5 ปีตั้งแต่คำตอบนี้ให้; บางทีเส้นทางนี้อาจเป็นหนึ่งในการเปลี่ยนแปลงเหล่านั้น คุณควรจะสามารถเข้าสู่ระบบและค้นหาไฟล์ด้วยตนเองเพื่อหาเส้นทางที่เหมาะสมสำหรับระบบปฏิบัติการเวอร์ชันของคุณ
mah

55

Android ผนวกหมายเลขลำดับต่อท้ายชื่อแพ็คเกจเพื่อสร้างชื่อไฟล์ APK ขั้นสุดท้าย (เป็นไปได้ว่าสิ่งนี้จะแตกต่างกันไปตามรุ่นของ Android OS) ลำดับของคำสั่งต่อไปนี้ทำงานบนอุปกรณ์ที่ไม่ได้รูท :

  1. รับชื่อพา ธ เต็มของไฟล์ APK สำหรับแพ็คเกจที่ต้องการ

    adb shell pm path com.example.someapp

    สิ่งนี้จะให้ผลลัพธ์เป็น: package:/data/app/com.example.someapp-2.apk.

  2. ดึงไฟล์ APK จากอุปกรณ์ Android ไปยังกล่องพัฒนา

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

ตำแหน่งของ APK หลังจากดึงสำเร็จจะอยู่ที่ ../sdk/platform-tools/base.apk บนพีซี / แล็ปท็อปของคุณ


4
สามารถยืนยันได้ว่าโซลูชันนี้ทำงานบนอุปกรณ์ที่ไม่ได้รูท แต่ต้องการความรู้เกี่ยวกับชื่อแพ็กเกจก่อนคำสั่งแรก! ใช้ 'แพคเกจรายการ adb shell pm' เพื่อรับรายการแพ็กเกจทั้งหมดบนโทรศัพท์ในกรณีที่คุณไม่แน่ใจเกี่ยวกับชื่อแพ็กเกจของแอพที่คุณต้องการ
AndroidNoob

โฟลเดอร์ใดในเครื่องโลคัลของตัวดึงข้อมูล apk เข้าสู่ แก้ไข: NVM สิ่งที่ไดเรกทอรีที่คุณอยู่ในเมื่อทำดึง adb และ ...
อดัมจอห์นส์

@IgorGanapolsky ลองใช้ adb pull /data/app/com.example.someapp-2/base.apk
Chris - Jr

@zelanix หลังจากทำการดึง adb โดยที่ฉันสามารถ c. ไฟล์. apk ขอบคุณ
Vijaya Varma Lanke

22

คุณไม่จำเป็นต้องได้รับอนุญาต ROOT เพื่อรับรายการแอพที่ติดตั้ง

คุณสามารถทำได้ด้วย Android PackageManager

ด้านล่างเป็นข้อมูลโค้ดขนาดเล็ก

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. ตรวจสอบรายการ apk ที่ติดตั้งไว้ (คำสั่งต่อไปนี้จะแสดงรายการพา ธ ที่ติดตั้งและชื่อแพ็คเกจด้วย) แพ็กเกจรายการ adb shell pm -f
  2. ใช้adb pull / package_path / ชื่อแพคเกจ / path_in_pc (เส้นทางแพกเกจและชื่อแพคเกจหนึ่งสามารถได้รับจากคำสั่งข้างต้น 1)

6

เมื่อคุณติดตั้ง Eclipse สำหรับ Android developement:

  • ใช้อุปกรณ์ของคุณเป็นอุปกรณ์ดีบั๊ก บนโทรศัพท์ของคุณ: การตั้งค่า> แอปพลิเคชั่น> การพัฒนาและเปิดใช้งานการแก้ไขข้อบกพร่อง USB ดูที่ http://developer.android.com/tools/device.html
  • ใน Eclipse เปิด DDMS-window: หน้าต่าง> เปิดเปอร์สเปคทีฟ> อื่น ๆ ... > DDMS ดูที่http://developer.android.com/tools/debugging/ddms.html
  • หากคุณไม่เห็นอุปกรณ์ของคุณลอง (อีกครั้ง) ติดตั้งไดรเวอร์ USB สำหรับอุปกรณ์ของคุณ
  • ในบานหน้าต่างตรงกลางเลือกแท็บ "File Explorer" แล้วไปที่ระบบ> แอพ
  • ตอนนี้คุณสามารถเลือกหนึ่งไฟล์ขึ้นไปแล้วคลิกไอคอน "ดึงไฟล์จากอุปกรณ์" ที่ด้านบน (ขวาไปที่แท็บ)
  • เลือกโฟลเดอร์เป้าหมาย - ธาดา!

มีแอพระบบเท่านั้น (แอพที่ติดตั้งไว้ล่วงหน้า) ใน / system / app
arne.jans

6

ใน Nougat (7.0) เวอร์ชั่น Android adb shell pm list packagesจะเรียกใช้เพื่อแสดงรายการแพ็คเกจที่ติดตั้งบนอุปกรณ์ จากนั้นเรียกใช้adb shell pm path your-package-nameเพื่อแสดงเส้นทางของ apk หลังจากการใช้ adb adb shell cp /data/app/com.test-1/base.apk /storage/emulated/0/Downloadเพื่อคัดลอกแพคเกจเพื่อดาวน์โหลด แล้วดึง apk adb pull /storage/emulated/0/Download/base.apkจากการดาวน์โหลดไปยังเครื่องของคุณโดยใช้


2

ฉันได้รับ does not exist error

นี่คือวิธีที่ฉันใช้งานได้:

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 ()จะให้รายการแอปพลิเคชันที่ติดตั้งไว้แก่คุณและ ApplicationInfo.sourceDir เป็นพา ธ ไปยังไฟล์. 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

0

ฉันพบวิธีรับชื่อแพ็กเกจของ APK ในอุปกรณ์ที่ไม่ใช่รูท มันไม่ได้สง่างาม แต่ใช้งานได้ตลอดเวลา

ขั้นตอนที่ 1 : บนอุปกรณ์ของคุณเปิด APK เป้าหมาย

ขั้นตอนที่ 2 : บนหน้าต่าง PC cmd ให้พิมพ์คำสั่งนี้:

 adb shell dumpsys activity a > dump.txt

เนื่องจากผลลัพธ์ของคำสั่งนี้มีมากมายขอแนะนำให้เปลี่ยนเส้นทางไปยังไฟล์

ขั้นตอนที่ 3 : เปิดไฟล์ dump.txt นี้ด้วยโปรแกรมแก้ไขใด ๆ

สำหรับอุปกรณ์สำหรับ Android 4.4:
จุดเริ่มต้นของไฟล์จะเป็นดังนี้:

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 

ชื่อแพ็กเกจอยู่ในบรรทัดที่ 3, com.tencent.mmสำหรับตัวอย่างนี้

สำหรับ Android 4.4 และใหม่กว่า:
เอาต์พุต dumpsys เปลี่ยนไปเล็กน้อย ลองค้นหา "Stack # 1" ชื่อแพคเกจจะอยู่ใกล้ด้านล่างมาก

นอกจากนี้ค้นหา "baseDir" คุณจะพบเส้นทางแบบเต็มของไฟล์ apk!


-1

เปิด ES explorer -> กดปุ่มเมนูที่มุมซ้ายด้านบน (สามแถบแนวนอน) -> ในส่วนไลบรารี่เลือกแอพ

ดังนั้นคุณจะได้รับรายชื่อแอพทั้งหมดของผู้ใช้ ค้นหาแอพพลิเคชั่นของคุณและเลือกด้วยการกดที่ยาว จากนั้นกด "เพิ่มเติม" ที่มุมขวาล่างแล้วเลือก "ส่ง" จากนั้นคุณสามารถใช้ตัวเลือกต่าง ๆ เช่นคุณสามารถเลือก "ES Save To" เพื่อบันทึกไฟล์. apk ไปยังโฮมไดเร็กตอรี่ของคุณหรือที่อื่น ๆ


-2

หรือคุณสามารถได้รับ 'บลูทู ธ การถ่ายโอนไฟล์จากGoogle Play/system/และตั้งค่าโฟลเดอร์บ้าน /แล้วคุณยังสามารถไปที่

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