تقليل حجم التطبيق

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

أفضل الممارسات

تحميل التطبيق بتنسيق Android App Bundle

إنّ أسهل طريقة لتقليل حجم التطبيق بشكل فوري عند النشر على Google Play هي من خلال تحميل تطبيقك على هيئة مجموعة حزمات تطبيق Android، وهو تنسيق نشر جديد يتضمّن كل الرموز والموارد المجمّعة لتطبيقك، ويتيح إمكانية تأجيل إنشاء حزمة APK والتوقيع على Google Play.

تقليل حجم رمز وقت التشغيل

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

android {
    buildTypes {
        getByName("release") {
            isMinifyEnabled = true
            isShrinkResources = true
        }
    }
}

إزالة التخطيطات غير الضرورية

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

إعادة تقييم الميزات التي لا تُستخدم كثيرًا

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

استخدام ميزة "التقديم الديناميكي"

يستخدم عرض الميزات في Play إمكانات متقدّمة لحِزم التطبيقات، ما يتيح تقديم ميزات معيّنة في تطبيقك بشروط أو تنزيلها عند الطلب. يمكنك استخدام وحدات الميزات للتسليم المخصص. تتمثل إحدى المزايا الفريدة لوحدات الميزات في القدرة على تخصيص طريقة ووقت تنزيل ميزات مختلفة لتطبيقك على أجهزة تعمل بنظام التشغيل Android 5.0 (المستوى 21 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث.

تقليل حجم السلسلة القابلة للترجمة

يمكنك استخدام سمة resConfigs لنظام Gradle المتوافق مع Android لإزالة ملفات الموارد البديلة التي لا يحتاجها تطبيقك. إذا كنت تستخدم مكتبة تتضمّن موارد لغوية (مثل AppCompat أو "خدمات Google Play")، سيتضمّن تطبيقك كل السلاسل اللغوية المترجَمة لرسائل المكتبة، بغض النظر عن ترجمة التطبيق. إذا كنت تريد الاحتفاظ فقط باللغات التي يوفّرها تطبيقك رسميًا، يمكنك تحديد هذه اللغات باستخدام السمة resConfig. تتم إزالة أي موارد للغات غير المحددة.

لحصر الموارد اللغوية على الإنجليزية والفرنسية فقط، يمكنك تعديل defaultConfig كما هو موضّح أدناه:


android {
    defaultConfig {
        ...
        resConfigs "en", "fr"
    }
}

استخدام الترجمة الانتقائية

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

على سبيل المثال، لا تتكلّف بترجمة عناوين URL.

<string name="car_frx_device_incompatible_sol_message">
  This device doesn\'t support Android Auto.\n
  &lt;a href="https://support.google.com/androidauto/answer/6395843"&gt;Learn more&lt;/a&gt;
</string>

قد تتعرّف على &lt; و&gt، لأنّهما حرفَي الإلغاء للرمز < و>. وهي مطلوبة هنا، لأنّه إذا أردت وضع علامة <a> داخل علامة <string>، سيزيلها برنامج تجميع موارد Android لأنّه لا يتعرّف على العلامة. لكن هذا يعني أنك تترجم علامات HTML وعنوان URL إلى 78 لغة. بدلاً من ذلك، يمكنك إزالة ترميز HTML:

<string name="car_frx_device_incompatible_sol_message">
         This device doesn\'t support Android Auto.
</string>

دمج البرامج الثنائية الأصلية مع التبعيات المشتركة

إذا كان تطبيقك يشتمل على عمليات تنفيذ مختلفة لواجهة Java Native Interface (JNI) مع تبعيات أساسية مشتركة، ستعمل البرامج الثنائية المختلفة على زيادة حجم حزمة APK باستخدام مكونات مكرّرة. يمكنك دمج العديد من ثنائيات JNI في ملف ثنائي JNI واحد مع الفصل بين ملفي Java وJNI. وقد يؤدي ذلك إلى تقليل حجم حزمة APK بشكل كبير.