जवाबों:
पूर्वस्थापित अनुप्रयोग /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 जादू में और इमू में एप्स को सूचीबद्ध करता है।
आप पैकेज प्रबंधक (का उपयोग कर सकते 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
adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
यदि आप केवल आपके द्वारा पहले स्थापित की गई किसी चीज़ की एपीके फ़ाइल प्राप्त करना चाहते हैं, तो यह करें:
आपको अपना फ़ोन रूट करने, उपयोग करने adb
या कुछ भी लिखने की आवश्यकता नहीं है।
कोई मानक स्थान नहीं है, हालाँकि आप पैकेज के बारे में जानने के लिए PackageManager का उपयोग कर सकते हैं और ApplicationInfo वर्ग से आप किसी विशेष पैकेज के बारे में विभिन्न जानकारी प्राप्त कर सकते हैं: इसका .apk, इसके डेटा निर्देशिका का पथ, पथ। एक रिसोर्स-ओनली .apk (फॉरवर्ड लॉक्ड एप्स), आदि के लिए ध्यान दें कि आपके पास दूसरे ऐप के साथ आपके रिश्ते के आधार पर इन निर्देशिकाओं को पढ़ने की अनुमति हो सकती है या नहीं; हालाँकि, सभी ऐप्स संसाधन .apk (जो कि गैर-अग्रेषित-लॉक ऐप के लिए वास्तविक .apk भी है) पढ़ने में सक्षम हैं।
यदि आप केवल शेल में इधर-उधर घूम रहे हैं, तो वर्तमान में गैर-अग्रेषित-लॉक ऐप्स /data/app/.apk में स्थित हैं। शेल उपयोगकर्ता एक विशिष्ट .apk पढ़ सकता है, हालांकि यह निर्देशिका को सूचीबद्ध नहीं कर सकता है। भविष्य के रिलीज में नामकरण सम्मेलन को थोड़ा बदल दिया जाएगा, इसलिए इसे शेष के रूप में मत गिनें, लेकिन यदि आपको पैकेज प्रबंधक से .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'
मुझे नहीं पता कि यह एक संपूर्ण सूची प्रदान करेगा, इसलिए यह पहले ऐप को चलाने में मदद कर सकता है।
बाज़ार से स्थापित करें
यह मार्केटप्लेस का व्यवहार है कि इंस्टॉलेशन के बाद एपीके को रखना है या नहीं। 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
एपीके कैसे सिस्टम रखता है
बेशक सिस्टम को सभी एप्स को कहीं स्टोर करना होगा। विभिन्न प्रकार के एप के आधार पर सिस्टम को रखने के लिए तीन स्थान हैं:
स्टॉक ऐप के लिए
जिन्हें आमतौर पर निर्माण के द्वारा डिवाइस में भेज दिया जाता है, जिसमें सिस्टम रनिंग और Google सेवा के लिए मुख्य ऐप शामिल हैं, आप उन्हें निर्देशिका के तहत /system/app
और पा सकते हैं /system/priv-app
।
उपयोगकर्ता स्थापित अनुप्रयोग
अधिकांश एप्स इसी श्रेणी में आते हैं। ये एप आमतौर पर उपयोगकर्ताओं द्वारा या विकल्प के adb install
बिना बाज़ार से स्थापित किए जाते हैं -s
। आप उन्हें /data/app
रूट किए गए डिवाइस के लिए निर्देशिका के अंतर्गत पा सकते हैं ।
sdcard पर एप्लिकेशन
यदि एपीके android:installLocation="auto"
अपने प्रकट होने के साथ sdcard में अपनी स्थापित जगह को सक्षम करता है , तो ऐप को सिस्टम के ऐप मैनेजर मेनू से sdcard में स्थानांतरित किया जा सकता है। ये एप आमतौर पर sdcard के सुरक्षित फोल्डर में स्थित होते हैं /mnt/sdcard/asec
।
Sdcard के लिए स्थापित स्थान को मजबूर करने का एक अन्य तरीका कमांड का उपयोग कर रहा है adb install -s apk-to-install.apk
।
नोट के रूप में, पहले से इंस्टॉल किए गए ऐप की .apk
फाइलें अब एक भी फाइल में नहीं हैं। निर्देशिका में प्रत्येक पूर्व-स्थापित एप्लिकेशन के लिए /system/app
या /system/priv-app
नवीनतम एंड्रॉइड रिलीज़ के लिए फ़ाइलों से युक्त एक फ़ोल्डर है ।
आप ADB के साथ ऐप्स खींच सकते हैं। वे / डेटा / ऐप / में हैं, मुझे विश्वास है।
adb pull (location on device) (where to save)
ध्यान दें कि आपको कॉपी संरक्षित ऐप्स खींचने के लिए अपने फोन को रूट करना होगा।
In / data / app लेकिन कॉपी सुरक्षा के लिए मुझे नहीं लगता कि आप इसे एक्सेस कर सकते हैं।
यदि आप निहित हैं, तो रूट एक्सप्लोरर एप्लिकेशन डाउनलोड करें। रूट किए गए उपयोगकर्ताओं के लिए सर्वश्रेष्ठ फ़ाइल प्रबंधक। वैसे भी, सिस्टम / ऐप में फोन के साथ आने वाले सभी डिफ़ॉल्ट एप्स होते हैं, और डेटा / एपीके में आपके द्वारा इंस्टॉल किए गए एप्लिकेशन के सभी एप्स होते हैं। आपके इच्छित एपीके (रूट एक्सप्लोरर में) पर लंबे समय तक दबाएं, अपने / एसडीकार्ड फ़ोल्डर में जाएं और बस पेस्ट करें।
जब मैंने एमुलेटर पर अपना ऐप इंस्टॉल किया, तो इसमें मेरी .apk फ़ाइल दिखाई दी
data / app तब मैंने ls डेटा / ऐप // का उपयोग किया, यह देखने के लिए कि यह मौजूद है या नहीं
अपने ऐप को इंस्टॉल करने के बाद बस ls कमांड vie शेल का उपयोग करें और वांछित निर्देशिका की जांच करें लेकिन यह निर्भर करता है कि आप किस तरह का एप्लिकेशन इंस्टॉल करना चाह रहे हैं। अगर मैंने कोई भी बात गलत लगाई है तो मैंने इनस्टॉल पॉइंट का इस्तेमाल किया है।
जैसा कि चुने हुए उत्तर पर लिखा गया है, आपको रूट की आवश्यकता नहीं है और इंस्टॉल किए गए ऐप्स के एपीके प्राप्त करना संभव है, जो मैंने अपने ऐप ( यहां ) पर किया है। उदाहरण:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
फिर, सूची के प्रत्येक आइटम के लिए, आप packageInfo.applicationInfo.sourceDir का उपयोग कर सकते हैं , जो कि इंस्टॉल किए गए ऐप के एपीके का पूर्ण पथ है।
वैसे मैं इस पोस्ट पर आया क्योंकि मैं कुछ ऐप को पुनः स्थापित करना चाहता था जो मुझे बहुत पसंद थे। यदि यह आपका मामला है, तो बस Google Play पर जाएं, और My Apps, टैब All की तलाश करें, और आपको अपनी पसंद के कुछ ऐप को फिर से इंस्टॉल करने का एक तरीका मिल जाएगा। मुझे एक समस्या का सामना करना पड़ा, जिसे मैं एक ऐप खोजकर नहीं पा सकता था, लेकिन यह मेरे ऐप में था, इसलिए मैं अपने नए मोबाइल में पुनः इंस्टॉल कर सकता था;)