هل يحتفظ Android بملفات .apk؟ إذا كان الأمر كذلك حيث؟

StackOverflow https://stackoverflow.com/questions/2507960

سؤال

بعد أن يقوم Android بتثبيت تطبيق من Marketplace ، هل يحتفظ ملف .APK؟

هل يوجد موقع قياسي حيث يحتفظ Android بمثل هذه الملفات؟

هل كانت مفيدة؟

المحلول

التطبيقات التي تم تثبيتها مسبقًا /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]);

        }
    }

إنه يسرد ملفات APKs في My HTC Magic المتجذر وفي الاتحاد الاقتصادي والنقدي.

نصائح أخرى

يمكنك استخدام Package Manager (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 لتنزيل APK.

adb pull data/app/com.king.candycrushsaga-1/base.apk

إذا كنت ترغب فقط في الحصول على ملف APK لشيء قمت بتثبيته مسبقًا ، فقم بذلك:

  1. احصل على Airdroid من Google Play
  2. الوصول إلى هاتفك باستخدام Airdroid من متصفح الويب الخاص بك
  3. انتقل إلى التطبيقات وحدد التطبيق المثبت
  4. انقر فوق الزر "تنزيل" لتنزيل إصدار APK من هذا التطبيق من هاتفك

لا تحتاج إلى جذر هاتفك ، والاستخدام adb, أو اكتب أي شيء.

لا يوجد موقع قياسي ، ومع ذلك يمكنك استخدام Packagemanager لمعرفة الحزم وفئة ApplicationInfo التي يمكنك الحصول عليها من هناك لديها معلومات مختلفة حول حزمة معينة: المسار إلى .APK ، المسار إلى دليل البيانات الخاص به ، والمسار إلى مورد فقط .APK (للتطبيقات المقفلة للأمام) ، وما إلى ذلك. لاحظ أنه قد يكون لديك أو لا يكون لديك إذن لقراءة هذه الدلائل اعتمادًا على علاقتك بالتطبيق الآخر ؛ ومع ذلك ، فإن جميع التطبيقات قادرة على قراءة المورد .APK (وهو أيضًا.

إذا كنت تتدفق فقط في القشرة ، فستقع تطبيقات غير مقصورة حاليًا في/data/app/.apk. يمكن لمستخدم Shell قراءة .APK محددة ، على الرغم من أنه لا يمكنه سرد الدليل. في الإصدار المستقبلي ، سيتم تغيير اتفاقية التسمية قليلاً ، لذلك لا تعتمد عليها على أنها متماثلة ، ولكن إذا حصلت على مسار .APK من مدير الحزمة ، فيمكنك استخدامه في القشرة.

عادةً ما تكون التطبيقات التي تم تثبيتها مسبقًا في /نظام /تطبيق وتطبيقات مثبتة المستخدم في /بيانات /تطبيق.

يمكنك استخدام "ADB Pull" ، ولكن تحتاج إلى معرفة المسار الكامل لملف APK. في المحاكي ، يمكنك الحصول على قائمة دليل باستخدام "adb shell" + "ls". ولكن على جهاز Android ، لن تتمكن من القيام بذلك في مجلد "/Data" لأسباب أمنية. إذن كيف يمكنك معرفة المسار الكامل لملف 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).

إذا كنت تبحث عن مسار تطبيق معين ، فإن الحل السريع والقذر هو مجرد grep the bugreport:

$ adb bugreport | grep 'dir=/data/app' 

لا أعرف أن هذا سيوفر قائمة شاملة ، لذلك قد يساعد في تشغيل التطبيق أولاً.

يمكنك سحب التطبيقات باستخدام ADB. هم في/بيانات/تطبيق/، على ما أعتقد.

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

لاحظ أنه يتعين عليك جذر هاتفك لسحب التطبيقات المحمية.

التثبيت من Marketplace

إنه سلوك Marketplace سواء كان ليحتفظ بـ APK بعد التثبيت. Google Play لا يحتفظ APK بعد التثبيت. قد تحتوي أسواق الطرف الثالث الأخرى على سلوكيات مختلفة.

تثبيت من أداة التطوير/التصحيح (ADB ، Eclipse ، Android Studio)

عندما نقوم بتثبيت APK من أداة التصحيح ، استدعاء مباشرة adb install أو من Eclipse/Android Studio ، سيتم نقل APK (adb push) إلى دليل القراءة والكتابة ، عادة /data/local/tmp/. بعد ذلك ، ستستخدم الأداة pm أمر للتثبيت ، وسوف يحذف APK المؤقت في /data/local/tmp/ بعد التثبيت الناجح.

يمكننا الحصول على هذه المعلومات من ناتج التصحيح مثل التالي.

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

كيف يحافظ النظام على APK

بالطبع يجب على النظام تخزين جميع ملفات APK في مكان ما. هناك ثلاثة أماكن للنظام للحفاظ على APKs أساسيًا على أنواع مختلفة من ملفات APK.

  1. لتطبيق الأسهم

عادة ما يتم شحنها في الجهاز عن طريق التصنيع ، بما في ذلك التطبيق الأساسي لتشغيل النظام وخدمة Google ، يمكنك العثور عليها ضمن الدليل /system/app و /system/priv-app.

  1. تطبيق تثبيت المستخدم

معظم APKs تندرج في هذه الفئة. عادة ما يتم تثبيت APK هذه من Marketplace من قبل المستخدمين أو عن طريق adb install بدون -s اختيار. يمكنك العثور عليها تحت الدليل /data/app لجهاز متجذر.

  1. تطبيق على SDCARD

إذا كان APK يمكّن موقع التثبيت في SDCARD مع android:installLocation="auto" في بيانه ، يمكن نقل التطبيق إلى SDCARD من قائمة إدارة التطبيقات في النظام. عادة ما توجد هذه APKs في مجلد آمن من SDCARD /mnt/sdcard/asec.

طريقة Anther لإجبار موقع التثبيت على SDCARD هي استخدام الأمر adb install -s apk-to-install.apk.

كملاحظة ، فإن ملفات التطبيق المثبت مسبقًا ليست في واحدة .apk ملف بعد الآن. يوجد مجلد يحتوي على ملفات لكل تطبيق تم تثبيته مسبقًا في الدليل /system/app أو /system/priv-app لأحدث إصدار Android.

في /بيانات /تطبيق ولكن لحماية النسخ ، لا أعتقد أنه يمكنك الوصول إليها.

إذا كنت متجذرًا ، فقم بتنزيل مستكشف الجذر للتطبيق. أفضل مدير ملف للمستخدمين الجذور. على أي حال ، يحتوي System/App على جميع أجهزة APK الافتراضية التي جاءت مع الهاتف ، ويحتوي Data/APK على جميع أجهزة تطبيقات التطبيقات التي قمت بتثبيتها. ما عليك سوى اضغط على APK الذي تريده (أثناء وجوده في Explorer) ، يمكنك الوصول إلى مجلد /sdcard الخاص بك واللصق فقط.

استخدم هذا لسرد جميع .apks ضمن/بيانات/تطبيق/

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
  • البيانات/التطبيق
  • النظام/التطبيق
  • النظام/تطبيق الخصوصية
  • MNT/ASEC (عند تثبيته في SDCARD)

يمكنك سحب.

ADB سحب /MNT /ASEC

يمكن أن تكون ملفات .apk موجودة تحت/بيانات/تطبيق/دليل. استخدام ES File Explorer يمكننا الوصول إلى ملفات .apk.

إذا كنت تستخدم Eclipse goto ddms ثم ملف مستكشف هناك ، فسترى مجلد النظام/التطبيق

عندما قمت بتثبيت تطبيقي على المحاكي ، أظهر ملف .apk في

البيانات/التطبيق ثم استخدمت بيانات LS/APP // لمعرفة ما إذا كانت موجودة أم لا

بعد تثبيت التطبيق الخاص بك ، فقط استخدم أمر LS VIE Shell وتحقق من الدليل المطلوب ولكنه يعتمد على نوع التطبيق الذي تحاول تثبيته. لقد استخدمت هذه الطريقة ل ثَبَّتَ نقطة إذا كان أي شيء خطأ.

طريقة أخرى للحصول على apkلا يمكنك العثور عليها ، على جهاز متجذر مع صندوق أدوات ROM.

قم بعمل نسخة احتياطية باستخدام App Manager ثم انتقل إلى storage/emulated/appmanager والتحقق من نسخة احتياطية لتطبيق النظام أو نسخة احتياطية تطبيق المستخدم.

للعثور على apk, وتنزيل وتثبيت مرسل تطبيق Bluetooth من متجر Play. بمجرد الانتهاء من التثبيت ، افتح مرسل تطبيق Bluetooth. سوف تظهر جميع التطبيقات (.apk) مثبتة في جهازك ، ثم يمكنك بسهولة نقل التطبيق إلى جهاز الكمبيوتر الخاص بك من خلال Bluetooth.

على عكس ما هو مكتوب على الإجابة المختارة ، لا تحتاج إلى الجذر ومن الممكن الحصول على ملفات APK من التطبيقات المثبتة ، وهو ما قمت به على تطبيقي (هنا). مثال:

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

ثم ، لكل عنصر من عناصر القائمة ، يمكنك الوصول packageInfo.applicationInfo.sourcedir, ، وهو المسار الكامل لـ APK للتطبيق المثبت.

حسنًا ، جئت إلى هذا المنشور لأنني أردت إعادة تثبيت بعض التطبيقات التي أحببتها كثيرًا. إذا كانت هذه هي حالتك ، فما عليك سوى الانتقال إلى Google Play ، وابحث عن تطبيقاتي ، علامة التبويب "كل شيء" ، وستجد طريقة لإعادة تثبيت بعض التطبيقات التي أحببتها. واجهت مشكلة لم أتمكن من العثور عليها عن طريق البحث عن تطبيق واحد ، لكنها كانت موجودة في تطبيقاتي حتى أتمكن من إعادة التثبيت في هاتفي الجديد ؛)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top