2012-06-13 19 views
136

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

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

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

+2

मुझे लगता है कि यह प्रश्न पहले से ही उत्तर दिया गया है। कृपया http://stackoverflow.com/a/12197924/1016544 –

+1

http://stackoverflow.com/questions/7632156/can-i-get-apk-file-in-phone-of-the-installed पर एक नज़र डालें -प्लिकेशंस – gliptak

+1

संभावित डुप्लिकेट [मैं एंड्रॉइड डिवाइस से एपीके फ़ाइल कैसे प्राप्त करूं?] (http://stackoverflow.com/questions/4032960/how-do-i-get-an-apk-file-from-an -android-device) –

उत्तर

293

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

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

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

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

क्रेडिट @tarn को खींच सकते हैं/डेटा/एप्लिकेशन/अपने पैकेज के नाम -1 /base.apk

+29

कमांड लाइन से ऐसा करने के लिए, 'adb shell pm list packages' का उपयोग करने के लिए सूची का उपयोग करें स्थापित संकुल, वांछित पैकेज चुनें, इसे '-1.एपीके' संलग्न करें, और इसे '/ data/app' से खींचें। उदाहरण: यदि पैकेज का नाम 'org.mozilla.firefox' है, तो 'adb pull/data/app/org.mozilla.firefox-1.apk' का उपयोग करें। – sschuberth

+9

एपीके का वास्तविक फ़ाइल नाम प्राप्त करने के लिए, अपने-पैकेज-नाम को एडीबी शैल अपराह्न पथ का उपयोग करें। अधिक विस्तृत उत्तर के लिए यह प्रश्न देखें http://stackoverflow.com/questions/4032960/how-do-i-get-an-apk-file-from-an-android-device – Yojimbo

+0

मैंने इसे डिवाइस पर उपयोग किया। http://stackoverflow.com/a/5097838/1224741 – QED

5

के लिए एंड्रॉयड developement स्थापित जब आप ग्रहण किया है:

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

सिस्टम/ऐप में केवल सिस्टम-ऐप्स (उर्फ प्रीइंस्टॉल किए गए ऐप्स) हैं। –

0

या आप गूगल से 'ब्लूटूथ फ़ाइल स्थानांतरण' प्ले और /system/ के लिए घर फ़ोल्डर सेट प्राप्त कर सकते हैं। फिर आप / पर भी जा सकते हैं।

14

आपको इंस्टॉल किए गए ऐप्स की सूची प्राप्त करने के लिए रूट अनुमतियों की आवश्यकता नहीं है।

आप एंड्रॉइड पैकेजमैनेजर के साथ ऐसा कर सकते हैं।

नीचे एक छोटा कोड स्निपेट है।

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); 
} 
41

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

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

    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 
    
+3

गैर-रूट डिवाइस पर इस समाधान की पुष्टि कर सकते हैं, हालांकि पहले कमांड से पहले पैकेज नाम के ज्ञान की आवश्यकता होती है! फ़ोन पर सभी संकुलों की एक सूची प्राप्त करने के लिए 'adb shell pm list packages' का उपयोग करें, आप अपने वांछित ऐप के पैकेज नाम के बारे में सुनिश्चित नहीं हैं – AndroidNoob

+1

@Yojimbo: सही उत्तर thx –

+0

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

15

गूगल "APK extracter" नाम की दुकान खेलने पर कोई ऐप्लिकेशन नहीं है। इस ऐप से आप इंस्टॉल ऐप की। एपीके फ़ाइल प्राप्त कर सकते हैं। जाओ और आनंद लें!

+2

या किसी अन्य एपीके एक्स्ट्रैक्टर का उपयोग करने का प्रयास करें एप्लिकेशन। यह स्वीकार्य उत्तर होना चाहिए क्योंकि यह परेशानी रहित है। –

+2

एफ-डोडिड पर भी निःशुल्क ऐप्स हैं; एपीकेशेयर (जीपीएलवी 3 +) और एपीके एक्सट्रैक्टर (एमआईटी)। – ZN13

6
  1. स्थापित एपीके की सूची की जांच करें (निम्न आदेश उस पथ को भी सूचीबद्ध करता है जहां यह स्थापित है और पैकेज का नाम है)। adb शेल बजे सूची संकुल -f
  2. उपयोग adb pull/package_path/पैकेज नाम/path_in_pc (पैकेज पथ और पैकेज का एक आदेश 1. ऊपर से प्राप्त कर सकते हैं)
+0

हालांकि, इस कमांड को काम करने के लिए आपको 'su' जोड़ना चाहिए। – Suncatcher

0

सूची 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 
-1

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

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

चरण 2: पीसी cmd खिड़की पर, टाइप करें इस आदेश:

adb shell dumpsys activity a > dump.txt 

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

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

Android 4.4 befor डिवाइस के लिए: इस उदाहरण के लिए

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:
फ़ाइल की शुरुआत इस तरह देखा जाएगा। एंड्रॉइड 4 के लिए

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

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

0

मेरे पास एक समाधान है, हाल ही में मैंने कोशिश की। लेकिन मैंने पाया कि जब आप ज़ाप्या के साथ ऐप्स साझा करते हैं, तो यह आपके डिवाइस में zapya निर्देशिका के ऐप्स फ़ोल्डर में उसी फ़ाइल के .apk एक्सटेंशन संग्रहीत करता है, जहां आप अपने डिवाइस में इंस्टॉल की गई एपीके फ़ाइल

4

नौगेट पर (7.0) एंड्रॉइड संस्करण डिवाइस पर स्थापित संकुल सूचीबद्ध करने के लिए 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 का उपयोग करने के बाद। फिर एपीके को adb pull /storage/emulated/0/Download/base.apk चलाकर डाउनलोड से अपनी मशीन पर खींचें।

1

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

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