مقدمه
احتمالا شما هم تا الان بالاخره اسم اندروید استودیو به گوشتان خورده است. پارسال همین موقع خبر انتشار نسخه ۰.۸ اندروید استودیو را به شما اطلاع داده بودم! اندروید استودیو را اولین بار در نسخه ۰.۴ دانلود و تست کردم. هنوز تا یک محیط برنامهنویسی یکپارچه (Integrated Development Environment یا IDE) مناسب فاصله زیادی داشت و البته طبیعی هم بود. به هر حال خود گوگل هم مدعی نبود که ابزار کاملی ساخته است! به هر حال آنقدر منتظر ماندم تا نسخه کامل آن عرضه شود. بالاخره با عرضه نسخه ۱.۰ در شرکت تصمیم گرفتیم تا از این IDE جدید استفاده کنیم. ابتدای کار با مشکلاتی برخورد کردیم ولی به مرور این مشکلات را حل کردیم و الان همه در شرکت از اندروید استودیو استفاده میکنیم. آخرین نسخه اندروید استودیو در زمان نوشتن این مطلب نسخه ۱.۴ است و این نشان میدهد که گوگل به سرعت در حال ارتقای این IDE است.
اما چرا باید حتماً اندروید استودیو را تست کنید و سعی کنید به کار کردن با آن عادت کنید؟ دلیل اصلی این است که گوگل به زودی پشتیبانی از ADT (پلاگین توسعه اندروید در اکلیپس) را متوقف خواهد کرد و آن وقت شما چه بخواهید چه نخواهید مجبورید از اندروید استودیو استفاده کنید. اما این تنها دلیل نیست. اندروید استودیو در همین نسخههای اولیهاش امکانات خوبی ارائه کرده است که تا قبل از آن باید دردسر زیادی را متحمل میشدید. یک دلیل بزرگ دیگر برای استفاده از اندروید استودیو استفاده آن از سیستم Build بسیار پیشرفته گریدل (Gradle) در برابر سیستم قدیمیتر انت (Ant) در اکلیپس است. در این مطلب به برخی از مزایای عمده گریدل نسبت به انت اشاره خواهیم کرد. یک دلیل دیگر که خیلیها را تشویق به استفاده از اندروید استودیو میکند، برنامه پایه آن است: IntelliJ IDEA که به طور خلاصه آیدیا خوانده میشود. ممکن است متوجه شباهت بسیار زیاد اندروید استودیو با IntelliJ IDEA شده باشید. شرکت JetBrains که مالک IDEA است، هسته آن را با نام IDEA Platform به صورت کدباز منتشر کرده است تا شرکتهای دیگر بتوانند از آن به عنوان پایهای برای ساخت IDE های دیگر استفاده کنند. از آنجایی که خیلی برنامهنویسان جاوا سالها است با IDEA کار کردهاند و میتوان گفت تمام ریزهکاریهای آن را میدانند، استفاده از Android Studio برای آنها خیلی ساده است!
امیدوارم با همه دلایل ذکر شده فوق متقاعد شده باشید!
دانلود و نصب اندروید استودیو
اندروید استودیو را از سایت توسعهدهندگان اندروید میتوانید دانلود کنید. البته توجه دارید که هنوز گوگل این سایت را روی ایران باز نکرده است و بنابراین راههای دور زدن تحریم را که میدانید! از همانها استفاده کنید!
البته اگر Android SDK را دارید توصیه میکنم وارد بخش Download Options شوید و نسخه بدون Android SDKرا دانلود کنید. حدود ۷۰۰ مگابایت به نفع شما است!
نصب برنامه مثل هر برنامه دیگری در ویندوز انجام میشود. البته گمان نکنم لازم باشد تکرار کنم که حتماً باید قبلش جاوا را نصب کرده باشید؟
برنامه را نصب کنید و برای نوشتن اولین برنامه با اندروید استودیو آماده شوید!
ساخت برنامه با اندروید استودیو
بعد از باز کردن اندروید استودیو لیست پروژههای قبلی را در سمت چپ و ویزاردهای ساخت پروژه را در سمت را ست میبینید.
همانطور که در عکس میبینید گزینههای ویزارد اینها است:
Start a new Android Studio project: برای ساخت یک پروژه جدید از این گزینه استفاده کنید.
Open an existing Android Studio project: یک پروژه دیگر که با اندروید استودیو ساخته شده است را باز میکند.
Import an Android code sample: یک پروژه از برنامههای نمونه Android SDK میسازد.
Import project Eclipse ADT, Gradle: پروژههایی که ساختار آنها از سایر استانداردهای ساخت یا Build استفاده میکنند میتوانید وارد کنید ولی باید کمی حرفهای باشید!
برای ساخت پروژه جدید گزینه اول را انتخاب کنید و در مرحله بعد مثل تصویر زیر فیلدها را پر کنید:
در مرحله بعد باید پایینترین نسخه اندروید SDK که قرار است برنامه آن را پشتیبانی کنید. پیشفرض ۱۵ است که همان اندروید ۴.۰.۳ یا بستنی نانی است. با انتخاب این گزینه الان ۹۶ درصد گوشیهای موجود در بازار برنامه شما را اجرا میکنند که میزان مطلوبی است:
در مرحله بعد باید نوع اکتیویتی لانچر برنامه را انتخاب کنید. این اولین صفحهای است که کاربر میبیند. هر کدام از این آیتمها را انتخاب کنید اندروید استودیو به تناسب کدهای مورد نیاز را برای شما میسازد:
همانطور که در عکس میبینید Blank Activity را اکتیویتی خالی را انتخاب کنید. مرحله بعد تنظیمات مربوط به این اکتیویتی را میپرسد. من بدون تغییر به مرحله بعد میروم:
اگر اولین بار است که یک پروژه با اندروید استودیو میسازید احتمالاً این آخرین گام کمی طول میکشد. کمی تأمل کنید.
حالا یک پروژه با اندروید استودیو داریم!
ساختار پروژه در اندروید استودیو
اگر به سمت چپ اندرویداستودیو دقت کنید میبینید که در یک پنجره کشویی ساختار پروژه را به شما نشان میدهد:
اگر با اکلیپس کار کرده باشید با بیشتر قسمتهای این عکس آشنایید. دو قسمت این عکس نیاز به توضیح دارند: شاخه mipmap در res و شاخه Gradle Scripts.
mipmap چیست؟
در مطالب قبلی درباره تأثیر تراکم (رزولوشن) صفحه نمایش بر drawable ها مفصل نوشتهام. از اندروید ۴.۳ میتوان برای آیکون لانچر برنامه به جای drawable از mipmap استفاده کرد. mipmap روشی است برای افرایش سرعت رندر در گرافیکهای ۲ و ۳ بعدی. اما کاربرد آن برای آیکونهای لانچر برنامهها در اندروید چیست؟ گاهی پیش میآید که لانچرها نیاز به تصاویر بزرگتری از لانچر آیکون دارند. مثلاً تراکم صفحه نمایش در مقیاس xhdpi است ولی برنامه لانچر نیاز به آیکونی بزرگتر از ۹۶ در ۹۶ (که اندازه لانچر آیکون در رزولوشن xhdpi است) دارد. در این مواقع اگر عکس را بزرگتر کند طبیعتاً از کیفیت تصویر کاسته میشود. mipmap ها عناصر گرافیکیای هستند که در برابر تغییر سایز بهتر از drawable ها عمل میکنند. به طور خلاصه از mipmap ها فقط برای لانچرآیکونها استفاده میشود. خیلی سخت نگیرید!
Gradle چیست و چطور کار میکند؟
اول از همه بگویم که تلفط صحیح این کلمه گریدل است نه گردل! چند جا این تلفظ اشتباه را شنیدم که لازم دیدم تذکر یدهم! اما گریدل (gradle) چیست؟ گریدل یک سیستم Build یا ساخت برنامه است. در واقع گریدل تعدادی اسکریپت به زبان برنامهنویسی groovy است. برای انجام مراحل ساخت یا Build برنامه باید کارهای زیادی انجام شود. تا قبل از اندروید استودیو وقتی یک برنامه را کامپایل یا اجرا میکردید یا از آن خروجی (export) امضا شده (signed) میگرفتید Ant بود که کارهای build را انجام میداد. Ant یکی سیستم build قدیمی است و متناسب با نیازهای ساخت برنامههای اندروید نبود. نیازهای برنامههای اندروید به قدری زیاد است که عملاً در پروژههای بزرگ درصد زیادی از زمان توسعه برنامه به نوشتن اسکریپتهای Ant میگذشت. سعی میکنم با یک سناریوی ساده مسأله را برایتان توضیح بدهم.
فرض کنید شما مسئول توسعه یک برنامه بزرگ با تعداد زیادی کاربر (مثلاً یک میلیون کاربر) هستید. هر نسخه برنامه قبل از انتشار نهایی و رسیدن به دست کاربران باید بارها و بارها (شاید صدها یا هزاران بار درستتر باشد) تست شود. طبیعتاً نمیتوانید برنامهای که هنوز از صحت عملکرد آن مطمئن نیستید را بر روی دادههای واقعی بیازمایید. پس یک سرور تست (Test bed) درست میکنید و آن را با دادههای غیر واقعی پر میکنید. حالا نیاز به یک نسخه از برنامه دارید که طوری تنظیم شده باشد که به این سرور تست متصل شود. حالا اگر همه چیز اوکی بود باید یک نسخه دیگر از برنامه بسازید که با دادههای واقعی کار کند. آیا هر بار که نیاز به تست برنامه دارید به سراغ کد میروید و قسمت اتصال و تنظیمات برنامه را دستکاری میکنید؟ قانونی در مهندسی نرمافزار وجود دارد که میگوید «کارهای تکراری باید خودکار انجام شوند». راهحل دیگر شما این است که به سراغ Ant بروید و اسکریپتهای آن را دستکاری کنید تا بتوانید هر زمان که خواستید نسخه مخصوص تست و نسخه نهایی برنامه را بتواند برای شما بسازد. اینجا است که میبینید خیلیهایتان تا الان حتا نمیدانستید Ant چیست!
حالا فرض را کمی پیچیدهتر میکنیم. فرض کنید برنامه را میخواهید در مارکتهای مختلف منتشر کنید و هر کدام از آنها API های مختلفی برای اتصال به سرورهای خود برای «خرید درون برنامهای» تدارک دیدهاند. فرض کنید شما ۵ مارکت مختلف را به عنوان مارکتهای هدف انتخاب کردهاید: گوگلپلی، آمازون، بازار، مایکت و اپتوئید. تا اینجا شما به ده نسخه مختلف از برنامه خود نیاز دارید: یک نسخه تست برای هر کدام از این مارکتها و یک نسخه نهایی!
در دنیای واقعی برنامههای زیادی وجود دارند که فرایند ساخت یا build آنها از این هم پیچیدهتر است. در واقع سناریویی که گفتم خیلی هم خیالی نیست!
چطور بر این پیچیدهگی غلبه میکنید؟ اینجا بود که توسعهدهندگان اندروید در گوگل به درستی تصمیم گرفتند تا در اندروید استودیو به جای Ant از گریدل استفاده کنند.
در یک مطلب مفصل درباره گریدل خواهم نوشت. اگر کمی در اینترنت جستجو کنید میبینید که درباره گریدل کتابها نوشته شده و طبیعتاً انتظار ندارید در میانه یک نوشته وبلاگی به همه جنبههای گریدل مسلط شوید!
فعلاً برگردیم سراغ برنامه و ببینیم گریدل چه چیزهایی به برنامه ما اضافه کرده است.
فایل build.gradle پروژه:
اگر اولین فایلی گه در شاخه Gradle Scripts میبینید باز کنید محتوای آن شبیه کد زیر است:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } }
در این فایل تنظیمات اصلی build برنامه که در همه ماژولهای برنامه مشترک هستند قرار میگیرد. در پروژههای معمولی غالباً نیازی به تغییر دادن این فایل ندارید. به طور خلاصه در این فایل نسخه اسکریپت گریدل اندروید گوگل و نحوه دسترسی به آن را در قسمت dependencies یا وابستگیها اعلام میکنیم و repository یا مخازنی که گریدل میتواند از آنجا به سایر وابستگیها یا dependencies دسترسی داشته باشد (معمولاً jcenter و mavencentral) را معرفی میکنیم. مخازن روشی استاندارد برای دسترسی به کدها هستند و شما میتوانید به جای اینکه خودتان کدها را بگیرید و به برنامه اضافه کنید و دائماً نگران بروزرسانی آنها باشید، فقط اطلاعات کلی دسترسی به آنها را در یک خط به گریدل اعلام میکنید و گریدل مخازن را برای پیدا کردن آنها میگردد و آنها را به صورت خودکار به برنامه اضافه میکند.
فایل build.gradle مربوط به ماژول app
در اندروید استودیو هر برنامه از یک یا چند ماژول ساخته میشود که هر کدام آنها فایل build.gradle خاص خودشان را دارند. در این پروژه که ما ساختیم، یک ماژول به نام app از قبل برای ما ساخته شده است و دومین فایلی که در شاخه Gradle Scripts میبینید فایل build مخصوص این ماژول است:
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.0" defaultConfig { applicationId "com.example.helloandroidstudio" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.0.0' }
اولین خط این فایل به گریدل میگوید که این برای build کردن این ماژول از پلاگین com.android.application استفاده کند. اگر ماژول یک کتابخانه بود به جای این پلاگین از پلاگین com.android.library استفاده میکردیم.
در بخش اندروید تنظیمات اصلی پروژه را میبینید مثل compileSdkVersion را میبینید. این تنظیمات تا پیش از این در مانیفست برنامه تعریف میشدند ولی در اندروید استودیو و با استفاده از گریدل آنها را اینجا وارد میکنیم و گریدل در زمان ساخت برنامه اینها را در فایل AndroidManifest.xml وارد میکند.
applicationId: همان نام پکیج برنامه است.
minSdkVersion: همان نقشی که در فایل مانیفست داشت اینجا هم دارد و پایینترین نسخه اندروید که برنامه را اجرا میکند معلوم میکند. یادتان هست در زمان ایجاد پروژه جایی از ما این را پرسیده بود؟
targetSdkVersion: نسخهای از اندروید است که با آن برنامه را کامپایل میکنیم. معمولاً آخرین نسخه اندروید در زمان نوشتن برنامه است.
versionCode و versionName را اینجا کاملاً توضیح دادهام.
buildTypes: یادتان است که در در تشریح مزایای گریدل از این گفتیم که شما با اندکی تنظیمات میتوانید ساختها یا build های مختلف از برنامهتان مثلا برای تست و … بگیرید؟ اینجا جایی است که یک نمونه از این تنظیمات را میبینید. اینجا به گریدل میگوید که برای ساخت نسخه قابل انتشار برنامه (release) ما minifyEnabled را غیر فعال کردهایم و در خط بعدی هم نشانی فایل تنظیمات proguard را به گریدل میدهیم. در آینده با این قسمت بیشتر آشنا خواهید شد!
dependencies: یکی از جاهایی است که احتمالاً زیاد گذرتان خواهد افتاد! هر بار که یک کتابخانه را بخواهید به برنامهتان اضافه کنید باید آن را اینجا تعریف کنید. در این قسمت میگوید هر فایلی که در libs قرار دارد و پسوند آن jar است را در زمان کامپایل نیاز خواهی داشت. خط بعدی اطلاعاتی درباره unit test میدهد (عجله نکنید! تا چند وقت دیگر باید با همه اینها کار کنید!) و در خط بعدی یک کتابخانه به برنامه اضافه کرده است: appcompat-v7 نسخه ۲۳٫۰٫۰ که نام پکیج آن com.android.support است! به همین سادگی! دیگر نیازی نیست فایلهای آن را از اینترنت بگیرید و خودتان آنها را به پروژه اضافه کنید و دائماً نگران نسخههای جدید این کتابخانه باشید. همه این کارها را گریدل برای شما انجام خواهد داد.
در مطلب بعدی نحوه اجرا (run) و خطازدایی (debug) برنامهها را در اندروید استودیو به شما آموزش خواهم داد.
بسیار عالی. ممنون. امیدوارم به مشکلات هم بپردازید و روش کار آفلاین رو توضیح بدید تا بشه یکبار برای همیشه از شرشون راحت شد.
سپاس
گریدل بعد از این که یکبار کتابخانه را دانلود کرد آنها را در یک مخزن در کامپیوترتان ذخیره میکند و هر بار سراغ اینترنت نمیرود.
سلام.تشکر از آموزش هاتون.
دوتا مشکل دارم با اندروید استودیو که ممنون میشم راهنماییم کنید:
۱ وقتی برای دومین بار پروژه رو باز میکنم مشکل رندر داره و rendering problemمینویسه.
۲ ADB not responding
بازم ممنون از آموزش هاتون
سلام. مشکل اول مشکل حادی نیست و به دلایل زیادی ممکنه استودیو نتونه لیاوت طراحی شده را پیشنمایش بده. برای مشکل دوم اگر در ویندوز هستید، تسک منجر رو باز کنید و همه adb.exe ها رو ببندید. استودیو رو هم ببندید و دوباره باز کنید.
بسیار عالی و زیبا. واقعا لذت برده و می برم.
خیلی عالی! مشتاقانه منتظر مقالات بعدی هستم…
سلام آقای بهزادیان نژاد بزرگوار
من می خواستم زبان جاوا رو یاد بگیرم. داشتم آموزش جاوای شما رو که پیشتر منتشر کرده بودید می خوندم، اونجا فرمودید باید از اکلیپس استفاده کنیم.
من دوست دارم بتونم با جاوا از برنامه و بازی کامپیوتری تا اپلیکیشن موبایل رو طراحی کنم.
برای این منظور اندروید استودیو بهتر هست یا اکلیپس؟
الان حدسم این هست که اندروید استودیو فقط برای طراحی اپلیکیشن اندروید استفاده میشه. درست؟
سلام.
از اندروید استودیو فقط برای نوشتن برنامههای اندروید استفاده میشود. اگر میخواهید جاوا بنویسید اکلیپس و آیدیا گزینههای بهتری هستند.
بسیار عالی بود لطفا ادامه دهید
بسیار عالی بود لطفا ادامه دهید.بیشتر در مورد گریدل مطلب بگذارید
سپاسگزارم. حتما ادامه خواهم داد.
با سلام و تشکر از سایت عالیتون.
ببخشید من اندروید استودیو رو به تازگی نصب کردم . سوالم اینجاست که هر موقع نرم افزار رو باز میکنم و یا هر وقت که پروژه رو اجرا میکنم gradle build running چیزی در حدود ۱۴ دقیقه طول میکشه . میخاستم بدونم باید چه کار کنم؟؟؟
با تشکر
منم دقیقا همین مشکل رو با نسخه آخر اندروید استودیو دارم. خواهش میکنم راهنمایی کنید. ضمنا از انواع پراکسی و فیلتر شکن هم استفاده کردم. در هر حالتی دقیقا ۱۴ دقیقه طول میکشه برنامه بیلد و اجرا بشه
چقدر دنگ و فنگ . نمیشه این کتابخانه را دانلود کرد که نخواد همیشه آنلاین باشیم و گیر نکنه پروژه
سلام.چطور میشه یه پروژه را که روی یه سیستمی بیلد کردیم و به اینترنت هم وصل بودهو با موفقیت کاراش انجام شده را بخوایم ببریم روی یه سیستم دیگه توی اندروید استادیو باز کنیم؟سیستم دوم نت نداره.میخوام بدونم چجور میشه کلیه این گریدل ها و … که دانلود شده و ساخته شده در سیستم اول را به دومی انتقال داد؟
ممنون
بسیار عالی ممنون از توضیحاتتون ، لطفا در مورد فایلهای گریدل و مانیفست و مقایسه ایندو بپردازید .
احسن بر شما خیلی قشنگ و عالی توضیح دادید تشکر.
با سلام خسته نباشید . من میخوام یک پروژه رو در اندروید استودیو اکسترکت کنم اما فایل منیفستم ارو میده میشه راهنماییم کنیدmanifest xmlns:”http://schemas.android.com/apk/res/android” android:versionCode=”3″ android:versionName=”3.0″ package=”majdigroup.digipishkhan.com.digipishkhan” platformBuildVersionCode=”25″ platformBuildVersionName=”7.1.1″>
خیلی خیلی ممنون از مطالب خوبتون.
خدا خیرتون بده.
خیلی ممنون از توضیحاتون