در مقاله گذشته به معرفی نرم افزار های آنی (Instant Apps)، مزایا و محدودیت های آن پرداختیم. طراحی اپلیکیشن درپی به روش فعال سازی دور و بر بسط خواهیم پرداخت، با ما یار باشید.
فعال سازی دور و بر توسعه و گسترش
قبل از اینکه ساختوساز اولی پروژه با به کارگیری از اپ های آنی را استارت نمایید، می بایست مورد ها تحت (یا این که ورژن های فراتر) را نصب داشته باشید.
• Android Studio 3.0 Preview
• Android SDK 6.0
• Android SDK Build Tools 26.x
• Android SDK Tools 25.x
• Android SDK Platform Tools 25.x
علاوه بر این ما یحتاج میباشد آخری ورژن از Android Support Library و Android Repository نیز نصب باشد. SDK Manager اندروید استودیو را گشوده نمائید و هر آپدیتی که مورد نیاز میباشد را انجام دهید.
زمانی کل مورد ها بالا را نصب کردید، می توانید Instant Apps Development SDK را دانلود نمائید.
• SDK Manager را گشوده فرمایید و به زبانه SDK Tools بروید.
• Instant Apps Development SDK را گزینش فرمایید.
• بر روی Apply کلیک نمایید.
آزمایش Instant Apps صرفا بر روی موبایل هایی قابلیت و امکان پذیر میباشد که اندروید 6.0 بر روی آنان نصب گردیده باشد. در شرایطیکه تلفن همراه شما از این ورژن از اندروید پشتیبانی نمیکند، می توانید با یاری Android Virtual Device یا این که AVD چنین تلفن همراه را مشابه سازی نمایید. AVD می بایست از x86 image استعمال نماید و مشتمل بر Google APIs باشد.
روش تولید AVD:
• AVD Manager را گشوده فرمائید.
• بر روی دکمه Create virtual device کلیک نمایید.
• Pixel را گزینش کرده و روی Next کلیک فرمائید.
• زبانه x86 Images را گزینش نمائید.
• یک system image که اندروید 6.0 را اجرا میکند و مشتمل بر Google APIs میباشد گزینش نمایید، از جمله (Marshmallow / 23 / x86 / Android 6.0 Google APIs).
• Next را بزنید.
• یک اسم برای AVD وارد فرمایید و Finish را بزنید.
• AVD را اجرا فرمائید.
در پایان می بایست با به کار گیری از AVD به حساب گوگل خویش وارد گردید:
• به AVD برگردید و لانچر موبایل را گشوده نمایید.
• نرم افزار Google را گزینش نمایید.
• یک نشانی جیمیل و پسورد وارد نمائید. میتوانید از حساب فردی خویش یا این که اکانتی که برای آزمایش پروژه های اندروید ساخته اید به کارگیری نمایید.
ساخت و ساز اولی برنامه آنی
در اندروید استودیو 3.0 Preview 1 یا این که فراتر، ساخت و ساز پروژه ای که به صورت پیش فرض از نرم افزار های آنی پشتیبانی نماید، عمل بسیار معمولی ای میباشد.
دقت داشته باشید کهاین پروژه ای که در درحال حاضر ایجاد آن هستیم، فاقد هرگونه App Links است، از این رو توانمند به آزمایش کامپوننت های اپ بر روی AVD نمیباشید.
برای تولید پروژه:
• ویزارد تولید پروژه را گشوده فرمایید. برای این عمل میتوانید از ...File> New> New Project از نوار ابزار اندروید استودیو یا این که کلیک بر روی Start a new Android Studio project از Welcome screen اندروید استودیو به کارگیری فرمایید.
• یک اسم برای پروژه تعیین نمائید و Next را بزنید.
• اندروید 6.0 را برای Minimum SDK گزینش نمایید.
• نظارت جعبه Android Instant app support را تعیین کرده و Next را بزنید.
• برای آسانی فعالیت اسم پیش فرض برای ماژول را پذیرفته و Next را بزنید.
• Basic Activity را تعیین کرده و Next را بزنید.
• در شیت بعدی کلیه مقادیر پیش فرض را پذیرفته و Finish را بزنید.
همانگونه که مشاهده می کنید ساختار این پروژه با بقیه پروژه های اندروید که قبلا ساخته بودید متعدد میباشد و مشتمل بر ماژول های ذیل می شود:
• App: ماژول اپ قابل نصب که با اسم ماژول APK نیز شناخته شدهاست.
• Base: ماژول base feature.
• Feature: این پروژه خاص فقط دارنده یک کدام از این ماژول هاست، البته برنامه قادر است چند ماژول Feature نیز داشته باشد.
• Instant App: ماژول instant app.
به استثنای ماژول feature، هر پروژه ای که از نرم افزار های آنی پشتیبانی میکند بایستی همه ماژول های بالا را داشته باشد. هم اکنون می خواهیم هر مورد از این ماژول ها را با جزئیات گزینه نظارت در اختیار بگذاریم.
1. ماژول Application
معنا ماژول نرمافزار چیز جدیدی وجود ندارد، البته زمانی که پروژه شما از اپ های آنی پشتیبانی نماید، Manifest ماژول نرم افزار خالی خیس از شرایط معمول خواهد بود:
package=\"com.jessicathornsby.myapplication.app\" />
استدلال خاصی برای خالی بودن این فولدر نیست: زمانی پروژه را بیلد می کنید، محتوای بقیه فولدر های Manifest که در base feature و ماژول های feature می باشند با این فولدر ترکیب میگردند، از این رو نمیتوان اعلام کرد کهاین فولدر مدام خالی میباشد!
در صورتیکه پوشه build.gradle ماژول را گشوده فرمائید، دو جز را مشاهده خواهید کرد:
dependencies {
implementation project(\':feature\')
implementation project(\':base\')
}
در اینجا انتخاب می کنیم که ماژول نرمافزار دارنده یک تعلق به ماژول feature و base می باشد.
زمانی پشتیبانی از Instant App را به پروژه اضافه می کنید، کدها و منابع دارای ارتباط را به ماژول های feature جدا از هم تقسیم میکنید که جداگانه از اپ قابل نصب عملیات خویش را انجام میدهند. با این حالا این ماژول ها هنوز هم بخشی از اپ قابل نصب شما میباشند و نامونشان های مستقلی نیستند. به همین استدلال ماژول application، ماژول های feature و base را تحت عنوان تعلق ها انتخاب میکند.
2. ماژول Base Feature
هر پروژه نرم افزار آنی بایستی دربرگیرنده یک ماژول base feature باشد که شامل کد و منابعی میباشد که در ماژول های نرم افزار شما آیتم استعمال قرار می گیرند. مثلا در شرایطیکه پوشه base/res/mipmap را گشوده فرمایید، کلیه آیکون های لانچر برنامه را میبینید که در چند ماژول آیتم استعمال قرار خواهند گرفت.
ازآنجاکه این ماژول مشتمل بر کد و منابع رایج میباشد، همه ماژول های feature پروژه بهاین ماژول base feature متعلق اند.
ماژول base feature مشتمل بر موجودیت های Manifest میباشد که مجموعاَ پروژه آیتم استعمال قرار خواهند گرفت. به عنوان مثال پوشه base/src/main/AndroidManifest.xml که شامل پیکربندی برای آیکون، تم و برچسب باشد:
package=\"com.jessicathornsby.myapplication\">
android:allowBackup=\"true\"
android:icon=\"@mipmap/ic_launcher\"
android:label=\"@string/app_name\"
android:roundIcon=\"@mipmap/ic_launcher_round\"
android:supportsRtl=\"true\"
android:theme=\"@style/AppTheme\" />
قسمت اساسی دیگر، فولدر build.gradle از ماژول میباشد که دربرگیرنده تعدادی خصوصیت می باشد:
//All base feature and “regular” feature modules use the com.android.feature plugin, rather than the com.android.application plugin//
apply plugin: \'com.android.feature\'
android {
compileSdkVersion 26
buildToolsVersion \"26.0.0\"
//Specify that this is the project’s one and only base feature, using the ‘baseFeature true’ expression//
baseFeature true
…
…
…
dependencies {
//Use ‘application project’ to add a dependency from the base feature module, to your project’s installable ‘app’ module//
application project(\':app\')
//Use ‘feature project’ to reference our project’s feature module, aptly named ‘feature’//
feature project(\':feature\')
همان گونه که میبینید، این فولدر build.gradle خاص خصوصیت application را ندارند و همین مسئله برای فولدر build.gradle ماژول feature نیز راست گو میباشد. applicationID پروژه فقط در پوشه build.gradle ماژول تعریف و تمجید شدهاست.
خط (application project (:app در پوشه build.gradle ماژول برای این میباشد که مطمئن شویم خصوصیت applicationID در همگی پوشه های build.gradle انتشار شدهاست، به همین ادله این خصوصیت در بقیه قسمت های پروژه غایب میباشد.
3. ماژول Feature
زمانی بخواهید پشتیبانی از اجرای آنی را به پروژه کنونی خویش اضافه نمایید، مهمترین فعالیت استخراج همه قابلیت و امکان های نرمافزار به ماژول feature خویش است. به نحوی که هر ماژول feature دربرگیرنده کد و منابع لازم برای ارائه آن feature می باشد.
در صورتیکه ماژول feature پروژه را گشوده نمایید، میبینید که دربرگیرنده کلاس MainActivity و پوشه های منبع activity_main و content_main و همه کامپوننت هایی که در قالب Basic Activity میباشند می باشد.
هر ماژول feature به تنهایی مشتمل بر چند اکتیویتی میباشد، ولی هر ماژول می بایست دارنده دستکم یک اکتیویتی است که برای ماژول entry-point Activity پباده سازی شدهاست.
هر entry-point Activity به یک URL خاص اختصاص داده گردیده، بدین ترتیب زمانی مخاطب این URL را لمس میکند، اکتیویتی مربوطه را لود کرده و بدین ماژول feature خاص دسترسی داراست.
با به کار گیری از manifest، ماژول entry-point Activity را انتخاب کردید. بایستی این پوشه را گشوده نمایید و قسمت ذیل را به اکتیویتی که می خواهید تحت عنوان entry-point به کار گیری فرمایید، بیفزایید:
• یک غربال اینتنت یار با اینتنت های CATEGORY_LAUNCHER و ACTION_MAIN.
• یک عنصر که مشتمل بر همگی داده ها مرتبط با URL است که میخواهید بدین entry-point Activity اختصاص دهید.
• خصوصیت android:autoVerify. این نصیب به سیستم میگوید که می بایست جواز اجرا تحت عنوان هندلر پیش فرض برای این URL خاص را داشته باشد. این یک مکانیزم امنیتی اصلی میباشد و وب سایت پروژه را از برنامه های مخرب حفاظت میکند.
درصورتیکه ماژول feature پوشه manifest را گشوده فرمایید، می بینید که کلیه این کدها به تعریف و تمجید MainActivity اضافه گردیده اند:
android:name=\".MainActivity\"
android:label=\"@string/app_name\"
android:theme=\"@style/AppTheme.NoActionBar\">
android:host=\"jessicathornsby.com\"
android:path=\"www.example.com/MainActivity\"
android:scheme=\"https\" />
این پوشه آخرین که در فولدر build.gradle میخواهیم به آن بپردازیم، دربرگیرنده یکسری خط کد اصلی است:
//Again, we’re using com.android.feature plugin, rather than com.android.application//
apply plugin: \'com.android.feature\'
android {
//As previously mentioned, this section is missing an ‘applicationID’ attribute//
…
…
…
dependencies {
implementation fileTree(dir: \'libs\', include: [\'*.jar\'])
androidTestImplementation(\'com.android.support.test.espresso:espresso-core:2.2.2\', {
exclude group: \'com.android.support\', module: \'support-annotations\'
})
//All feature modules have a dependency on the base feature module, which we’re declaring here//
implementation project(\':base\')
testImplementation \'junit:junit:4.12\'
از آنجایی که کلیه ماژول های feature به ماژول base feature متعلق میباشند، اولین توشه که مخاطب هر قابلیتی از برنامه را درخواست میکند، ماژول base feature از اپ را به هم پا ماژول feature که سعی بر دسترسی به آن داراست، اخذ میکند.
اعتنا داشته باشید کهاین پروژه خاص دربرگیرنده ماژول base feature و ماژول feature می باشد. در حالتی که که اپ صرفا یک قابلیت و امکان داشته باشد که بخواهید تحت عنوان Instant App در دسترس قرار دهید، دراین حالت می توانید پروژه ای بسازید که صرفا مشتمل بر ماژول feature باشد.
4. ماژول Instant App
ماژول instant App یک مقصود معمولی داراست: تحت عنوان یک کانتینر فعالیت میکند که صرفا ماژول های feature را می گیرد و آن ها را به Instant App APK تبدیل میکند.
در شرایطی که ماژول Instant App این پروژه را گشوده نمایید، مشاهده میکنید که به جز پوشه build.gradle، حدودا خالی میباشد، چون صرفا به تعریف و تمجید ماژول base feature و feature تحت عنوان تعلق پرداخته میباشد:
apply plugin: \'com.android.instantapp\'
dependencies {
implementation project(\':feature\')
implementation project(\':base\')
}
آزمایش نرمافزار
از آنجایی که پروژه دربرگیرنده App Links وجود ندارد، نمیتوانیم کامپوننت های instant app آن را آزمایش کنیم، ولی خواهیم توانست این پروژه را تحت عنوان برنامه installable اجرا کنیم. اعتنا داشته باشید که نصیب متعددی از کد و منابع پروژه در ماژول feature اپ قرار داراهستند و از این رو آزمایش عملیات پروژه تحت عنوان برنامه قابل نصب اساسی میباشد.
AVD را که پیش از این ساختید اجرا نمائید یا این که تلفن همراه را به سیستم خویش وصل نمائید و آن گاه Run>Run ..>app را از نوار ابزار اندروید استودیو گزینش فرمایید.
علی رغم این حقیقت که کد MainActivity در ماژول feature جای دارد، هنگامی نرمافزار بار گذاری میگردد دکمه اکشن شناور MainActivity و پیام Hello World را مشاهده می کنید. آنچه می بینید، ماژول برنامه میباشد که کد و منابع جان دار که در ماژول های Instant App feature و base feature غیر وابسته قرار داراهستند را گرفته و ادغام آنهارا در یک نرمافزار قابل نصب قرار می دهد.
عده بندی
دراین مقاله به روش عمل برنامه های آنی پرداختیم و عارضه ها مختلفی را آیتم تحلیل قرار دادیم که به کارگیری از Instant App در پروژه های اندروید را توجیه میکنند.
شاید ترجیح دهید تا از نخستین اپلیکیشنی را بسازید که از امکان اجرای آنی پشتیبانی میکند، البته متاسفانه در اکثر حالت مجبورید پروژه های کنونی خویش را برای پشتیبانی از Instant Apps تغییرو تحول دهید که آن هم عمل بسیار بی آلایش ای است!