ویژگی های Instant Apps

اپلیکیشن آنی (Instant Apps) چیست؟ + راه اندازی محیط توسعه (بخش دوم)


در مطلب قبل به معرفی اپلیکیشن های آنی (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.

ماژول های Instant Apps

به استثنای ماژول feature، هر پروژه ای که از اپلیکیشن های آنی پشتیبانی میکند باید تمامی ماژول های بالا را داشته باشد. حال میخواهیم هریک از این ماژول ها را با جزئیات مورد بررسی قرار دهیم.

 

1. ماژول Application

مفهوم ماژول اپلیکیشن چیز جدیدی نیست، اما وقتی که پروژه شما از اپلیکیشن های آنی پشتیبانی کند، Manifest ماژول اپلیکیشن خالی تر از حالت معمول خواهد بود:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

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 را باز کنید، تمامی آیکون های لانچر اپلیکیشن را میبینید که در چندین ماژول مورد استفاده قرار خواهند گرفت.

ماژول Base Feature در اپلیکیشن های آنی

از آنجا که این ماژول شامل کد و منابع رایج است، تمامی ماژول های feature پروژه به این ماژول base feature وابسته اند.

ماژول base feature شامل موجودیت های Manifest است که در کل پروژه مورد استفاده قرار خواهند گرفت. برای مثال فایل base/src/main/AndroidManifest.xml که دربرگیرنده تنظیمات برای آیکون، تم و برچسب باشد:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.jessicathornsby.myapplication">

<application

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" />

</manifest>

بخش مهم دیگر، فایل 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 در اپلیکیشن های آنی

هر ماژول 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 اضافه شده اند:

<activity

android:name=".MainActivity"

android:label="@string/app_name"

android:theme="@style/AppTheme.NoActionBar">

<intent-filter android:order="1">

<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.BROWSABLE" />

<category android:name="android.intent.category.DEFAULT" />

<data

android:host="jessicathornsby.com"

android:path="www.example.com/MainActivity"

android:scheme="https" />

</intent-filter>

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

<intent-filter android:autoVerify="true">

 

این فایل نهایی که در فایل 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 تغییر دهید که آن هم کار بسیار ساده ای میباشد!

 

https://code.tutsplus.com برگرفته از

اینها را هم بخوانید