1. بضع كلمات
2. التفاصيل
Android SDK
ضع SDK Android في الدليل المنزلي أو أماكن أخرى غير مرتبطة بالتطبيق. ستقوم بعض IDEs بربط SDK عند تثبيت SDK ووضعها في نفس الدليل من IDE. عندما تحتاج إلى ترقية (إعادة التثبيت) IDE أو استبدال IDE ، ستجد شيئًا سيئًا. بالإضافة إلى ذلك ، إذا كانت IDE تعمل تحت حساب مستخدم بدلاً من الجذر ، فلا تضع SDK في دليل مستوى النظام ، وإلا فإن إذن SUDO مطلوب عند استخدامه.
بناء نظام
الاختيار الافتراضي هو Gradle. النمل لديه العديد من القيود وهو كبير جدا. مع Gradle ، يمكنك القيام بذلك بسهولة:
- تجميع نكهات مختلفة أو متغيرات التطبيق
-فصول فصول بسيطة -مهام سكنية
-إدارة التبعيات وتنزيلها
-بقيس مفاتيح
-إلخ
تم تعيين Gradle Plug-in لنظام Android أيضًا بواسطة Google على أنه نظام التجميع القياسي الجديد ، ويواصل Google ترقيته.
هيكل المشروع
هناك خياران شائعان: هيكل مشروع ANT & Eclipse ADT القديم ؛ هيكل مشروع New Gradle & Android Studio. يجب عليك اختيار الأخير. إذا كان مشروعك يستخدم هيكلًا قديمًا ، استبدله.
هيكل قديم
البنية القديمة ├ الأصول ├ libs├ res├ src│ └ com/futurice/project ├ androidmanifest.xml├ build.gradle├ project.properties└ proguard-rules.pro
هيكل جديد
بنية جديدة ├ مكتبة-أوبار ├ app│ ├ libs ├ src│ ├ androidtest│ │ │ └ java│ │ │ └ └ └ j j │ │ │ │ │ └ │ │ │ │ └ └ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ Androidmanifest.xml│ ├ build.gradle│ └ proguard-rules.pro├ build.gradle└ settings.gradle
الفرق الرئيسي بين الهيكل الجديد هو تقسيم "مجموعة الكود المصدر" (Main ، Androidtest) ، وهو المفهوم من Gradle.
إن استخدام أعلى مستوى "تطبيق" مفيد لتمييز تطبيقك عن مشاريع المكتبات الأخرى المشار إليها من قبل تطبيقك (مثل مكتبة Foobar). ثم يحتفظ Settings.Gradle بفهرس التطبيق لهذه المكتبات ، ويمكن أن يشير App/Build.gradle إلى هذه المكتبات.
تكوين Gradle
الهندسة المعمارية العامة يرجى اتباع دليل Google على Gradle for Android ؛
المهام الصغيرة (البرامج النصية) ، يمكنك استخدام Gradle لإنشاء مهام صغيرة بدلاً من shell أو python أو perl ، وما إلى ذلك للحصول على التفاصيل ، يرجى الرجوع إلى وثائق Gradle ؛
كلمة المرور. في التطبيق الخاص بك build.gradle ، تحتاج إلى تحديد SigningConfigs لتجميع النشر. التفاصيل كما يلي:
لا تكتب مثل ما يلي ، سيظهر في نظام التحكم في الإصدار:
SigningConfigs {relex {storefile file ("myapp.keystore") storepassword "password123" keyalias "thekey" keypassword "passion789"}}بدلاً من ذلك ، يجب عليك إنشاء ملف Gradle.Properties لن يتم إضافته إلى نظام التحكم في الإصدار.
keystore_password = password123key_password = password789
سيتم استيراد هذا الملف تلقائيًا بواسطة Gradle ، بحيث يمكنك استخدامه في Build.gradle مثل هذا:
SigningConfigs {relex {try {{storefile file ("myapp.keystore") storePasswordKeyStore_Password Keyalias "thekey" keypasswordkey_password} catch (ex) {thrownewInvalidateException ("(إذا كنت تستخدم Maven ، يرجى الرجوع إلى المستند الأصلي)
مكتبة
جاكسون هي مكتبة جافا يمكنها تحويل الكائنات وبيانات JSON إلى بعضها البعض. GSON هو أيضا اختيار جيد بالمثل. ومع ذلك ، نعتقد أن JSCKSON أفضل لأنه يدعم طرقًا متعددة للتعامل مع JSON: البث ، نموذج شجرة الذاكرة وربط بيانات JSON-POJO. ولكن تذكر أن جاكسون أكبر من GSON ، لذلك يجب أن تفكر في ذلك كما يحلو لك ، إذا كنت ترغب في تجنب الحد 65K طريقة ، فمن الأفضل استخدام GSON. خيارات أخرى: JSON-SMART و BOON JSON
الشبكة ، ذاكرة التخزين المؤقت والصور. استخدام تسديدة أو التحديث. يمكن أيضًا استخدام Volley لتحميل الصور وذاكرة التخزين المؤقت. إذا اخترت Retrofit ، فيمكنك استخدام Picasso لتحميل الصور وذاكرة التخزين المؤقت. ثم استخدم OKHTTP لتنفيذ طلب HTTP صالح. هذه الأنواع الثلاثة: التحديثية ، بيكاسو و Okhttp جميعها تأتي من نفس الشركة ، لذلك يكملون بعضها البعض. يمكن استخدام OKHTTP للاتصال بالتسجيل.
Rxjava هي مكتبة برمجة مستجيبة ، وبعبارة أخرى ، تتعامل مع الأحداث غير المتزامنة. (للحصول على التفاصيل ، يرجى الرجوع إلى المستند الأصلي)
Retrolambda هي مكتبة Java التي تساعدك على استخدام تعبيرات Lambda على Android أو غيرها من الأنظمة الأساسية قبل JDK8. (للحصول على التفاصيل ، يرجى الرجوع إلى المستند الأصلي)
أخيرًا ، تذكر قيود طريقة DEX ولا تستخدم الكثير من المكتبات. (تطبيقات Android ، عندما يتم تعبئتها في ملفات DEX ، لها الحد الأقصى: 65535 طرق مرجعية [1] [2] [3]. إذا تجاوزت الحد الأقصى ، فسيحدث خطأ خطير.
الأنشطة والشظايا
يجب أن تكون الشظايا هي الخيار الافتراضي لواجهة واجهة المستخدم لنشر Android. يمكن إعادة استخدام الشظايا في طلبك. نوصي باستخدام أجزاء بدلاً من الأنشطة لرسم واجهات بناءً على النقاط التالية:
بنية حزمة Java
إن بنية Java في تطبيقات Android قريبة من بنية MVC (موحرة عرض النموذج). في Android ، الشظية والنشاط هي في الواقع فئات التحكم. من منظور آخر ، فهي جزء من تفاعل المستخدم ، أي أنها تنتمي إلى فئة العرض.
لذلك ، من الصعب علينا أن نميز بدقة ما إذا كانت الشظية (أو النشاط) هي وحدة تحكم أو عرض. لذلك من وجهة نظر حزم Java ، من الأفضل أن نضع شظايا في حزم أجزاءها الخاصة ، ثم يكون النشاط في الحزمة الأكثر تقدماً (اتبع الاقتراحات الموضوعة أعلاه). بالطبع ، إذا كنت ترغب في الحصول على نشاطين أو أكثر ، فأنت تقوم بإنشاء حزمة أنشطة.
وبهذه الطريقة ، يشبه الهيكل بأكمله بنية MVC نموذجية. تحتوي حزمة النماذج على POJOS ، والتي يتم استخدامها لتحويل بيانات JSON التي تم الحصول عليها بواسطة واجهة API ، وتحتوي حزمة طرق العرض على طرق عرض وإشعارات ومشاهد مشاهدات شريط الإجراءات والأدوات ، إلخ. المحولات هي طبقة وسيطة موجودة بين البيانات والطرق. ومع ذلك ، فإنهم عادة ما يحتاجون إلى إخراج العرض من خلال GetView () ، بحيث يمكنك وضع محولات في موقع الحجز الفرعي لحزمة طرق العرض.
يجب وضع بعض فئات وحدة التحكم على مستوى التطبيق التي تنتمي فقط إلى نظام Android في حزمة المديرين. يمكن وضع فئات معالجة البيانات المختلفة ، مثل DateUtils ، في حزمة Utils. يجب وضع الفئات التي تتفاعل مع خادم الخلفية في حزمة الشبكة.
باختصار ، يمكن تصميم الهندسة المعمارية الإجمالية من التفاعل مع الخادم إلى التفاعل مع المستخدم على النحو التالي:
com.futurice.project ├ الشبكة ├ النماذج ├ المديرين ├ ut ut ut شظايا ├ وجهات النظر
تسمية ملف المورد
اتبع اتفاقية البادئة ، على غرار type_foo_bar.xml ، مثل: fragment_contact_details.xml ، view_primary_button.xml ، activity_main.xml.
تنظيم ملفات التصميم
إذا كنت لا تعرف كيفية تطبيع ملف XML تخطيط ، فيمكنك الرجوع إلى الاتفاقيات التالية:
<؟ Android: layout_height = "match_parent" Android: layout_height = "match_parent" Android: eachtion = "vertical"> <textView android: id = "@id/name" android: layout_width = "match_parent" android: layout_height = "wrap_content" android: style = "@style/fancytext"/> <تضمين التصميم = "@layout/reusable_part"/> </linearlayout>