क्या एंड्रॉइड .apk फ़ाइलों को रखता है? अगर हां तो कहां


185

Android Marketplace से एप्लिकेशन इंस्टॉल करने के बाद, क्या यह .apk फाइल रखता है?

क्या कोई मानक स्थान है जहां Android ऐसी फ़ाइलों को रखेगा?

जवाबों:


123

पूर्वस्थापित अनुप्रयोग /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]);

        }
    }

यह मेरी जड़ें htc जादू में और इमू में एप्स को सूचीबद्ध करता है।


यह मोटोरोला Droid पर एक आकर्षण की तरह काम करता था और नेक्सस वन पर भी दोनों गैर-निहित था।
ग्युबट्रॉन

ठीक है, आपने कभी नहीं कहा कि आप उनके लिए क्या चाहते हैं :)
मैकरसे

मैं उन्हें पढ़ने और उनके साथ चीजें करने में सक्षम होना चाहता हूं। सौभाग्य से वे पठनीय हैं।
गुबट्रॉन

3
अच्छी बात यह है कि न केवल फाइलें "लिस्टेबल" हैं, वे पठनीय भी हैं, इसलिए वे मेरे उद्देश्य को पूरा करेंगे।
गुबात्रॉन

मैंने कहीं और पढ़ा है कि एपीके इन / डेटा / ऐप केवल प्ले स्टोर से डाउनलोड किए गए ऐप के अनुरूप हैं। क्या यह सही है या इसमें उपयोगकर्ता द्वारा स्थापित कुछ भी शामिल है?
क्रिश्चियन

132

आप पैकेज प्रबंधक (का उपयोग कर सकते pmसे अधिक) adb shellसूची संकुल रहे हैं:

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एपीके डाउनलोड करने के लिए।

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
मणिकांत

95

यदि आप केवल आपके द्वारा पहले स्थापित की गई किसी चीज़ की एपीके फ़ाइल प्राप्त करना चाहते हैं, तो यह करें:

  1. Google Play से AirDroid प्राप्त करें
  2. अपने PC वेब ब्राउज़र से AirDroid का उपयोग करके अपने फ़ोन पर पहुँचें
  3. ऐप्स पर जाएं और इंस्टॉल किए गए ऐप को चुनें
  4. अपने फोन से इस ऐप के एपीके संस्करण को डाउनलोड करने के लिए "डाउनलोड" बटन पर क्लिक करें

आपको अपना फ़ोन रूट करने, उपयोग करने adbया कुछ भी लिखने की आवश्यकता नहीं है।


2
डाउनवोट किया गया क्योंकि यह वास्तव में सवाल का जवाब नहीं देता है। क्या होगा यदि ओपी एडीबी का उपयोग करना चाहता था, ताकि इसका उपयोग उन उपकरणों पर किया जा सके जहां डिबगिंग अधिकृत है, लेकिन पासवर्ड भूल गए या स्क्रीन टूट गई।
हैक 5

बिना डिवाइस के एपीके फाइल पाने का आसान तरीका।
फहमी हम्मादी

Thanx। उपार्जित कारण इसे एक तरह से कहकर सवाल खड़ा करता है: "यह उन्हें / डेटा में रखता है, लेकिन केवल अगर आप X प्रक्रिया करते हैं"
ntg

26

कोई मानक स्थान नहीं है, हालाँकि आप पैकेज के बारे में जानने के लिए PackageManager का उपयोग कर सकते हैं और ApplicationInfo वर्ग से आप किसी विशेष पैकेज के बारे में विभिन्न जानकारी प्राप्त कर सकते हैं: इसका .apk, इसके डेटा निर्देशिका का पथ, पथ। एक रिसोर्स-ओनली .apk (फॉरवर्ड लॉक्ड एप्स), आदि के लिए ध्यान दें कि आपके पास दूसरे ऐप के साथ आपके रिश्ते के आधार पर इन निर्देशिकाओं को पढ़ने की अनुमति हो सकती है या नहीं; हालाँकि, सभी ऐप्स संसाधन .apk (जो कि गैर-अग्रेषित-लॉक ऐप के लिए वास्तविक .apk भी है) पढ़ने में सक्षम हैं।

यदि आप केवल शेल में इधर-उधर घूम रहे हैं, तो वर्तमान में गैर-अग्रेषित-लॉक ऐप्स /data/app/.apk में स्थित हैं। शेल उपयोगकर्ता एक विशिष्ट .apk पढ़ सकता है, हालांकि यह निर्देशिका को सूचीबद्ध नहीं कर सकता है। भविष्य के रिलीज में नामकरण सम्मेलन को थोड़ा बदल दिया जाएगा, इसलिए इसे शेष के रूप में मत गिनें, लेकिन यदि आपको पैकेज प्रबंधक से .apk का रास्ता मिलता है, तो आप इसे शेल में उपयोग कर सकते हैं।


2
"फॉरवर्ड लॉक ऐप" क्या है?
टोनी चैन

1
यह एक पुराना कॉपी प्रोटेक्शन मैकेनिज्म है, जो .apk को उन परमिशन के साथ इंस्टॉल करता है जो केवल उस एप्लिकेशन को इसे पढ़ने की अनुमति देते हैं।
हैकबॉड

18

प्रीइंस्टॉल्ड ऐप्स आम तौर पर / सिस्टम / ऐप में होते हैं और उपयोगकर्ता इंस्टॉल किए गए ऐप्स / डेटा / ऐप में होते हैं।

आप "अदब पुल" का उपयोग कर सकते हैं, लेकिन आपको एपीके फ़ाइल का पूरा रास्ता जानना होगा। एमुलेटर पर, आप "एडीबी शेल" + "एलएस" का उपयोग करके एक निर्देशिका लिस्टिंग प्राप्त कर सकते हैं। लेकिन एंड्रॉइड डिवाइस पर, आप सुरक्षा कारणों से "/ डेटा" फ़ोल्डर में ऐसा नहीं कर पाएंगे। तो आप एपीके फ़ाइल के पूर्ण पथ का पता कैसे लगाते हैं?

आप एक प्रोग्राम लिखकर स्थापित सभी ऐप्स की पूरी सूची प्राप्त कर सकते हैं जो 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

बाज़ार से स्थापित करें

यह मार्केटप्लेस का व्यवहार है कि इंस्टॉलेशन के बाद एपीके को रखना है या नहीं। Google Play स्थापना के बाद एपीके को नहीं रखता है। अन्य तृतीय-पक्ष बाज़ार में भिन्न व्यवहार हो सकते हैं।

विकास / डिबग टूल से स्थापित करें (अदब, ग्रहण, एंड्रॉइड स्टूडियो)

जब हम डिबग टूल से एपीके इंस्टॉल करते हैं, तो सीधे adb installग्रहण या एंड्रॉइड स्टूडियो से adb push, आमतौर पर एपीके को एक सार्वजनिक पढ़ने और लिखने योग्य निर्देशिका में स्थानांतरित किया जाएगा /data/local/tmp/। उसके बाद, टूल pmकमांड को इंस्टॉल करने के लिए उपयोग करेगा , यह /data/local/tmp/सफल इंस्टॉलेशन के बाद अस्थायी एपीके को हटा देगा ।

हम इन सूचनाओं को निम्नलिखित जैसे डिबग आउटपुट से प्राप्त कर सकते हैं।

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

एपीके कैसे सिस्टम रखता है

बेशक सिस्टम को सभी एप्स को कहीं स्टोर करना होगा। विभिन्न प्रकार के एप के आधार पर सिस्टम को रखने के लिए तीन स्थान हैं:

  1. स्टॉक ऐप के लिए

    जिन्हें आमतौर पर निर्माण के द्वारा डिवाइस में भेज दिया जाता है, जिसमें सिस्टम रनिंग और Google सेवा के लिए मुख्य ऐप शामिल हैं, आप उन्हें निर्देशिका के तहत /system/appऔर पा सकते हैं /system/priv-app

  2. उपयोगकर्ता स्थापित अनुप्रयोग

    अधिकांश एप्स इसी श्रेणी में आते हैं। ये एप आमतौर पर उपयोगकर्ताओं द्वारा या विकल्प के adb installबिना बाज़ार से स्थापित किए जाते हैं -s। आप उन्हें /data/appरूट किए गए डिवाइस के लिए निर्देशिका के अंतर्गत पा सकते हैं ।

  3. sdcard पर एप्लिकेशन

    यदि एपीके android:installLocation="auto"अपने प्रकट होने के साथ sdcard में अपनी स्थापित जगह को सक्षम करता है , तो ऐप को सिस्टम के ऐप मैनेजर मेनू से sdcard में स्थानांतरित किया जा सकता है। ये एप आमतौर पर sdcard के सुरक्षित फोल्डर में स्थित होते हैं /mnt/sdcard/asec

    Sdcard के लिए स्थापित स्थान को मजबूर करने का एक अन्य तरीका कमांड का उपयोग कर रहा है adb install -s apk-to-install.apk

नोट के रूप में, पहले से इंस्टॉल किए गए ऐप की .apkफाइलें अब एक भी फाइल में नहीं हैं। निर्देशिका में प्रत्येक पूर्व-स्थापित एप्लिकेशन के लिए /system/appया /system/priv-appनवीनतम एंड्रॉइड रिलीज़ के लिए फ़ाइलों से युक्त एक फ़ोल्डर है ।


8

आप ADB के साथ ऐप्स खींच सकते हैं। वे / डेटा / ऐप / में हैं, मुझे विश्वास है।

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

ध्यान दें कि आपको कॉपी संरक्षित ऐप्स खींचने के लिए अपने फोन को रूट करना होगा।


5

In / data / app लेकिन कॉपी सुरक्षा के लिए मुझे नहीं लगता कि आप इसे एक्सेस कर सकते हैं।


2
तो वास्तव में कैसे एक ऐप है जो ब्लूटूथ काम के माध्यम से एपीके साझा करने की अनुमति देता है? वह यह कैसे करते हैं?
छोटा बच्चा

5

यदि आप निहित हैं, तो रूट एक्सप्लोरर एप्लिकेशन डाउनलोड करें। रूट किए गए उपयोगकर्ताओं के लिए सर्वश्रेष्ठ फ़ाइल प्रबंधक। वैसे भी, सिस्टम / ऐप में फोन के साथ आने वाले सभी डिफ़ॉल्ट एप्स होते हैं, और डेटा / एपीके में आपके द्वारा इंस्टॉल किए गए एप्लिकेशन के सभी एप्स होते हैं। आपके इच्छित एपीके (रूट एक्सप्लोरर में) पर लंबे समय तक दबाएं, अपने / एसडीकार्ड फ़ोल्डर में जाएं और बस पेस्ट करें।


4

सभी .apks के तहत / डेटा / ऐप / सूचीबद्ध करने के लिए इसका उपयोग करें

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

4
  • डेटा / ऐप्स
  • system / app
  • प्रणाली / priv-ऐप
  • mnt / asec (sdcard में स्थापित होने पर)

आप उनमें से किसी से .apks खींच सकते हैं:

अदब पुल / mnt / asec


3

.apk फाइलें / डेटा / ऐप / निर्देशिका के तहत स्थित हो सकती हैं। ES फाइल एक्सप्लोरर का उपयोग करके हम इन .APK फाइलों तक पहुंच सकते हैं।


2

यदि आप ग्रहण गोटो डीडीएमएस का उपयोग कर रहे हैं और फिर वहां एक्सप्लोरर को फाइल करेंगे तो आपको सिस्टम / एप्स फोल्डर और एप्स दिखाई देंगे


0

जब मैंने एमुलेटर पर अपना ऐप इंस्टॉल किया, तो इसमें मेरी .apk फ़ाइल दिखाई दी

data / app तब मैंने ls डेटा / ऐप // का उपयोग किया, यह देखने के लिए कि यह मौजूद है या नहीं

अपने ऐप को इंस्टॉल करने के बाद बस ls कमांड vie शेल का उपयोग करें और वांछित निर्देशिका की जांच करें लेकिन यह निर्भर करता है कि आप किस तरह का एप्लिकेशन इंस्टॉल करना चाह रहे हैं। अगर मैंने कोई भी बात गलत लगाई है तो मैंने इनस्टॉल पॉइंट का इस्तेमाल किया है।


मैं एप्स का पता लगाने की भी कोशिश कर रहा हूं, लेकिन मुझे जो मिला है, वह यह है कि आप सभी एप्स का पता नहीं लगा सकते हैं। मैं सभी स्थापना रद्द करने के लिए सक्षम नहीं था। तो यह बेहतर है कि आप अपने फोन को रूट करें और टाइटेनियम बैकअप का उपयोग करके सभी एप प्राप्त करें और अपने फोन पर अधिक नियंत्रण प्राप्त करें।
जावद अमजद

0

एक और तरीका जिसे apkआप नहीं पा सकते हैं, रूट किए गए डिवाइस पर रोम टूल बॉक्स के साथ है

ऐप मैनेजर का उपयोग करके बैकअप बनाएं storage/emulated/appmanagerऔर फिर सिस्टम ऐप बैकअप या उपयोगकर्ता ऐप बैकअप पर जाएं


0

एक को खोजने के लिए apk, Play store से Bluetooth App Sender को डाउनलोड और इंस्टॉल करें। एक बार इंस्टॉलेशन पूरा होने पर ब्लूटूथ ऐप सेंडर को खोलें। यह (.apk)आपके डिवाइस में इंस्टॉल किए गए सभी ऐप को दिखाएगा , फिर आप आसानी से ब्लूटूथ के माध्यम से ऐप को अपने पीसी पर ट्रांसफर कर सकते हैं।


0

जैसा कि चुने हुए उत्तर पर लिखा गया है, आपको रूट की आवश्यकता नहीं है और इंस्टॉल किए गए ऐप्स के एपीके प्राप्त करना संभव है, जो मैंने अपने ऐप ( यहां ) पर किया है। उदाहरण:

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

फिर, सूची के प्रत्येक आइटम के लिए, आप packageInfo.applicationInfo.sourceDir का उपयोग कर सकते हैं , जो कि इंस्टॉल किए गए ऐप के एपीके का पूर्ण पथ है।


-1

वैसे मैं इस पोस्ट पर आया क्योंकि मैं कुछ ऐप को पुनः स्थापित करना चाहता था जो मुझे बहुत पसंद थे। यदि यह आपका मामला है, तो बस Google Play पर जाएं, और My Apps, टैब All की तलाश करें, और आपको अपनी पसंद के कुछ ऐप को फिर से इंस्टॉल करने का एक तरीका मिल जाएगा। मुझे एक समस्या का सामना करना पड़ा, जिसे मैं एक ऐप खोजकर नहीं पा सकता था, लेकिन यह मेरे ऐप में था, इसलिए मैं अपने नए मोबाइल में पुनः इंस्टॉल कर सकता था;)

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