آموزش برنامه نویسی برای اندروید با ایکلیپس(8)- ساختار پروژه

در بخش قبلی شما اولین پروژه را ایجاد کردید بدون اینکه کدی نوشته باشید. در اینجا شما از یک ساختار فایلی استفاده می کنید که ویزارد اندروید برای شما ساخته است.
چهارشنبه، 5 آذر 1393
تخمین زمان مطالعه:
موارد بیشتر برای شما
آموزش برنامه نویسی برای اندروید با ایکلیپس(8)- ساختار پروژه
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(8)- ساختار پروژه

 

مترجم: حبيب الله عليخاني
منبع: راسخون




 
در بخش قبلی شما اولین پروژه را ایجاد کردید بدون اینکه کدی نوشته باشید. در اینجا شما از یک ساختار فایلی استفاده می کنید که ویزارد اندروید برای شما ساخته است.

اداره فولدر اپلیکیشن

در ایکلیپس، پکیج Explorer پروژه Hello Android را مانند تصویر زیر بسط می دهد.
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(8)- ساختار پروژه
همانطور که در تصویر بالا مشاهده می کنید، بعد از بسط آن شامل زیر مجموعه ای از پوشه های(زیر فولدر) زیر می باشد:
• src
• gen
• Android version (such as Android 2.2)
• assets
• res
این پوشه ها فقط آن چیزی که شما می توانید در پروژه اندروید داشته باشید نیست، اما اینها پوشه های پیشفرض هستند که از طریق ویزارد پروژه جدید اندروید(New Android Project) ساخته شده اند. پوشه های دیگری وجود دارند مانند: bin، libs و referenced libraries .
در ابتدا ممکن نیست پوشه ی bin را مشاهده کنید، زیرا این پوشه مخفی(hidden) خواهد بود(از آخرین ورژن ADT البته در ورژن های آینده ممکن است تغییر کند). پوشه های libs و referenced libraries تا زمانیکه شما یک کتابخانه سومی اضافه کنید و در پروژه تان به آن رجوع شود، دیده نمی شود. من این پروسه را در آینده در این بخش، پوشش خواهم داد.
دو فایل دیگر در این پروژه AndroidManifest.xml و default.properties می باشد. فایل AndroidManifest.xml به شما کمک می کند تا کامپوننت هایی که اپلیکیشن را build و اجرا می کنند، را تعیین کنید، در حالیکه فایل default.properties به شما کمک می کند تا خواص پیشفرض پروژه اندروید را تعیین کنید(مانند ورژن اندروید).
در زیر در مورد همه ی این فایل ها و پوشه ها بحث خواهیم کرد.

پوشه ی سورس src (Source)

پوشه ی سورس- در پروژه ی اندروید به نام src- شامل فایل ریشه MainActivity.java می باشد که شما در ویزارد پروژه ی جدید(New Android Project) آن را ساخته اید. برای بررسی محتوای پوشه ی src باید آن را بسط دهیم. مراحل زیر را طی کنید:
1- پوشه ی src را انتخاب کنید و پیکان کوچک سمت چپ را برای بسط آن پوشه کلیک کنید.
پکیج پیشفرض پروژه تان را خواهید دید: com.dummies.android.helloandroid.
2- پکیج پیشفرض را انتخاب کنید و آن را بسط دهید.
در این بخش فایل MainActivity.java را در پکیج com.dummies.android.helloandroid خواهید دید. مانند تصویر زیر:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(8)- ساختار پروژه
شما در پروژه ی اندروید تان به یک پکیج محدود نمی شوید. در حقیقت، تفکیک قسمت های مختلف هسته ی اصلی در کلاسهای جاوا به پکیج ها بهترین تکنیک می باشد. یک نمونه ممکن است این باشد که اگر شما کلاسی داشتید که وظیفه ی آن ارتباط با یک API وب از طریق XML بود. همچنین، اپلیکیشن شما ممکن است شی(ابجکت) Customer را داشته باشد که مدل یا الگوی دامین مشتری را ارائه می دهد و مشتریان از طریق کلاسهای API وب بازیابی می کنند. در این جا، شما ممکن است پکیج های جاوا اضافه داشته باشید که شامل کلاسهای جاوا اضافه می باشد.
✓ com.dummies.android.helloandroid.models
✓ com.dummies.android.helloandroid.http
این پکیج ها ممکن است کامپوننت های جاوا مربوط به خودش را داشته باشد. پکیج com.dummies.android.helloandroid.models ممکن است شامل کلاسهای جاوا مدل دامین باشد و پکیج com.dummies.android.helloandroid.http ممکن است شامل کلاسهای جاوا مربوط به HTTP (Web API) باشد. یک پروژه اندروید با این روش در تصویر زیر ارائه شده:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(8)- ساختار پروژه

پوشه کتابخانه ی اندروید Target

فعلا از پوشه ی gen پرش کردیم و زمانی که به پوشه ی res رسیدیم، به این پوشه رجوع خواهیم کرد. اما اکنون به پوشه ی کتابخانه ی اندروید Target می پردازیم.
این آیتم، شامل فایل android.jar می باشد که اپلیکیشن شما ایجاد کرد. ورژن این فایل با ساخت Target در زمان ساخت پروژه از طریق New Android Project تعیین شده بود. با بسط ایتم Android 2.2 در پروژه، فایل android.jar و مسیر جایی که نصب شده ظاهر می شود. مانند تصویر زیر:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(8)- ساختار پروژه
ممکن است فکر کنید که SDK نصب شده در پوشه ی c:\SDK\، این حقیقت را بیان کند که شما نباید SDK را در مکان دیگر نصب کنید. اما این طور نیست و شما می توانید هر جای دیگر در فایل سیستم آن را نصب کنید.

پوشه ی assets

پوشه ی assets در حالت پیشفرض خالی می باشد. این پوشه برای ذخیره ی فایل های اولیه و خام مفید استفاده می شود.
یک فایل raw asset می تواند یکی از ابزاری مورد نیاز برای اپلیکیشن تان باشد. یک مثال بزرگ ممکن است فایلی که شامل داده در یک فرمت اختصاصی مورد استفاده ی یک وسیله است، باشد. اندروید دارای یک مدیر asset می باشد که می تواند همه ی ابزارهای موجود در دایرکتوری(شاخه ی) assets را برگرداند. بمحض خواندن یک asset، اپلیکیشن شما می تواند داده را در فایل بخواند. اگر اپلیکیشنی ساخته بودید که در خودش دیکشنری داشت، با قرار دادن فایل دیکشنری (که در دایرکتوری assets قرار دارد و معمولا یک فایل XML یا باینری مانند پایگاه داده SQLite می باشد) به پروژه، به آن دیکشنری اضافه کرده اید.
اندروید با assets به عنوان یک دسترسی اولیه به مدیریت منابع، رفتار می کند. شما محدود به اینکه چه چیزی در دایرکتوریassets قرار دهید، نیستید. اما به هر حال، کار با assets می تواند کمی خسته کننده تر از کار با resource، باشد. زیرا شما نیاز دارید که با جریانی از بایت ها کار کنید و آن ها را به اشیا و بعدا صدا ، ویدئو، متن و غیره تبدیل کنید.

پوشه ی منابع res (Resources)

پوشه ی res شامل منابع مختلفی که شما در اپلیکیشن تان می توانید استفاده کنید، می باشد. شما باید همیشه همه ی منابعی که اپلیکیشن شما برای مصرف نیاز دارد، را واقعی سازی کنید. مثال کلاسیک هر منبع شامل رشته ها وعکس ها می باشد. به عنوان مثال، شما باید از قرار دادن رشته درون کد تان ممانعت کنید. در عوض، یک منبع رشته بسازید و از کد به آن ارجاع دهید. بعدا به شما نشان خواهیم داد که چگونه این کار را انجام دهید. همه ی منابع باید در زیر شاخه ی res گروهبندی شوند تا درخواست آن ها بهتر انجام شود.
همچنین شما باید منابع دیگری را برای ترکیب وسایل خاص، با گروهبندی آنها در شاخه منبع با نام مخصوص، فراهم کنید. در زمان اجرا اندروید تعیین می کند کدام پیکربندی اپلیکیشن در حال اجرا است و منبع اختصاص داده شده را برای pop کردن(بیرون کشیدن) آن انتخاب می کند. برای مثال، رسم UI (user interface) مختلف بسته به سایز صفحه و رشته ها بسته به تنظیمات زبان را فراهم می کند.
بعد از اینکه منابع تان واقعی سازی شد و وجود ظاهری پیدا کرد، شما می توانید به آنها در کد، از طریق ID منبع که بوسیله ی ADT در کلاس R تولید شده، دسترسی پیدا کنید.
شما باید هر منبع را در زیرشاخه مخصوص شاخه ی res پروژه تان قرار دهید.
هرگز فایل های منابع را مستقیما در شاخه ی res ذخیره نکنید. اگر این کار را انجام دهید، یک خطای کامپایلری رخ می دهد.
در زیر تعدادی از قرارداد های نام فایل برای منابع وجود دارد که می توانید در شاخه ی values بسازید.

 arrays.xml برای منابع آرایه ها می باشد(ذخیره سازی آیتم های مشابه، مانند رشته ها یا عدد صحیح، با همدیگر).
 colors.xml برای منابعی که ارزش رنگ را تعیین می کند، می باشد ؛ از طریق کلاس R.colors در دسترس قرار می گیرد.
 dimens.xml برای منابعی که مقادیرابعاد را تعیین می کند، می باشد( برای مثال، 20px یعنی 20 پیکسل)؛ و از طریق کلاس R.dimens در دسترس قرار می گیرد.
 strings.xml برای مقادیر رشته می باشد؛ از طریق کلاس R.strings در دسترس قرار می گیرد.
 styles.xml برای منابعی است که استایل را نمایش می دهد. از طریق کلاس R.styles در دسترس قرار می گیرد. به عنوان مثال یک استایل استایل آبشاری در HTML . شما می توانید تعدادی استایل تعریف کنید و آنها را از دیگری ارث بری کنید.

سازوکار resource در اندروید خیلی قدرتمند و وسیع است و به آسانی می توان یک بخش در مورد آن توضیح داد، اما اینجا ما فقط می خواهیم فقط مطالب ابتدایی را پوشش دهیم تا شما راه بیافتید. برای دست یابی به اطلاعات بیشتر در مورد resource می توانید به بخش “Providing Resources” در Dev Guide مستندات اندروید، واقع در http://d.android.com/guide/topics/resources/providing-resources.html مراجعه کنید.

Bin ، Libs و پوشه های Referenced Libraries

اگرچه این پوشه ها در اپلیکیشن اندروید شما دیده نمی شوند، اما باید از یک جفت پوشه های اضافی اطلاع داشته باشید که یکی از این پوشه ها شاخه ی libs/ می باشد. شاخه ی libs/ شامل کتابخانه های private(اختصاصی) می باشد و که به طور پیشفرض ساخته نمی شود. اگر شما به آن احتیاج دارید، لازم است آن را با کلیک راست روی پروژه در اکسپلورر پکیج به طور دستی ایجاد کنید و پوشه را از کانتکست منو انتخاب کنید. ایکلیپس برای نام این پوشه و نام پدر این پوشه(والد یا شاخه ی قبل از آن) از شما سوال می پرسد. Hello Android را انتخاب کنید و libs را تایپ کنید و در آخر Finish را کلیک کنید.
Private(اختصاصی) چیست؟ کتابخانه های private معمولا کتابخانه های بیرونی هستند که بعضی از فانکشن ها یا توابع را برای شما به اجرا درمی آورد. یک نمونه می تواند jTwitter باشد که یک کتابخانه ی بیرونی جاوا برای API ، Twitter وجود دارد. اگر شما از jTwitter در اپلیکیشن تان استفاده کرده باشید، باید کتابخانه ی jtwitter.jar را در شاخه ی libs قرار دهید.
وقتی یک کتابخانه در شاخه ی libs قرار می گیرد، باید آن را در مسیر ساخت(build path) جاوا قرار دهید، "class path" ای که شما برای ساخت یک پروژه ی جاوا از آن استفاده کرده اید. اگر پروژه شما به کتابخانه ی اختصاصی یا بیرونی دیگری وابسته باشد، ایکلیپس باید بداند که کجا آن را بیابد و مسیر ساخت(build path) را دقیقا جایی که ایکلیپس کار می کند، تنظیم کند.
فرض کنید که شما jtwitter.jar را به شاخه ی libs اضافه کرده اید، شما می توانید به سادگی آن را با کلیک راست روی فایل jtwitter.jar و انتخاب Build Path➪Add to Build Path از کانتکست منو، به مسیر ساخت(build path) اضافه کنید.
با اضافه کردن jTwitter به مسیر ساخت شما، ممکن است ببینید که پوشه ی Referenced Libraries ایجاد شود، مانند تصویر زیر:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(8)- ساختار پروژه
ما در این آموزش(آموزش اندروید) از شاخه libs استفاده نمی کنیم. اما توسعه دهندگان که خودم هم شامل آن می شوم، عموما از کتابخانه های بیرونی در اپلیکیشن اندروید استفاده می کنند. در این آموزش، هر جایی در پروژه تان که به یک کتابخانه رجوع می شود اطلاعات مربوط به آن داده می شود.

پوشه ی مرموز gen

وقتی که شما اپلیکیشن اندروید را ایجاد می کنید، قبل از اولین عمل کامپایل، پوشه ی gen وجود نخواهدداشت. به محض اولین عمل کامپایل، ADT پوشه ی gen را می سازد و به آن مقدار دهی می کند.
پوشه ی gen شامل فایل های جاوا است که توسط ADT ایجاد شده. ADT یک فایل جاوا R.java ایجاد می کند. پوشه ی res را قبل از gen توضیح دادیم چون پوشه ی gen آیتم هایی رو در بر دارد که از شاخه ی res ایجاد می شود. بدون درک صحیح از اینکه پوشه ی res چیست و محتوای آن چیست، هیچ سرنخی از پوشه ی gen نخواهید داشت. اما چونکه شما از پوشه ی res اطلاعات دارید، به پوشه ی gen می پردازیم.
زمانیکه شما دراندروید کد جاوا می نویسید، به جایی می رسید که آیتم ها را به پوشه ی res ارجاع دهید. شما این کار را با استفاده از کلاس R انجام می دهید. فایل R.java شاخصی برای همه ی منابع مشخص شده در پوشه res است. این کلاس را به عنوان شیوه ی مختصر نویسی ارجاع منابع، استفاده کنید. به خصوص، این شیوه برای خصوصیت تکمیل کد(code-completion) در ایکلیپس، مفید می باشد زیرا شما می توانید از میان تکمیل کد، منبع مناسب را به سرعت شناسایی کنید.
پوشه ی gen در پروژه ی اندروید و نام پکیجی که داخل پوشه ی gen است، را بسط دهید. فایل R.java را با دابل کلیک کردن آن باز کنید. می توانید کلاس جاوا را ببینید که شامل کلاسهای جاوای تودرتو است. این کلاسهای جاوای تودرتو نام های یکسان دارند مانند بعضی از پوشه ی res که در قسمت قبل تعریف شده است. پایین تر از هر کدام از این زیر کلاسها، می توانید عناصری را ببینید که نام های یکسانی دارند ، مانند منابع در پوشه های res مربوطه(باستثنای پسوند فایلشان). کد های فایل R.java پروژه Hello Android باید شبیه زیر باشد:
/* AUTO-GENERATED FILE. DO NOT MODIFY.
*
* This class was automatically generated by the
* aapt tool from the resource data it found. It
* should not be modified by hand.
*/
package com.dummies.android.helloandroid;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}
در کدهای بالا 0X چه چیزی است؟ اما در مورد این نگران نباشید چون ابزار ADT این کد را برای شما ایجاد می کند. هنگامیکه منابع را اضافه می کنید و پروژه دوباره بازسازی می شود، ADT فایل R.java را دوباره تولید می کند. این فایل تولید شده ی اخیر عناصری را در بر می گیرد که به منابع اضافه شده ی اخیر رجوع می کند.
شما هرگز نباید فایل R.java را دستی تغییر دهید. اگر این کار را انجام دهید، اپلیکیشن شما نمی تواند کمپایل شود. اگر به طور تصادفی آن را تغییر دهید و نتوانید این تغییر را برگردانید(undo)، شما می توانید پوشه ی gen را پاک کنید و پروژه را build کنید. در این مرحله، ADT دوباره فایل R.java را برای شما می سازد.

نمایش فایل مانیفست یا فهرست بار اپلیکیشن

فایل مانیفست اندروید در ریشه ی(root) پروژه تان ذخیره شده و AndroidManifest.xml نامیده شده است. هر اپلیکیشن باید فایل مانیفست اندروید را در شاخه ی ریشه داشته باشد.
فایل مانیفست اپلیکیشن همه ی اطلاعات ضروری مطابق سیستم اندروید را فراهم می کند. اطلاعاتی که قبل از اینکه کد اپلیکیشن بتواند اجرا شود باید داشته باشید. فایل مانیفست اپلیکیشن شرح زیر را فراهم می کند:
 نام پکیج جاوا شما برای اپلیکیشن، که این نام، شناسه منحصربفرد برای اپلیکیشن شما در سیستم اندروید و نیز همچنین در بازار اندروید است.
 کامپوننت ها(اجزا) اپلیکیشن، مانند فعالیت ها و سرویس های پس زمینه.
 اعلان مجوزها که اپلیکیشن شما برای اجرا نیاز دارد.
 پایین ترین سطح API اندروید که اپلیکیشن نیاز دارد.
فایل مانیفست اندروید ورژن اپلیکیشن شما بیان می کند. شما باید اپلیکیشن تان را نگارش کنید. چگونگی نگارش اپلیکیشن شما خیلی شبیه به نگارش سیستم عامل اندروید است. تعیین استراتژی نگارش اپلیکیشن شما در شروع عمل توسعه مهم است. نیازمندی های نگارش این است که هر اپلیکیشن دارای یک شماره ورژن و نام ورژن باشد.

شماره ورژن(Version code)

شماره ورژن(version) یک مقدار صحیح است که ورژن کد اپلیکیشن را نسبت به ورژن های دیگر اپلیکیشن تان بیان می کند. این مقدار برای کمک به تعیین سازگاری اپلیکیشن های دیگر با اپلیکیشن شما استفاده می شود. همچنین بازار اندروید از آن به عنوان یک پایه برای شناسایی داخلی اپلیکیشن و اداره ی آپدیت استفاده می کند.
شما می توانید هر مقدار صحیح دلخواه را به شماره ورژن دهید، اما باید مطمئن باشید که انتشار پی درپی، یک شماره ورژن بزرگتر از قبلی خود دارد.
به طور نمونه، در اولین انتشار شما، شماره ی ورژن تان را 1. قرار می دهید. سپس با هر انتشار به طور یکنواخت و طبق یک ترتیب معین، این مقدار افزایش می یابد، خواه این انتشار مهم و بزرگ باشد خواه کوچک و جزئی باشد. شماره ی ورژن در اپلیکیشن برای کاربر قابل مشاهده نیست. بعد از تغییرات شما در اپلیکیشن اگر شماره ی ورژن را بروزرسانی نکنید، کاربران هرگز آپدیت اپلیکیشن را بر اساس شماره اش، بدست نمی آورند و اجرای اپلیکیشن آنها دارای باگ خواهد بود و هیچ کسی این را دوست ندارد.

نام ورژن

نام ورژن یک مقدار رشته ای است که ورژن انتشار کد اپلیکیشن که کاربر می تواند آن را مشاهده کند، را بیان می کند. مقدار یک رشته است که در زیر یک نامگذاری معمول که ورژن یک اپلیکیشن را توصیف می کند آورده شده است.

.<مرحله>.<جزئی>.<اصلی>

یک مثالی این نامگذاری: 2.1.4 و بدون قسمت آخرآن، 2.1 می باشد.
سیستم اندروید از این مقدار برای هر هدفی به غیر از فراهم کردن اپلیکیشن برای ارائه به کاربران، استفاده نمی کند.
نام ورژن ممکن است نوع دیگری از شناسه ی مستقل یا وابسته باشد. برای مثال، اپلیکیشن های صریح ، از رویه ای استفاده می کنند که به تاریخ ارتباط دارد. مانند 2010-06-28 که صراحتا یک تاریخ را نشان می دهد. شما باید طرحی داشته باشید و اطمینان داشته باشید که این طرح برای شما و کاربران شما قابل درک باشد.

مجوز ها(Permissions)

فرض کنید که اپلیکیشن شما برای بازیابی بعضی از داده ها نیاز به دسترسی به اینترنت دارد. اندروید به طور پیشفرض دسترسی به اینترنت را محدود یا ممنوع کرده است. برای اینکه اپلیکیشن شما به اینترنت دسترسی پیدا کند، باید از آن درخواست کنید.
در فایل مانیفست اپلیکیشن، باید تعیین کنید که برنامه ی شما برای کارکردن به کدام مجوز نیاز دارد. در زیر بعضی از معمولترین دسترسی ها آورده شده:
Internet (اینترنت): اپلیکیشن نیاز به اینترنت دارد.
Write External Storage (نوشتن در حافظه ی خارجی): اپلیکیشن نیاز دارد که داده را در کارت SD بنویسد.
Camera (دوربین): اپلیکیشن نیاز دارد که به دوربین دسترسی داشته باشد.
Access Fine Location (دسترسی به موقعیت مکانی): اپلیکیشن نیاز دارد تا به GPS دسترسی داشته باشد.
Read Phone State (خواندن وضعیت تلفن): اپلیکیشن نیاز دارد تا به وضعیت تلفن دسترسی داشته باشد(مانند زنگ خوردن).

نمایش فایل default.properties

فایل default.properties در اتصال ADT با ایکیپس استفاده می شود. این فایل تنظیمات پروژه از جمله build target را دربر دارد. این فایل از پروژه جدایی ناپذیر می باشد بنابراین آن را گم نکنید.
این فایل هرگز نباید به صورت دستی ویرایش شود. برای ویرایش محتویات این فایل، از ویرایشگر در ایکلیپس استفاده کنید. برای دسترسی به این ویرایشگر می توانید روی نام پروژه در اکسپلورر پکیج کلیک راست کنید و از کانتکست منوی باز شده، Properties را انتخاب کنید و سپس ویرایشگر properties(خصوصیات) باز می شود. مانند تصویر زیر:
آموزش  برنامه نویسی  برای اندروید با ایکلیپس(8)- ساختار پروژه
این ویرایشگر به شما اجازه می دهد تا با انتخاب هر گزینه در سمت چپ، خصوصیات پروژه را تغییر دهید. برای مثال می توانید خاصیت اندروید را انتخاب کنید و مسیر(path) SDK اندروید را تغییر دهید.
این بخش را در اینجا به پایان می رسانیم.
استفاده از مطالب این مقاله با ذکر منبع راسخون بلامانع می باشد.



 

 



مقالات مرتبط
ارسال نظر
با تشکر، نظر شما پس از بررسی و تایید در سایت قرار خواهد گرفت.
متاسفانه در برقراری ارتباط خطایی رخ داده. لطفاً دوباره تلاش کنید.