android - your - move app to sd card without root




حل الخطأ INSTALL_FAILED_INSUFFICIENT_STORAGE على نظام التشغيل (20)

أشعر بالكثير من الغرابة في كتابة هذا ، لكنني لا أستطيع أن أكون متأكداً بنسبة 100٪ من أن هذا غير صحيح في بعض الحالات (إنه يعمل بالنسبة لي). إذا كنت تعاني من الأعراض التالية:

  • كنت تعمل باستخدام جهاز فعلي (في حالتي ، Samsung Galaxy Ace) ،
  • لقد قمت بتطوير لبضع أيام على التوالي ،
  • كان هاتفك متصلاً طوال الوقت ليلاً ونهارًا.
  • لقد بدأت في الحصول على هذا الخطأ بعد مرور يومين ، وظل الأمر يزداد سوءًا.
  • لم تنجح أي من الإجابات الأخرى.
  • كنت مستسلما كما كنت ...

ثم جرّب هذا:

  • افصل هاتفك عند عدم العمل!

لقد فصلت هاتفي واتركته للراحة ليوم كامل. بطارية بلدي ارتدت قليلا. بعد ذلك ، أعدت الاتصال به وبدأت عملية التصحيح مرة أخرى. كل شيء سار على ما يرام هذه المرة! وأعني حقا حقا ، تماما كما كان من قبل.

هل من الممكن أن يكون هذا الخطأ بسبب بعض الاشياء المتعلقة بالبطارية ؟ لا يزال الأمر يبدو غريباً في التفكير بهذه الطريقة ، لكنني الآن أواصل فصل هاتفي بين الحين والآخر (وفي الليل) ولم تعد المشكلة.

يمثل الخطأ INSTALL_FAILED_INSUFFICIENT_STORAGE جزءًا من حياة كل مطور في Android. يحدث ذلك بغض النظر عن حجم التطبيق ، أو مقدار التخزين المتاح. تعمل إعادة تشغيل الجهاز المستهدف على إصلاح المشكلة باختصار ، ولكنها ستعود قريبًا. هناك المئات (إن لم يكن الآلاف) من رسائل لوحة الرسائل من الأشخاص الذين يسألون عن سبب حدوث المشكلة ، ولكن الأشخاص في Google صامتون بشكل محبط حول المشكلة.

هناك حل بسيط. إذا كان جهاز الاختبار يعمل بالإصدار 2.2 من نظام التشغيل Android أو إصدار أحدث ، فأضف سمة android: installLocation إلى ملف البيان الخاص بالتطبيق ، مع القيمة " preferExternal ". سيؤدي هذا إلى فرض تثبيت التطبيق على وحدة التخزين الخارجية للجهاز ، مثل بطاقة SD للهاتف.

فمثلا:

  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.andrewsmith.android.darkness"
    android:installLocation="preferExternal"

هذا هو أكثر من الإسعافات الأولية من إصلاح ، وربما لا يكون مثاليا إذا كنت ترغب في تثبيت التطبيق النهائي على الذاكرة الداخلية للجهاز. ولكنها على الأقل ستجعل عملية التنمية أقل إحباطًا.


أنا أيضا واجهت نفس المشكلة ، وأنا فعلت "إعادة الضبط بيانات المصنع" ، وعملت بشكل جيد بعد ذلك.


إذا كنت تقوم بتشغيل التطبيق الخاص بك على محاكي ، وإذا استمرت هذه المشكلة ، تحقق من مدير الإعلام الخاص بك. إذا عرض لك رمزًا وإشعارًا حول "ذاكرة الهاتف ممتلئة" ، فهذا يعني أنك قمت بالفعل بتثبيت العديد من التطبيقات على المحاكي الخاص بك. قم بإلغاء تثبيت العديد من التطبيقات التي لا تريدها حاليًا من "الإعدادات >> إدارة التطبيق >> حدد التطبيق >> إلغاء التثبيت".
تلك المجموعة.
الآن إعادة تشغيل البرنامج.


الإجابة على أول مشاركة لهذا الموضوع ...

الأعراض: لا يتم تثبيت بعض التطبيقات ، قائلين إنه لا توجد مساحة ، كما أن هناك مساحة كبيرة خالية على التخزين الداخلي والخارجي !!! الحل: تعطيل التثبيت الخارجي افتراضيًا.

ضبط التثبيت الخارجي بواسطة defaut مع هذا:

adb shell pm set-install-location 2

يجعل التثبيت مستحيلاً على العديد من التطبيقات التي لا يمكن تثبيتها خارجيًا (مثل adblock + أو نحو ذلك)

ثم الحل

adb shell pm set-install-location 0

أو

adb shell pm set-install-location 1

0: auto (if one is full - or irrelevant !!! - it select the other)
1: internal
2: external

انتهى بي الأمر إلى إلغاء تثبيت التطبيق من الجهاز ثم إعادة تثبيته مرة أخرى في Eclipse. هذه مشكلة أحصل عليها طوال الوقت على جهازي من الاستخدام العادي ، ولكن اليوم حصلت على هذه الرسالة من التطوير.


بعد تجربة كل شيء آخر في هذا الموضوع ، اكتشفت مشكلتي الخاصة لأن المسار إلى الملف .apk كان طويل جداً. لذا قمت بالبحث في الدليل حيث كان .apk وكان يفعل ذلك:

cd /Very/Long/Path/To/Package/
adb install mypackage.apk

بدلا من

adb install /Very/Long/Path/To/Package/mypackage.apk

وعملت ... مثبتة على ما يرام.

ظننت أن هذا قد يساعد شخصًا آخر.


تحتاج إلى زيادة سعة ذاكرة محاكي الأندرويد. هناك طريقتان لذلك:

  1. انقر بزر الماوس الأيمن على جذر مشروع Android الخاص بك ، وانتقل إلى "Run As" ثم انتقل إلى "Run Configurations ...". حدد موقع عقدة "تطبيق Android" في الشجرة على اليسار ، ثم حدد مشروعك وانتقل إلى علامة التبويب "الهدف" على الجانب الأيمن من النافذة لأسفل بحثًا عن حقل "محاكي إضافي لخيارات سطر الأوامر" (أحيانًا أنت) سوف تحتاج إلى جعل النافذة أكبر) وأخيراً لصق "-partition-size 1024" هناك. انقر فوق تطبيق ثم قم بتشغيل لاستخدام المحاكي الخاص بك.

  2. انتقل إلى تفضيلات Eclipse's ، ثم حدد "Launch" قم بإضافة "-partition-size 1024" على الحقل "Default simulator option". انقر فوق "تطبيق" واستخدم المحاكي كالمعتاد.


جئت عبر نفس الخطأ عندما حاولت تثبيت التطبيقات حوالي 50 في دليل بطاقة SD باستخدام shell ADB بعد تحديث ROM كامل:

for x in *.apk; do pm install -r $x; done

تم تثبيت بعضها ، لكن العديد منها فشل مع الخطأ INSTALL_FAILED_INSUFFICIENT_STORAGE. جميع التطبيقات الفاشلة بها مساحة في اسمها. أعدت تسميتها ودفعت مرة أخرى. عملت كل هذا الوقت. لم أقم بإعادة التشغيل أو أي شيء. قد تكون هذه ليست المشكلة التي يواجهها الرجال ، ولكن هذا قد يساعد شخصًا ما يبحث عن المشكلة نفسها التي واجهتها.


حصلت على هذا الخطأ اليوم ، عند استخدام هاتفي للاختبار / التصحيح مع Eclipse.

كان خطئي أنني استخدمت الحرف الخاص النرويجي ("æ" ، "ø" ، "å") في اسم التطبيق. عندما أعيد تصميم اسم التطبيق (باستخدام "o" بدلاً من "ø") تم تثبيت التطبيق بشكل صحيح ..

ربما لا مشكلتك ، ولكن يمكن أن يلاحظ للآخرين الحصول على نفس الخطأ.


شكرا لنشر هذا السؤال. لدي بعض الأفكار الإضافية التي قد تساعد بعض المطورين.

أنا تصحيح التطبيق الخاص بي على جهاز (وليس المحاكي). يحتوي الجهاز على 21 ميغابايت على /data مجانية (كما هو موضح من قبل "df" عند القيام بـ "adb shell") ويبلغ تطبيقي 5 ميجابايت فقط. ومع ذلك ، وجدت أنه إذا حذفت تطبيقات أخرى على الجهاز (بدون إعادة تشغيل الهاتف أو إعادة تشغيل adbd) ، فإن INSTALL_FAILED_INSUFFICIENT_STORAGE سيذهب بعيدًا ثم يعود مرة أخرى.

لذا يبدو أن تصحيح التطبيق 5 ميغابايت يتطلب أكثر من 20 ميغابايت من المساحة في /data ، وبالإضافة إلى ذلك كان هناك تسرب في كل مرة أقوم بتشخيص تطبيقي.

لذلك فعلت "قذيفة adb" وأدرجت دليل /data كامل مع

cd /data
ls -a -l -R

ونظرت في إخراج 5000 خط لمعرفة أين كانت كل المساحة.

اكتشفت كميات هائلة من المساحة المهدورة على جهازي في دليل /data/klog في شكل ملفات سجل قديمة من جلسات تصحيح قديمة.

هذه لم تكن ملفات السجل الخاصة بي: تم إنشاؤها بواسطة جزء من بنية Android الأساسية.

قمت بحذفها وحفظت على الفور 58 ميغابايت والتي لم تُنسب في تطبيق الإعدادات إلى أي تطبيق معين. لدي جهاز صغير حتى 58 ميغابايت مهم جدا (حوالي 40 ٪).

حتى الآن ، لم أحصل على INSTALL_FAILED_INSUFFICIENT_STORAGE مرة أخرى بعد عدة عمليات. دعونا نأمل أن تكون هذه هي القضية الحقيقية ، على الرغم من أن OP يشير إلى أن جهازه لديه مساحة كبيرة (لكنه لم يذكر كم).

نأمل أن يتمكن بعضكم أيضًا من الفرار من INSTALL_FAILED_INSUFFICIENT_STORAGE عن طريق حذف /data/klog/* بشكل دوري.

أو ، على الأقل يمكنك القيام بـ ls -a -l -R في /data لمعرفة مكان كل المساحة الخاصة بك ، إذا كانت هناك بالفعل مشكلة مساحة (مخفية) بالفعل.


في Eclipse ،

Run -- > Debug Configurations --> Select "target", وحدد هدف محاكي مفضل Run -- > Debug Configurations --> Select "target", .

ثم أسفل ذلك "خيارات سطر أوامر المحاكي الإضافي" ، أضف هذا:

- حجم 1024

ثم أغلق المحاكي وانقر على رمز تصحيح الأخطاء ، والذي سيطلق المحاكي المفضل الذي حددته.

آمل أن يساعد ...!


في حالتي تم إصلاحه عن طريق زيادة الذاكرة الموسعة للكسوف ، عن طريق تغيير قيمة -Xmx768m في eclipse.ini


لقد أضفت سطرًا إضافيًا إلى ملف بيان التطبيق ، وهو android:installLocation="preferExternal" . باستخدام هذا الخط ، يفرض عليك تثبيت التطبيق على وحدة التخزين الخارجية. انظر المثال أدناه ،

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nasir.phonegap"
    android:installLocation="preferExternal" >

لقد قمت بحلها من خلال تضمين android:installLocation="auto" داخل <manifest> في ملف AndroidManifest.xml.


لم أتمكن من الوصول إلى الجذر على هاتفي ، وأنا غير مستعد لتثبيتي على بطاقة SD. يتوفر 15 ميغابايت من المساحة على /data/ وتطبيقي أقل من 2 ميغابايت.

لفترة من الوقت ، تنظيف مشروع Eclipse's وإعادة تشغيل الهاتف ، ولكن في النهاية توقفت عن العمل (ربما بعد التحديث).

لقد حلت عملية تنظيف ذاكرة التخزين المؤقت للتطبيق المشكلة بالنسبة لي ولا تتطلب إعادة تشغيل الهاتف أو إزالة التطبيق.

هناك تطبيقات في السوق يمكنك استخدامها لمسح ذاكرة التخزين المؤقت لعدة تطبيقات دفعة واحدة. ابحث عن "نظيف".


مجرد إلغاء تثبيت التطبيق من المحاكي إما من سطر الأوامر أو الذهاب إلى الإعدادات وإلغاء تثبيت التطبيق. هذا سيوقف الخطأ من القادمة.


هذا مجرد حل مؤقت وليس إصلاحًا حقيقيًا.

بعد أن حدث هذا لي وليس راضيا عن الردود الحالية ذهبت للعمل في محاولة لمعرفة ذلك من مصدر AOSP. لقد وجدت حلا حقيقيا .

تفسير

أولاً ، قليلاً من الخلفية (المبسطة) حول كيفية تثبيت Android وتحديثه

أول مرة يتم فيها تثبيت التطبيق:

  1. يتم حفظ ملف APK باسم

    /data/app/-1.apk (1.apk)

عندما يتم تحديث التطبيق:

  1. يتم حفظ ملف APK المحدث على النحو التالي:

    /data/app/-2.apk (2.apk)

  2. يتم حذف الإصدار الأول (1.apk).

في التحديث التالي (ق):

  1. يتم حفظ APK الجديد باسم (1.apk) و (2.apk) يتم حذف (كرر للأبد).

تحدث المشكلة التي يواجهها معظمنا عند تحديث التطبيق ، ولكن يؤدي حذف ملف APK القديم إلى الفشل. وهذا بدوره لا يتسبب في فشل التحديث بعد ، ولكنه يؤدي إلى وجود ملفي APK في /data/app .

في المرة التالية التي تحاول فيها تحديث التطبيق ، يتعذر على النظام نقل ملفه المؤقت نظرًا لأنه لا (1.apk) ولا (2.apk) فارغان. نظرًا لأن File # renameTo (ملف) لا يلقي استثناءًا ولكنه يُرجع بدلاً من ذلك PackageManager منطقيًا ، فلا يوجد أي طريقة لمعرفة سبب قيامه بإرجاع INSTALL_FAILED_INSUFFICIENT_STORAGE على الرغم من أن الفشل لم يكن له علاقة بكمية المساحة الفارغة.

حل

يركض:

adb shell "pm uninstall <full.packge.name>"
adb shell "rm -rf /data/app/<full.package.name>-*"

أو

إلغاء تثبيت التطبيق

استخدم طريقتك المفضلة لحذف كل منهما :

/data/app/<full.package.name>-1.apk

/data/app/<full.package.name>-2.apk

تأكد من عدم وجود أي شيء آخر يمنع عمليات التثبيت المستقبلية بطريقة مماثلة. في حالتي كان لدي /data/app-lib/<full.package.name>-1 العالقة في جميع أنحاء! في هذه الحالة ، عمل تثبيت على بطاقة SD ، وتحرك لاحق إلى الذاكرة الداخلية أيضًا. (إنشاء /data/app-lib/<full.package.name> بدون نهاية -1 .)

لماذا "الحلول" الأخرى عملت

  • يختلف رمز التثبيت للتخزين الخارجي اختلافًا كبيرًا ليس له نفس المشكلات

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

  • حجم المساحة الحرة في المحاكي غير ملائم حقًا عند حدوث هذا الخطأ


هناك مشكلة ذات صلة على المحاكي عندما لا يوجد أي مساحة متبقية في قسم /data .

فمثلا،

% adb shell df

Filesystem             Size   Used   Free   Blksize
/dev                   252M    32K   252M   4096
/mnt/asec              252M     0K   252M   4096
/mnt/obb               252M     0K   252M   4096
/system                154M   154M     0K   4096
/data                   64M    57M     6M   4096
/cache                  64M     1M    62M   4096

في ما يلي نموذج للعرض لدليل /data/app :

% adb shell ls -l /data/app

-rw-r--r-- system   system      19949 2011-10-12 17:09 CubeLiveWallpapers.apk
-rw-r--r-- system   system      27670 2011-10-12 17:09 GestureBuilder.apk
-rw-r--r-- system   system      34341 2011-10-12 17:09 SoftKeyboard.apk
-rw-r--r-- system   system      20151 2011-10-12 17:09 WidgetPreview.apk

أزلت ملفات APK الإضافية. يبدو أنه عند كل تثبيت تحصل على ملف APK جديد. ما عليك سوى إزالة ملفات APK الإضافية.

فمثلا،

adb shell rm /data/app/com.brooklynmarathon.calendarapi2-1.apk

يعلن Samsung Galaxy Ace عن 158 ميغابايت من التخزين الداخلي في مواصفاته ، ولكن التطبيقات والخدمات الأساسية تستهلك حوالي 110 ميغابايت من ذلك (استخدمت مدير المهام على الجهاز لفحص ذلك). كان تطبيقي 52 ميغابايت ، نظرًا لوجود الكثير من الأصول. بمجرد أن أحذف بعضًا منها إلى 45 ميغابايت ، تمكن التطبيق من التثبيت بدون مشكلة. كان الجهاز لا يزال ينبهني إلى أن التخزين الداخلي كان ممتلئًا تقريبًا ، ويجب أن أقوم بإلغاء تثبيت بعض التطبيقات ، على الرغم من أنني قمت بتثبيت تطبيق واحد فقط.

بعد تثبيت نسخة إصدار حزمة .apk ثم إلغاء تثبيتها ، يعرض جهازي مساحة خالية قدرها 99 ميغابايت ، لذا قد يكون تصحيح الأخطاء في المعلومات أمرًا يزعج الجهاز بعد كل شيء. انظر إجابة لويس سمبرينى .


الحل بسيط.

افتح مدير AVD. تحرير AVD الخاص بك.

أسفل في قسم الأجهزة ، هناك بعض الخصائص المدرجة مع "جديد ..." و "حذف" على يمينها.

اضغط على جديد. حدد حجم قسم البيانات. اضبط على "512 ميجابايت" (مطلوب ميجابايت). إنتهيت. إذا كنت لا تزال تواجه مشكلات ، فقم بزيادة نظامك وأقسام ذاكرة التخزين المؤقت أيضًا باستخدام نفس الطريقة.

كل ذلك موثق هنا: http://developer.android.com/guide/developing/devices/managing-avds.html





android-sdcard