रूट एक्सेस के बिना मुझे इंस्टॉल किए गए ऐप का एपीके कैसे मिलेगा?


197

मैं रूट अनुमतियों के बिना एक स्थापित एंड्रॉइड ऐप की एपीके फ़ाइल निकालने की कोशिश कर रहा हूं।

मैंने सोचा था कि यह असंभव था, क्योंकि गैर-सिस्टम-ऐप के लिए सभी एपीके फाइलें / डेटा / ऐप में स्थित हैं, और इस फ़ोल्डर तक पहुंचना मूल अनुमति है। तब मैंने पाया कि Google Play स्टोर में ऐसे कई ऐप्स हैं जो गैर-रूट किए गए डिवाइसों पर भी एपीके फाइलों तक पहुंच पाते हैं।

क्या कोई मुझे बता सकता है कि यह कैसे संभव है? क्या बैकअप ऐप्स नहीं हैं जो बिना रूट के एपीके फ़ाइलों का बैकअप लेते हैं?


2
मुझे लगता है कि इस सवाल का जवाब पहले से ही है। कृपया एक नज़र stackoverflow.com/a/12197924/1016544 पर दें
वाहिब उल हक




3
इस बारे में मेरा पढ़ना यह है कि @pinas पूछ रहा था कि इस प्रोग्राम को कैसे कोडित किया जाए - संदर्भित ऐप जो इसे करते हैं जैसे कि "ये ऐप इसे करते हैं, लेकिन कैसे?"। यहां "ऑन होल्ड" कारण मेरी राय में गलत है, इस वजह से।
रिचर्ड ले मेसुरियर

जवाबों:


380

रूट अनुमति के बिना एक्सेस / डेटा / ऐप संभव है; उस निर्देशिका पर अनुमतियाँ rwxrwx - x हैं। किसी निर्देशिका पर निष्पादन की अनुमति का मतलब है कि आप इसे एक्सेस कर सकते हैं, हालांकि रीड अनुमति की कमी का मतलब है कि आप इसकी सामग्री की एक सूची प्राप्त नहीं कर सकते हैं - इसलिए इसे एक्सेस करने के लिए आपको उस फ़ाइल का नाम पता होना चाहिए जिसे आप एक्सेस कर रहे हैं। एंड्रॉइड का पैकेज मैनेजर आपको दिए गए पैकेज के लिए स्टोर किए गए एपीके का नाम बताएगा।

कमांड लाइन से ऐसा adb shell pm list packagesकरने के लिए, स्थापित पैकेजों की सूची प्राप्त करने और वांछित पैकेज खोजने के लिए उपयोग करें।

पैकेज नाम के साथ, हम एपीके का उपयोग करके वास्तविक फ़ाइल नाम और स्थान प्राप्त कर सकते हैं adb shell pm path your-package-name

और पूर्ण निर्देशिका को जानते हुए, हम अंत में उपयोग करके अदब को खींच सकते हैं adb pull full/directory/of/the.apk

लॉलीपॉप के तहत @tarn को इंगित करने का श्रेय, 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
एपीके का वास्तविक फ़ाइल नाम प्राप्त करने के लिए, adb शेल pm पाथ अपने पैकेज-नाम का उपयोग करें। अधिक विस्तृत जवाब stackoverflow.com/questions/4032960/…
Yojimbo

2
लॉलीपॉप के लिए एपीके का रास्ता /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 एंड्रॉइड 5 वर्षों में काफी बदल गया है क्योंकि यह उत्तर प्रदान किया गया था; शायद यह मार्ग उन परिवर्तनों में से एक है। ओएस के आपके संस्करण के लिए जो भी रास्ता उपयुक्त है, उसमें आने के लिए आपको मैन्युअल रूप से लॉग इन और फ़ाइल का पता लगाने में सक्षम होना चाहिए।
महिंद्रा

55

एंड्रॉइड अंतिम एपीके फ़ाइल नाम (यह संभव है कि यह एंड्रॉइड ओएस के संस्करण के साथ भिन्न होता है) का उत्पादन करने के लिए पैकेज नाम के लिए एक क्रम संख्या जोड़ता है। आदेशों के निम्नलिखित अनुक्रम गैर-रूट किए गए डिवाइस पर काम करते हैं :

  1. वांछित पैकेज के लिए एपीके फ़ाइल का पूरा पथ नाम प्राप्त करें।

    adb shell pm path com.example.someapp

    यह आउटपुट देता है package:/data/app/com.example.someapp-2.apk:।

  2. एंड्रॉइड डिवाइस से डेवलपमेंट बॉक्स में एपीके फाइल खींचें।

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

सफल खींचने के बाद एपीके का स्थान आपके पीसी / लैपटॉप पर ../sdk/platform-tools/base.apk पर होगा।


4
इस समाधान की पुष्टि कर सकते हैं कि एक गैर निहित डिवाइस पर काम किया गया है, हालांकि पहले कमांड से पहले पैकेज नाम के ज्ञान की आवश्यकता है! फ़ोन के
इनसेज़

पुलर की लोकल मशीन पर कौन सा फोल्डर एपीके में जाता है? संपादित करें: nvm, अदब पुल बनाते समय आप जो भी निर्देशिका में थे ...
एडम जॉन्स

@IgorGanapolsky adb पुल /data/app/com.example.someapp-2/base.apk
क्रिस - जूनियर

@zelanix adb पुल करने के बाद, जहाँ मैं .apk फ़ाइल को सी कर सकता हूँ। धन्यवाद
विजया वर्मा 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. इंस्टॉल किए गए एपीके की सूची की जांच करें (निम्नलिखित कमांड उस पथ को भी सूचीबद्ध करें जहां यह स्थापित है और पैकेज का नाम है)। adb शैल pm सूची संकुल -f
  2. उपयोग adb पुल / package_path / पैकेज नाम / path_in_pc (पैकेज पथ और पैकेज नाम एक ऊपर आदेश से प्राप्त कर सकते हैं)

6

जब आपके पास एंड्रॉइड डेवलपमेंट के लिए ग्रहण स्थापित हो:

  • डिबगिंग डिवाइस के रूप में अपने डिवाइस का उपयोग करें। अपने फ़ोन पर: सेटिंग> एप्लिकेशन> विकास और USB डीबगिंग सक्षम करें, http://developer.android.com/tools/device.html देखें
  • ग्रहण में, DDMS- विंडो खोलें: विंडो> ओपन पर्सपेक्टिव> अन्य ...> DDMS, http://developer.android.com/tools/debugging/ddms.html देखें
  • यदि आप अपने डिवाइस के लिए USB- ड्राइवर स्थापित करने की कोशिश कर रहे हैं, तो आप अपने डिवाइस को देख नहीं सकते हैं
  • मध्य फलक में टैब "फाइल एक्सप्लोरर" चुनें और सिस्टम> ऐप पर जाएं
  • अब आप एक या अधिक फ़ाइलों का चयन कर सकते हैं और फिर शीर्ष पर "टैब से डिवाइस" आइकन पर क्लिक करें (टैब के दाईं ओर)
  • लक्ष्य फ़ोल्डर का चयन करें - टाडा!

केवल सिस्टम / ऐप (सिस्टम / ऐप में उर्फ ​​प्रीइंस्टॉल्ड ऐप्स) हैं।
arne.jans

6

Nougat (7.0) Android संस्करण adb shell pm list packagesडिवाइस पर स्थापित संकुल को सूचीबद्ध करने के लिए चलता है। फिर एपीके adb shell pm path your-package-nameका रास्ता दिखाने के लिए रन करें। पैकेज को डाउनलोड करने के लिए कॉपी करने के लिए एडीबी का उपयोग करने के बाद adb shell cp /data/app/com.test-1/base.apk /storage/emulated/0/Download। फिर डाउनलोड को अपनी मशीन में डाउनलोड से लेकर चलाएं 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

मुझे गैर-रूट डिवाइस में एपीके के पैकेज का नाम प्राप्त करने का एक तरीका मिला। यह इतना सुंदर नहीं है, लेकिन हर समय काम करता है।

चरण 1 : अपने डिवाइस पर, लक्ष्य APK खोलें

चरण 2 : पीसी cmd विंडो पर, यह कमांड टाइप करें:

 adb shell dumpsys activity a > dump.txt

क्योंकि इस कमांड का आउटपुट कई है, एक फ़ाइल पर रीडायरेक्ट करने की सिफारिश की जाती है।

चरण 3 : इस डंप को खोलें। किसी भी संपादक के साथ फ़ाइल को खोलें।

डिवाइस के लिए befor 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 

पैकेज का नाम तीसरी पंक्ति में है, com.tencent.mm इस उदाहरण के लिए ।

एंड्रॉइड 4.4 और बाद के लिए:
डंपस आउटपुट थोड़ा बदल गया है। "स्टैक # 1" खोज का प्रयास करें, पैकेज का नाम इसके बहुत करीब होगा।

इसके अलावा, "बेसडिअर" खोजें, आपको एपीके फ़ाइल का पूरा रास्ता मिल जाएगा!


-1

ईएस एक्सप्लोरर खोलें -> ऊपरी ऊपरी कोने (तीन क्षैतिज पट्टियों) पर मेनू बटन पुश करें -> लाइब्रेरी अनुभाग में एपीपी चुनें।

इस प्रकार, आपको सभी उपयोगकर्ता ऐप्स की सूची मिल जाती है। अपना ऐप ढूंढें और उस पर लंबे समय तक धकेलने के साथ उसका चयन करें। फिर दाएं निचले कोने में "अधिक" दबाएं और "भेजें" चुनें। तब आप विभिन्न विकल्पों का उपयोग कर सकते हैं, जैसे कि आप अपने होम डायरेक्टरी या अन्य कहीं भी .apk फाइल को सेव करने के लिए "ES Save To" चुन सकते हैं।


-2

या आप Google Play से 'ब्लूटूथ फाइल ट्रांसफर' प्राप्त कर सकते हैं और होम फोल्डर को सेट कर सकते हैं /system/। तब आप भी जा सकते हैं /

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.