Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

ثماني طرق لتقليل حجم الـ APK(حزمة تطبيق أندرويد) الخاص بك

by
Length:LongLanguages:

Arabic (العربية/عربي) translation by lama Ghazali (you can also view the original English article)

منذ أن أطلق "متجر الأندرويد" في آذار/مارس عام 2012، تضاعف حجم معدل تطبيق الأندرويد خمس مرات.

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

ومع ذلك، هناك نقطة حيث أن لكل تلك الرسومات عالية الدقة والميزات المبتكرة والغنية، ومحتوى الوسائط المتعددة تأثيراً سلبياً على خبرة المستخدم — لا أحد يريد تطبيقاً يحتاج وقتاً طويلاً للتحميل، ثم يأخذ جزء كبيرة على ذاكرة الجهاز! وهناك أدلة تشير الى وجود علاقة عكسية بين حجم الـ APK الخاص بك وعدد الأشخاص الذين يقومون بتحميل تطبيقك. ووفقاً لـدراسة حديثة، مع كل 6 ميغابايت زيادة في حجم الـ APK، يمكنك أن تتوقع إنخفاض نسبة واحد في المائة في عدد الأشخاص الذين يقومون بتثبيت التطبيق الخاص بك بعد زيارة صفحة Google Play.

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

حزم تطبيق الأندرويد: دعم المزيد من الأجهزة، مع الحد من حجم الـ APK 

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

ولطالما كان دعم أكبر قدر ممكن من الأجهزة دون زيادة هائلة في حجم الـ APK الخاص بك، مشكلةً بالنسبة لمطوري أندرويد منذ زمن طويل. ومع ذلك، يهدف فريق أندرويد إلى تغيير كل هذا، بتنسيق إصدار جديد تم تصميمه لمساعدتك على دعم النطاق الكامل لأجهزة أندرويد، مع تقليل حجم الـ APK الخاص بك. وفقاً لما ورد في المدونة الرسمية لمطوري الأندرويد، عن طريق نشر التطبيق الخاص بك بهذا الشكل الجديد من حزمة التطبيق الأندرويد (.aab)، ستكون قادراً على تقليل حجم الـ APK الخاص بك بمعدل 35 %.

بمجرد أن تقوم بتحميل التطبيق الخاص بك كملف.aab، سيستخدم Google Play هذا الملف الفردي لإنشاء:

  • قاعدة APK التي تحتوي على كافة التعليمات البرمجية والموارد اللازمة لتوفير وظائف قاعدة التطبيق الخاص بك. سوف يتلقى كل شخص يقوم بتحميل التطبيق الخاص بك نفس قاعدة الـ APK.
  • مجموعة من الـ APK متعددة التكوين، التي صممت خصيصاً لتكوينات الأجهزة المختلفة. في كل مرة يقوم بها شخص ما بتحميل التطبيق الخاص بك، سيتلقون تكوين الـ APK المصمم خصيصاً لأجهزتهم الخاصة، ويحتوي فقط على التعليمات البرمجية والموارد التي يحتاجونها فعليا.

لإنشاء التطبيق الخاص بك كـ"حزمة تطبيق أندرويد" موقعة، قم أولاً بتحديد إنشاء> إنشاء حزمة/APK موقعة من شريط أدوات ستوديو الأندرويد. ثم إختر خانة حزمة تطبيق أندرويد، ومن ثم إنقر فوق التالي. الآن، إفتح الوحدة النمطية من القائمة المنسدلة، وإختر التطبيق كقاعدة الوحدة النمطية الخاصة بك.

إتبع التعليمات التي تظهر على الشاشة لإكمال عملية الإنشاء. سيعمل ستوديو أندرويد الآن على إنشاء ملف.aab وسيقوم بتخزينه في دليل جهاز الكمبيوتر الخاص بك حزمة تطبيق أندرويد/التطبيق/إصدار.

عندما تكون مستعداً لتحميل ملف.aab الخاص بك إلى Google play، فقط توجه الى وحدة تحكم Google Play، ثم إختر إنشاء تطبيق.

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

عند مطالبتك بذلك، قم بالتسجيل في App Signing بواسطة Google Play، وهو أمر إلزامي لاستخدام تنسيق حزمة التطبيقات. إختر إستعراض الملفات ثم إختر ملف.aab الذي تريد تحميله.

Upload your Android App Bundle to the Google Play Console

وأخيراً، إنقر حفظ لحفظ إعداداتك .

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

إختر إستكشاف حزمة التطبيق، وسترى تقديراً تقريبيا للمساحة التي حفظتها، معبراً عنها بنسبة مئوية.

Check how much space youve saved your users by using the aab format

تقديم سمات عند الطلب، مع وحدات ميزة ديناميكية

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

لإنشاء وحدة ميزة ديناميكية، إختر ملف > جديد > وحدة نمطية جديدة... من شريط أدوات ستوديو أندرويد. إختر وحدة ميزة ديناميكية، ثم التالي.

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

Select the Enable on-demand and Fusing checkboxes

وأخيراً ضع للوحدة النمطية الخاصة بك إسم عام، الذي سيظهر للمستخدم النهائي. إنقر إنهاء.

تمكين الوصول إلى الوحدة النمطية ذات الميزة الديناميكية

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

قم بفتح النشاط أو الجزءحيثما تريد تحميل الوحدة النمطية الخاصة بك ذات الميزة الديناميكية ثم قم بإضافة ما يلي:

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

جرب قبل أن تشتري: عرض تطبيقات APK فورية 

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

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

في الإصدارات الأخيرة من ستوديو الأندرويد، أصبح إنشاء تطبيقات APK فورية أسهل، كما أنه من الممكن الآن إنشاء تطبيق فوري غير محدد بـ URL، مزيلاً كل التعقيدات المصاحبة لتحديد URL.

بمجرد نشر تطبيقك الفوري بدون عنوان URL، سيتمكن المستخدمون من الوصول إليه عبر زر جربه الآن في قائمة تطبيقات Google Play.

The BuzzFeed app is one example of an Android Instant App

لإنشاء هذا النوع من التطبيقات الفورية بدون عنوان URL، ستحتاج إلى:

  • ستوديو أندرويد 3.2 أو أعلى.
  • تطوير تطبيقات فورية SDK 1.3.0 أو أعلى.
  • أحدث الإصدارات من أدوات بناء أندرويد SDK وأدوات المنصة. 

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

لدعم التطبيقات الفورية، ستحتاج إلى إنشاء الوحدات النمطية التالية:

  • الوحدة النمطية للتطبيق. هذه هي وحدة التطبيق "القياسية" القابلة للتثبيت.
  • الوحدة النمطية الأساسية. تحتوي هذه على التعليمات البرمجية والموارد التي سيتم إستخدامها في جميع وحدات مشروعك النمطية، مثل أيقونات بدء التطبيق الخاص بك.
  • وحدة نمطية ذات ميزة. تحتوي هذه على التعليمات البرمجية والموارد المطلوبة لتقديم ميزة قائمة بذاتها.
  • وحدة التطبيق الفوري النمطية. هذه حاوية ستأخذ في نهاية المطاف كل وحدة من ميزات مشروعك وتحويلها إلى ملفات APK للتطبيقات الفورية.
The structure of an Instant App-enabled project

لإلقاء نظرة أكثر تفصيلاً على بنية المشروع الفريد هذا، تحقق من: ما هي تطبيقات الأندرويد الفورية؟

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

When creating a project make sure you select the following checkbox This project will support instant apps

يمكنك بعد ذلك إضافة التعليمات البرمجية والموارد لكل وحدة نمطية، بشكل طبيعي.

لإختبار تطبيقك الفوري الذي لا يحتوي على عناوينURL، ستحتاج إلى جهاز متوافق، والذي يعد وفقًا لمستندات أندرويد الرسمية "أكثر" الأجهزة الفعلية التي تعمل بنظام أندرويد 5.1 أو أعلى. إذا كنت تستخدم المحاكي، إذاً ستحتاج إلى AVD (جهاز أندرويد الإفتراضي) الذي يستخدم أندرويد 8.1 أو أحدث، أسلوب بناء x86، ويتضمن واجهات برمجة التطبيقات الخاصة بـ Google. كما ستحتاج إلى تسجيل الدخول إلى حساب Google صالح على جهاز الاختبار الخاص بك أو الإفتراضي.

لتختبر تطبيقك الفوري، إختر تشغيل> تشغيل ... من شريط أدوات أندرويد ستوديو، ثم إختر تحرير التكوينات...

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

يجب أن يظهر تطبيقك الفوري الآن على الشاشة، بدون تثبيت ولا يلزم وجود عنوان URL!

عندما يحين وقت إطلاق تطبيقك، يمكنك إما إكمال عملية التوقيع مرتين من أجل إنشاء تطبيقات APK فورية ومنفصلة وقابلة للتثبيت- أو يمكنك إنشاء مشروعك كحزمة تطبيق.

نشر حزمة تطبيقات فورية -ممكّنة للتطبيقات

في الإصدار التجريبي 1 من أندرويد ستوديو 3.3 والإصدارات الأحدث، يمكنك دمج التطبيقات الفورية مع حزم التطبيقات، لإنشاء ملف .aab فردي يضم كلاً من تطبيقك الفوري والقابل للتثبيت.

لإعداد التطبيق الخاص بك لنشر ملف .aab مع تطبيق فوري مضمّن، إفتح وحدة التطبيق الفوري النمطية الخاصة بمشروعك.

في الملف الخاص بهذه الوحدة النمطية AndroidManifest.xml، أضف ما يلي:

قم بفتح ملف build.gradle الخاصة بالوحدة النمطية لتطبيقك، وتأكد من أن المتغير الفوري الخاص بك يحتوي على كود إصدار أصغر، ثم نظيره القابل للتثبيت:

إختر بناء> إنشاء حزمة موقعة / APK من شريط قوائم أندرويد ستوديو، ثم قم بإنشاء حزمة تطبيقاتك كالمعتاد، مع التأكد من تسجيلها باستخدام مفتاح إصدار.

إزالة جميع الأساليب غير المستخدمة، والفئات، والحقول، وسمات والموارد

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

1. تشعر بالمغامرة؟ جرب Shrinker R8 الجديد

يمكن أن يساعدك تقليص التعليمات البرمجية في تقليل حجم ملف الـ APK، عن طريق حذف التعليمات البرمجية والموارد الغير مستخدمة.

يشتمل الإصدار التجريبي 1 من أندرويد ستوديو 3.3 على معاينة لأداة تقليص الأكواد البرمجية R8 القادمة، والتي تؤدي أيضًا عملية disugaring (إكتشاف ما وراء العبارة) و dexing (التنفيذ المباشر)، وفقًا لـ Google، تقوم بتقليص الكود بشكل أسرع من ProGuard.

لتجربة R8 بنفسك، تأكد من تشغيل الإصدار التجريبي 1 من أندرويد ستوديو 3.3 أو الإصدارات الأحدث، ثم قم بإضافة التالي إلى ملف gradle.properties الخاص بك:

2. تقليص الكود الخاص بك مع ProGuard

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

لتمكين ProGuard، أضف التالي إلى ملف مستوى الوحدة النمطية build.gradle الخاص بك:

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

3. تمكين تقليص الموارد

بمجرد أن تقوم بتمكين تقليص التعليمات البرمجية، يمكنك إستخدام تقليص الموارد لتعريف وإزالة الموارد غير الضرورية:

4. تحسين التعليمات البرمجية الخاصة بك مع أداة أندرويد Lint

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

لتشغيل Lint، إختر تحليل> فحص الكود ... من شريط أدوات أندرويد ستوديو. إذا ضبطت Lint أي موارد غير مشار إليها، فسوف تدرجها في نافذة نتائج المعاينة.

After running a Lint inspection you can check its findings in the Inspection Results window

قم بتحويل PNGs وJPEG وBMPs إلى WebP

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

إذا كان الـ minSdkVersion الخاص بمشروعك 18 أو أعلى، فيمكنك ضغط ملفات PNG وJPEG وBMPs الخاصة بك عن طريق تحويلها إلى تنسيق WebP.

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

قم بفحص الـ APK الخاص بك باستخدام محلل الـ APK في أندرويد ستوديو

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

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

لتحليل ملف الـ APK، ما عليك إلا تحديد إنشاء> تحليل الـ APK من شريط قوائم أندرويد ستوديو.

في النافذة التالية، إختر ملف الـ APK ذو الصلة. سيتم فتح محلل الـ APK في لوحة جديدة.

The APK Analyzer displays the raw and download size of every file that makes up your APK

 يعرض محلل الـ APK ما يلي لكل ملف ومجلد:

  • حجم الملف الأصلي. هذا هو الحجم الذي تم فك ضغطه لهذا العنصر على القرص.
  • حجم التحميل. هذا هو الحجم المضغوط المقدر للعنصر، كما سيتم تسليمه بواسطة Google Play.
  • % من إجمالي حجم التنزيل. النسبة المئوية لإجمالي حجم التنزيل للـ APK الذي يمثله هذا العنصر.

هذه ليست الميزة الوحيدة التي يوفرها محلل الـ APK.

تخيل أنك قد نجحت في خفض حجم ملف الـ APK الخاص بك وإصدار تطبيق خفيف الوزن يجمع 5 نجوم متوهجة على Google Play، وهذا لا يعني أنه يمكنك التوقف عن القلق بشأن حجم ملف الـ APK! في مرحلة ما، ستحتاج إلى إصدار تحديث، مما يعني أن حجم الـ APK سيصبح مصدر قلق كبير مرة أخرى.

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

يمكنك استخدام محلل الـ APK لتسليط الضوء على جميع الإختلافات بين الـ APK الخاص بك الحالي والسابق، والتي يمكن أن تساعدك في التركيز على المناطق والأصول التي يمكنك تحسينها، أو حتى إزالتها بالكامل.

لمقارنة ملفات الـ APK، إختر أولاً إنشاء> تحليل APK من شريط قوائم أندرويد ستوديو.

ثم إختر أحدث إصدار من الـ APK الخاص بك. في الزاوية العلوية اليمنى من محلل الـ APK، إختر مقارنة بالـ APK السابق ... بعد ذلك، إختر الإصدار السابق من APK. يجب أن تظهر نافذة منبثقة، مُبرِزةً جميع الاختلافات بين ملف الـ APK الحالي والسابق.

لا تنسى Android Go!

تمثل الأسواق الناشئة بعضًا من جماهير الهواتف الذكية الأسرع تزايداً في العالم، وقد أثبت ظهور علامات تجارية مثل Vivo و Oppo أن الأجهزة المناسبة للميزانية لديها القدرة على السيطرة على هذا السوق سريع التوسع.

لمساعدة أندرويد على جذب هذا الجمهور الجديد والمتنامي كلياً، قامت Google بإصدار Android Go، وهو إصدار من أندرويد مع تحسينات في الأداء والتخزين والذي صمم لتوفير تجربة أفضل على أجهزة مواتية للميزانية، بما في ذلك أجهزة تحتوي على أقل من1 جيجابايت من ذاكرة الوصول العشوائي.

يتاح لمستخدمو Android Go الوصول إلى متجر Google Play بأكمله، ولكن Google يسلط الضوء على التطبيقات التي تم تحسينها لـ Android Go، من ضمنها تطبيقات تشغل أقل من 40 ميغابايت على جهاز المستخدم.

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

لإنشاء تطبيق Android Go مخصص، ستحتاج إلى إنشاء ملف APK له نفس اسم الحزمة وشهادة التوقيع مثل تطبيقك "المعتاد"، لكن برمز إصدار فريد.

عند إنشاءالـ APK  لـ Android Go الخاص بك، ستحتاج أيضًا إلى إضافة ما يلي إلى قائمتك:

الاستنتاج

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

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.