برنامه نویسی اندروید - دانشگاه صنعتی قم

این وبلاگ کانال ارتباطی با دانشجویان درس«برنامه نویسی موبایل» دانشگاه صنعتی قم می باشد.

برنامه نویسی اندروید - دانشگاه صنعتی قم

این وبلاگ کانال ارتباطی با دانشجویان درس«برنامه نویسی موبایل» دانشگاه صنعتی قم می باشد.

محتویات این وبلاگ با هدف آموزش اندروید در دوره درسی "برنامه نویسی موبایل" در دانشگاه صنعتی قم توسط اینجانب گردآوری شده است.
تعداد زیادی از مطالب ترجمه شده در این وبلاگ توسط دانشجویان دانشگاه صنعتی قم به عنوان پروژه های این درس ترجمه شده است.
در صورتی که تصمیم به تماس با من دارید، می توانید از طریق آدرس ایمیل qut دات android در جی میل دات کام با من تماس بگیرید.
-------------------
اگر بتوانم به شما کمکی در زمینه برنامه نویسی اندروید بکنم، خوشحال خواهم شد با این حال اگر پرسشی را ارسال کردید و بنده نیز به دلیل مشکلات و مشغله نتوانستم پاسخگو باشم، پوزش بنده را پیشاپیش پذیرا باشید.
-------------------
چون افراد زیادی از من درخواست می کنند تا برنامه نویسان اندروید به خصوص در شهر قم را به آنها معرفی کنند، اگر تمایل دارید رزومه و یا مشخصات خود را برایم ارسال کنید تا در صورت وجود درخواستهایی از این دست به شما اطلاع دهم.
از نظر من محدویتی به شهر قم وجود ندارد، لذا اگر برنامه نویس اندروید در شهرهایی دیگر هستید و یا به دنبال نیروی برنامه نویس اندروید هستید با من در تماس باشید، شاید بتوانم در این زمینه به شما کمکی بکنم :)
ناگفته نماند از آنجایی که در فضای مجازی من شناختی از هیچ شخص یا شرکتی ندارم، اگر شخصی به دنبال نیروی کار باشد، به افرادی که با مشخصات درخواستی ایشان تطابق داشته باشند، اطلاع خواهم داد و توصیه می شود برنامه نویسان محترم نیز قبل از شروع به همکاری، ملاحظات لازم در این زمینه را به عمل آورند چون من نیز شناختی از طرف مقابل ندارم.

طبقه بندی موضوعی

11- مانیفست برنامه (Manifest)

جمعه, ۲ خرداد ۱۳۹۳، ۱۰:۵۰ ب.ظ

مترجم: مهدی شاهواروقی - میثم محمدی

آدرس مطلب اصلی: developer.android.com/guide/topics/manifest/manifest-intro.html


هر برنامه باید یک فایل AndroidManifest.xml (دقیقا با این نام) در دایرکتوری root داشته باشد. فایل Manifest اطلاعات ضروری در مورد برنامه های شما را به سیستم/ اطلاعات آندروید ارائه می کند، که باید قبل از اینکه بتواند هر کدی را اجرا کند آنها را در اختیار داشته باشد. در میان چیزهای دیگر، manifest به شرح زیر عمل می کند:
• یک package جاوا را به برنامه معرفی می کند. نام package به عنوان یک شناسه منحصر به فرد برای برنامه عمل می کند.
• اجزای برنامه - فعالیت ها، خدمات، broadcast receivers و تامین کنندگان محتوا که برنامه از آنها تشکیل شده است. کلاس هایی را که هر یک از components را پیاده سازی می کند و توانایی های خود را منتشر می کند را نام گذاری می کند (به عنوان مثال، پیام ها Intent که می توانند مدیریت کنند). این اظهارات به سیستم عامل Android اجازه می دهد بداند که چه componentهایی هستند و تحت چه شرایطی می توانند راه اندازی شوند.
• مشخص می کند که چه فرآیندهایی اجزای برنامه را میزبانی می کنند.
• مشخص می کند که برنامه چه مجوزهایی باید به منظور دسترسی به بخش های محافظت شده از API و با برنامه های کاربردی دیگر ارتباط برقرار کرده اند، داشته باشد.
• همچنین مجوزهایی که دیگران باید به منظور تعامل با اجزای برنامه را داشته باشند را مشخص می کند. کلاس های کاربردی که پروفایل و دیگر اطلاعات برنامه در حال اجرا را لیست می کند. این اظهارات در manifest ارائه شده است و مادام که برنامه در حال توسعه و آزمایش قرار دارد آنها قبل از اینکه برنامه منتشر شود حذف می شوند.
• سطح حداقل API های آندروید که برنامه نیاز دارد را مشخص می کند.
• فهرستی از کتابخانه هایی که برنامه باید در مقابل با آنها در ارتباط باشد را لیست می کند.
ساختار فایل manifest
نمودار زیر ساختار کلی فایل manifest و هر عنصری که می تواند در آن باشد را نشان می دهد. هر عنصر، همراه با تمام ویژگی های آن به طور کامل در یک فایل جداگانه ثبت شده است. برای مشاهده اطلاعات دقیق در مورد هر عنصر، بر روی نام عنصر در نمودار، در لیست بر اساس حروف الفبا از عناصر نمودار و یا در هر اشاره ای دیگر به نام عنصر که به شرح زیر است، کلیک کنید.

< ?xml version="1.0" encoding="utf-8"?>
< manifest>
< uses-permission /> < permission /> < permission-tree /> < permission-group /> < instrumentation /> < uses-sdk /> < uses-configuration /> < uses-feature /> < supports-screens /> < compatible-screens /> < supports-gl-texture /> < application> < activity> < intent-filter> < action /> < category /> < data /> < /intent-filter> < meta-data /> < /activity> < activity-alias> < intent-filter> . . . < /intent-filter> < meta-data /> < /activity-alias> < service> < intent-filter> . . . < /intent-filter> < meta-data/> < /service> < receiver> < intent-filter> . . . < /intent-filter> < meta-data /> < /receiver> < provider> < grant-uri-permission /> < meta-data /> < path-permission /> < /provider> < uses-library /> < /application> < /manifest>

نام تمام عناصری که می توانند در فایل manifest ظاهر شوند در زیر به ترتیب حروف الفبا ذکر شده است. این عناصر مجاز می باشند. شما می توانید عناصر و صفات خود را اضافه کنید.


< action>
< activity>
< activity-alias>
< application>
< category>
< data>
< grant-uri-permission>
< instrumentation>
< intent-filter>
< manifest>
< meta-data>
< permission>
< permission-group>
< permission-tree>
< provider>
< receiver>
< service>
< supports-screens>
< uses-configuration>
< uses-feature>
< uses-library>
< uses-permission>
< uses-sdk>

قرارداد های فایل
برخی از قراردادها و قوانین به طور کلی به تمام عناصر و ویژگی ها در manifest اعمال می شود:
عناصر
فقط < manifest> و عناصر < application> مورد نیاز است، هر یک از آنها باید وجود داشته باشد و تنها یک بار می تواند رخ دهد. بسیاری از موارد دیگر می تواند چند بار در همه اتفاق بیفتد و یا اصلا اتفاق نیفتد - اگر چه حداقل برخی از آنها باید برای به انجام رساندن هر چیز معنی داری در manifest حضور داشته باشند.
اگر یک عنصر شامل هیچ چیزی نباشد، حاوی عناصر دیگر است. همه مقادیر از طریق صفات اما نه به عنوان داده کاراکتر درون یک عنصر تنظیم شده اند.
عناصر در همان سطح به طور کلی منظم نیستند. به عنوان مثال، < activity>، < provider>، و عناصر < service> را می توانkn در بین هر رشته جای گیرند. (عنصر < activity-alias> یک استثنا برای این قاعده است: باید < activity> که یک نام مستعار برای آن است).
خواص
در یک معنای رسمی، تمام ویژگی ها اختیاری می باشند. با این حال، برخی باید برای یک عنصر برای به انجام رساندن هدف خود مشخص شده باشند. از اسناد و مدارک به عنوان یک راهنما استفاده کنید. برای ویژگی های واقعا اختیاری ، یک مقدار پیش فرض ذکر کنید یا آنچه که در غیاب مشخصات اتفاق می افتد را بیان کنید.
به استثنای برخی از ویژگی های عنصر root < manifest> ، تمام نامها و ویژگی ها با یک پیشوند android آغاز می شوند برای مثال android :alwaysRetainTaskState. از آنجا که پیشوند جهانی است، اسناد و مدارک به طور کلی هنگام اشاره به ویژگی با نام آن را حذف می کند.
مشخص کردن نام کلاس
بسیاری از عناصر با اشیاء جاوا مطابقت دارند، از جمله عناصری برای برنامه های کاربردی خود (عنصر < application>) و component اصلی - فعالیت (< activity>)، خدمات (< service>)، broadcast receivers (< receiver>)، و ارائه دهندگان محتوا (< provider>).
اگر یک زیر کلاس تعریف کنید، تقریبا همیشه برای کلاس جزء (فعالیت، خدمات، BroadcastReceiver، و ContentProvider)، زیر گروه از طریق یک ویژگی نام مشخص خواهد شد. این نام باید شامل package کامل باشد. به عنوان مثال، یک زیر گروه از خدمات ممکن است به شرح زیر اعلام شود:

< manifest . . . >
< application . . . >
< serviceandroid:name="com.example.project.SecretService" . . . >
. . . < /service>
. . . < /application>
< /manifest>

با این حال، به عنوان یک شرح مختصر، در صورتی که اولین کاراکتر از رشته یک دوره باشد، از این رشته ها به نام package برنامه (به عنوان ویژگی package عنصر مشخص شده است) اضافه خواهد شد. وظایف زیر مانند همانی است که در بالا ذکر شد:

< manifest package="com.example.project" . . . >
< application . . . >
< service android:name=".SecretService" . . . >
. . . < /service>
. . . < /application>
< /manifest>

هنگامی که یک جزء شروع به کار می کند، android یک نمونه به نام زیر کلاس ایجاد می کند.
مقادیر چندگانه
چنانچه بیش از یک مقدار مشخص شود، این عنصر به جای لیست کردن چندین مقدار در یک عنصر تقریبا همیشه تکرار می شود. به عنوان مثال، یک intent فیلتر می تواند چندین عملیات را لیست کند:

< intent-filter . . . >
< action android:name="android.intent.action.EDIT" />
< action android:name="android.intent.action.INSERT" />
< action android:name="android.intent.action.DELETE" />
. . . < /intent-filter>

مقادیر منابع
برخی از ویژگی ها مقادیری هستند که می توانند به کاربران نمایش داده شوند - به عنوان مثال، یک برچسب و یک آیکون برای یک فعالیت. مقادیر این ویژگی ها باید قرار گرفته شده باشد و در نتیجه از یک منبع یا موضوع نشات گرفته باشد. مقدار منابع در قالب زیر بیان می شود،
@[package:]type:name
که در آن چنانچه منابع در package مشابه از برنامه باشد، می توان حذف کرد. نوع، نوع منابع است - که منابع خاص را شناسایی می کند .برای مثال:

< activity android:icon="@drawable/smallPic" . . . >

مقادیر یکی از تم ها به شیوه ای مشابه بیان می شود، اما از مقدار اولیه "؟" به جای '@' استفاده می شود:
?[package:]type:name
مقادیر رشته ای
که در آن یک مقدار ویژگی یک رشته است، دو backslashes ('\ \') باید مورد استفاده قرار گیرد برای فرار از کارکترهایی نظیر "\n " برای رفتن به خط جدید با "uxxxx" برای یونیکد.
ویژگی های فایل
دربخش های بعدی توضیح برخی از ویژگی های نرم افزار در فایل manifest منعکس شده است.
فیلتر intent
component اصلی یک برنامه کاربردی (فعالیت خود، خدمات، و broadcast receivers) با intent فعال می شود. هدف یک package اطلاعات (یک شی intent) توصیف یک عمل مورد نظر است- از جمله اطلاعاتی که روی آن اعمال می شود، دسته components ای که باید عملیات را انجام دهد و سایر دستورالعمل مربوطه. android یک جزء مناسب را برای پاسخ دادن به intent قرار می دهد، راه اندازی یک نمونه جدید از مولفه اگر مورد نیاز باشد، و شی intent آنرا پردازش می کند.
componentها توانایی های خود را اعلام می کنند- انواع مفاهیمی که آنها می توانند از طریق فیلترهای intent به آنها پاسخ دهند. از آنجا که سیستم android باید یاد بگیرد که یک جز کدام intent ها را قبل از آن را راه اندازی جزء، فیلترهای intent میتواند مدیریت کند، فیلتر intent در android به عنوان عناصر مشخص شده است. یک جزء ممکن است هر تعداد فیلتر که هر یک قابلیت های مختلف را توصیف می کنند را داشته باشد.
intent که نام آن صراحتا جزء هدف نامیده می شود، جزء را فعال می کند. فیلتر نقشی بازی نمی کند. اما یک intent که یک هدف را با نام آن مشخص نمی کند، می تواند یک component را فقط در صورتی که از یکی از فیلتر های component عبور کند، فعال کند. برای اطلاع از اینکه اشیاء intent چگونه در برابر فیلترهای intent آزمایش می شوند، یک سند جداگانه، intentها و فیلترهای intent را ببینید.
Icon ها و label ها
تعدادی از عناصر، آیکون و برچسب ویژگی برای یک آیکون کوچک و یک برچسب متنی است که می تواند به کاربران نمایش داده شود. برخی نیز یک توصیف توضیحات برای توضیح طولانی تر است که این نیز می توانید بر روی صفحه نمایش نشان داده شود. به عنوان مثال، عنصر هر سه این ویژگی ها را دارد به طوری که زمانی که ازکاربر پرسیده می شود که در مورد کسب اجازه دسترسی به برنامه ای که درخواست کرده را دارد، یک آیکون به نمایندگی از کسب اجازه، به نام اجازه، و شرح آنچه شامل آن است می تواند به کاربر ارائه شود.
در هر مورد، آیکون و برچسب در یک عنصر حاوی تبدیل به آیکون پیش فرض و برچسب تنظیمات برای همه زیرعناصر تنظیم می شود. بنابراین، آیکون و برچسب مجموعه ای در عنصر است آیکون و label به طور پیش فرض برای هر یک از componentهای برنامه است.
به طور مشابه، آیکون و label برای یک component تعیین شده است. به عنوان مثال، یک عنصر تنظیمات پیش فرض برای هر یک از عناصر اجزا می باشد. چنانچه یک عنصر مجموعه label را تنظیم کند، اما یک فعالیت و فیلتر intent آن این کار را انجام ندهد، با label درخواست شده به عنوان label برای هر دو فعالیت و فیلتر intent رفتار می شود.
آیکون و label که برای یک فیلتر intent تنظیم شده برای نشان دادن یک component، هر زمان که component به کاربر به عنوان انجام یک تابع تبلیغ توسط یک فیلتر استفاده می شود. به عنوان مثال، یک فیلتر با "android.intent.action.MAIN" و "android.intent.category.LAUNCHER" تنظیمات تبلیغ یک فعالیت هنگامی که یک برنامه آغاز می شود- که باید در راه انداز برنامه نمایش داده شود. آیکون و label در مجموعه ای از فیلتر که نمایش داده شده در lancher تنظیم می شوند.
Permission ها
permission محدود کردن دسترسی به بخشی از کد یا داده ها بر روی دستگاه است. محدودیت های اعمال شده برای محافظت از داده ها که می تواند مورد سوء استفاده تحریفی قرار گیرد و یا بخاطر تجربه کاربر صدمه ببیند.
هر مجوز توسط یک label منحصر به فرد شناخته می شود. اغلب label ها نشان دهنده عملی است که محدود شده است. به عنوان مثال، در اینجا برخی از مجوز ها تعریف شده توسط android عبارتند از:
android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER
هر ویژگی حداکثر می تواند با یک مجوز محافظت می شود.
چنانچه برنامه نیاز به دسترسی به ویژگی های حفاظت شده توسط permission دارد باید باید اعلام کند که مستلزم اجازه یک عنصر در manifest است. سپس، هنگامی که برنامه بر روی دستگاه نصب شد، نصب کننده تعیین می کند که آیا اجازه درخواست چک کردن اعتبار که گواهی برنامه امضا شده و در برخی موارد به درخواست کاربر است را صادر کند یا خیر. اگر اجازه داده صادر شود، برنامه قادر به استفاده از ویژگی های محافظت شده است. اگر نه، تلاش خود را برای دسترسی به ویژگی های آن به سادگی و بدون هر گونه اطلاع رسانی به کاربر شکست میخورد.
برنامه همچنین می تواند componentهای خاص خود را (فعالیت ها، خدمات، broadcast receivers و تامین کنندگان محتوا) با permission محافظت می کند. این می تواند هر یک از مجوز های تعریف شده توسط آندروید (inandroid.Manifest.permission ذکر شده است) و یا اعلام شده توسط برنامه های کاربردی دیگر باشد. و یا می تواند خودش آن را تعریف کند.مجوز جدید با عنصر اعلام می گردد. به عنوان مثال، یک فعالیت را می توان به شرح زیر محافظت کرد:

< manifest . . . >
< permission android:name="com.example.project.DEBIT_ACCT" . . . />
< uses-permission android:name="com.example.project.DEBIT_ACCT" />
. . . < application . . .>
< activity android:name="com.example.project.FreneticActivity"
android:permission="com.example.project.DEBIT_ACCT"
. . . >
. . . < /activity>
< /application>
< /manifest>

توجه داشته باشید که در این مثال، اجازه DEBIT_ACCT تنها با عنصر < permission> اعلام نشده، بلکه استفاده از آن با عنصر < uses-permission> نیز درخواست شده است. استفاده از آن باید در جهت دیگر componentهای این برنامه برای راه اندازی فعالیت های محافظت درخواست، حتی اگر حفاظت توسط خود برنامه تحمیل شده باشد.
اگر، در همین مثال، ویژگی permission برای ویژگی permission در جای دیگر مشخص شود(مانند asandroid.permission.CALL_EMERGENCY_NUMBERS) لازم نیست که دوباره آنرا با عنصر permission مشخص کنیم. با این حال، درخواست استفاده از آن را با < uses-permission> ضروری گشته است.
عنصر < permission-tree> یک فضای نامی برای یک گروه از مجوز ها که در کد تعریف شده است را مشخص می کند. و < permission-group> یک label برای یک مجموعه از permissionها (که هر دو در manifest با عناصر < permission> مشخص شده اند و آنهایی که در جای دیگر اعلام شده است) را تعیین می کند. این فقط چگونگی گره بندی مجوز ها هنگامی که به کاربر ارائه می شوند را تحت تاثیر قرار می دهد. عنصر < permission-group> مشخص نمی کند که کدام permission متعلق به گروه است؛ این فقط نام گروه را می دهد. Permission در گروه با اختصاص نام گروه به ویژگی permissionGroup عنصر < permission> قرار می گیرد.
کتابخانه ها
هر برنامه در برابر کتابخانه پیش فرض اندروید می باشد که شامل package های اساسی برای ساختن برنامه ها می باشد(با کلاس های عادی مثل فعالیت، سرویس، intent ،button، Service, Intent, View, Button, Application, ContentProvider, و از این قبیل).
هر چند بعضی از package ها در کنار کتابخانه خودشان قرار دارند. چنانچه برنامه شما از کدی از هر کدام از این کتابخانه ها استفاده کند، باید به طور صریح از آن برای ارتباط در مقابل انها پرسیده شود. Manifest باید شامل عنصر < uses-library> جداگانه برای نامگذاری هریک از کتابخانه های آن باشد. ( نام کتابخانه می تواند در اسناد package یافت شود).

  • وهاب صمدی بخارایی

نظرات  (۱)

سلام ممنون خوب بود، فقط می بخشید بنظرم تلفظ صحیح اندروید هست نه آندروید
پاسخ:
بله فرمایش شما درست هست. انشاءالله سر یک فرصت خوب این مطالب به روز و تصحیح خواهند شد.

ارسال نظر

کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی