مقالات تخصصی برنامه نویسی اندروید

اموزش برنامه نویسی اندروید

مقالات تخصصی برنامه نویسی اندروید

اموزش برنامه نویسی اندروید

  • ۰
  • ۰

در فایل های Apk تمامی فایل ها و مشخصات دارای کد هستند، این کدها با ساختار هگزادسیمال کد بندی شده اند ( ساختار 16 تایی).

 

برای توضیح سئوال بالا یه مثال میزنم:

فرض کنید می خواهید یک فایل گرافیک png را به فایل apk اضافه کنید.

ابتدا باید فایل png مورد نظر را برای رزولوشن صفحه ی موبایل یا وسیله ی مورد نظرتان طراحی کنید.

 

 

HDPI

MDPI

X-HDPI

LDPI

سپس فایل مورد نظر را درون فولدر drawable-xxxx کپی بزنید.

xxxx - مشخصات dpi وسیله ی مورد نظر شماست.

 

پس از کپی فایل درون فولدر drawable ، باید آنرا در ساختار کلی فایل Apk معرفی کنید. به این منظور باید آنرا درون فایل public.xml معرفی کنید.

 

 

xxxxx.apk\res\values\public.xml

فایل public.xml نشان دهنده ی تمام عناصر درون Apk میباشد، که هر یک دارای کد مخصوصی میباشد. در سیستم عامل اندروید، فایل ها بوسیله ی کدهای معرفی شده در public.xml ردیابی میشوند، نام ها تاثیری ندارند.

 

در فایل public.xml، معمولا ساختار زیر تعریف میشوند:

چندتا نمونه را ببینید: فایل Contacts.apk

 

 

 

<public type="attr" name="mimeType" id="0x7f010000" />

 

<public type="drawable" name="btn_create" id="0x7f02000c" />

 

<public type="layout" name="act_display_groups" id="0x7f030000" />

 

<public type="anim" name="quickcontact" id="0x7f040000" />

<public type="xml" name="searchable" id="0x7f050000" />

<public type="array" name="dialog_items" id="0x7f060000" />

<public type="id" name="left" id="0x7f070000" />

<public type="color" name="textColorIconOverlay" id="0x7f080000" />

<public type="dimen" name="linked_contact_icon_size" id="0x7f090000" />

<public type="string" name="config_import_vcard_type" id="0x7f0b0000" />

<public type="bool" name="config_allow_import_from_sdcard" id="0x7f0a0000" />

<public type="integer" name="config_export_file_min_index" id="0x7f0c0000" />

<public type="plurals" name="groupDescrip" id="0x7f0d0000" />

<public type="style" name="DialtactsTheme" id="0x7f0e0000" />

<public type="menu" name="edit" id="0x7f0f0000" />در کدهای بالا، تمامی نوع های فایلی که برای Contacts.apk مشخص شده بود رو گذاشتم، تا به بررسی اونا بپردازیم.

 

همونطور که میبینیم نوع فایل ها با public type معرفی میشوند.

که از نوشته های بالا میبینیم که نوع فایل هایی که در این نرم افزار استفاده شده است به شرح زیر است:

 

attr : بیشتر برای کد بندی پارامترهای معرفی شده بکار میرود. مشخصات این فایل ها از آدرس زیر قابل ردیابی است:

 

\res\values\attrs.xmldrawable : برای کدبندی فایل های گرافیکی بکار میرود. فایل های گرافیکی درون فولدر های

drawable و مقادیر تعریف شده در فایل

\res\values\drawables.xml قرار دارند.

 

array : مثل مقادیر Attr اطلاع زیادی ازش ندارم. آدرس فایل های تعریف شده درون فایل زیر میباشند.

 

\res\values\arrays.xmlid :برای کد بندی مشخصات بکار رفته در نرم افزار استفاده میشوند.

 

color: مربوط به رنگ های تعریف شده در فایل زیر میباشند:

 

\res\values\colors.xmldimen : برای کد بندی اندازه هایی که در فایل زیر تعریف شده اند بکار میرود.

 

\res\values\dimens.xmllayout : برای کدبندی لایه ها و ساختار اینترفیس نرم افزار بکار میرود. برای معرفی فایل های درون فولدرهای Layout بکار میرود.

فولدر های Layout میتوانند بسته به اندازه های رزولوشن از یک تا چندین فولدر باشند. بستگی به قابلیت های نرم افزار دارد. ترتیب قرار گیری فایل های گرافیکی نرم افزار در این فولدر ها مشخص میشود.

مثلا برای استتس بار ، ترتیب قرار گیری Toggles .

 

\res\layoutanim : کد بندی انیمیشن هایی که برای نرم افزار تعریف میشوند (بیشتر برای ترانزیشن های صفحات بکار میرود.) فایل های تعریف شده درون فولدر anim هستند.

 

 

xml : فایل های xml که درون فولدر xml تعریف میشوند. فایل ها در فولدر xml هستند.

 

string : برای کد بندی استرینگ ها بکار میرود، استرینگ چیست؟

استرینگ ها برای تعریف نام ها بیشتر کاربرد دارند، مثلا نام نرم افزار، نام منو ها، نام دکمه ها و هر متغییر دیگه ای که همراه با نام باشد، شما هر نوشته و یا متنی را که در نرم افزار میبینید در فایل استرینگ تعریف میشود.

 

استرینگ ها در فایل زیر نوشته میشوند.

 

res/values/strings.xmlدر این مورد بیشتر توضیح خواهم داد.

 

bool: برای کد بندی bool های تعریف شده در نرم افزار بکار میرود، شما میتوانید لیست bool ها را از فایل زیر ببینید:

 

res/values/bools.xmlinteger : برای تعریف مقادیر و داده های تعریف شده در فایل های xml بکار میرود.

لیست اینتیجر ها را از فایل زیر میتوانید ببینید:

 

res/values/integers.xmlplurals : برای کد بندی پلورلز بکار میرود، اطلاع دقیق ندارم. لیست پلورلز در فایل زیر است:

 

res/values/plurals.xmlstyle : برای کد بندی استایل های طراحی شده (تم) در نرم افزار بکار میرود.

تنظیمات استایل ها در فایل زیر گنجانده شده است:

 

res/values/styles.xml--------------------------------------------------

فایل ها به چه ترتیبی کد بندی میشوند؟

همونطور هم که در اول این تاپیک گفتم، فایل ها به ترتیب هگزادسیمال کدبندی میشوند:

 

هگزادسیمال چیست؟

کد بندی 16 تایی است، که به ترتیب از حروف زیر تشکیل میشود:

 

 

0 >1 >2 > 3> 4> 5> 6> 7> 8> 9> a> b> c >d >e >fترتیب کد بندی در public.xml چگونه هست؟

 

به id های تعریف شده در هر public type دقت کنید:

 

<public type="attr" name="mimeType" id="0x7f010000" />مقدار id = 0x7f010000 تعریف شده برای نوع attr میباشد.

 

معمولا چهار یا پنج نوشته ی اول، ثابت هستند.

نوع public type از حرف ششم شروع شده و برای public type بعدی به مقدار بالاتر ارتقا مییابد.

 

به حروف ششم پابلیک تایپ های تعریف شده دقت کنید:

 

 

<public type="attr" name="mimeType" id="0x7f010000" />

<public type="drawable" name="btn_create" id="0x7f020000" />

<public type="layout" name="act_display_groups" id="0x7f030000" />

<public type="anim" name="quickcontact" id="0x7f040000" />

<public type="xml" name="searchable" id="0x7f050000" />

<public type="array" name="dialog_items" id="0x7f060000" />

<public type="id" name="left" id="0x7f070000" />

<public type="color" name="textColorIconOverlay" id="0x7f080000" />

<public type="dimen" name="linked_contact_icon_size" id="0x7f090000" />

<public type="bool" name="config_allow_import_from_sdcard" id="0x7f0a0000" />

<public type="string" name="config_import_vcard_type" id="0x7f0b0000" />

<public type="integer" name="config_export_file_min_index" id="0x7f0c0000" />

<public type="plurals" name="groupDescrip" id="0x7f0d0000" />

<public type="style" name="DialtactsTheme" id="0x7f0e0000" />

<public type="menu" name="edit" id="0x7f0f0000" />و ......

 

با معرفی هر گونه type جدید، باید مقدار فوق را یک درجه بالاتر تعریف کنیم.

 

 

تمامی فایل ها از 0000 شروع میشوند و تا آخرین مقدار همان TYPE فایل ادامه میابند.

 

حالا این شرایط تعریف نوع PUBLIC TYPE بود، حالا در اینجا نحوه ی اضافه کردن فایل های دیگر از یک نوع خاص public type را یاد میگیریم:

 

 

بالفرض ما میخواهیم ، 3 تا فایل جدید به drawable ها اضافه کنیم:

3 تا فایل اضافه شونده باید به آخرین مقدار تعریف شده در drawable ها اضافه شود.

 

در اینجا فرض میکنیم، که آخرین فایل تعریف شده با همان id اولیه است.

 

برای مثال میخواهیم 3 فایل جدید به نام های زیر رو که برای رزولوشن hdpi ساخته ایم را به public.xml اضافه کنیم:

 

 

amestris_01.png

amestris_02.png

amestris_03.png

میدانیم که id تعریف شده برای drawables مقدار زیر است:

 

<public type="drawable" name="btn_create" id="0x7f020000" />برای افزودن فایل های بعدی به طریق زیر عمل میکنیم:

 

 

<public type="drawable" name="btn_create" id="0x7f020000" />

<public type="drawable" name="amestris_01" id="0x7f020001" />

<public type="drawable" name="amestris_02" id="0x7f020002" />

<public type="drawable" name="amestris_02" id="0x7f020003" />همین روند ادامه خواهد داشت.....

 

حالا بالفرض میخواهیم ، یک استرینگ جدید تعریف کینم:

 

برای اینکار ابتدا فایل strings.xml را باز میکنیم، و سپس استرینگ جدیدی را به همان ساختاری که تعریف شده را تعریف میکنیم:

 

بالفرض میخواهیم برای string با نام amestris عبارت Amestris Team را اضافه کنیم.

 

در فایل strings.xml باز شده، مقدار زیر را اضافه میکنیم:

 

 

<string name="amestris">Amestris Team</string>

این عبارت نشان میدهد که هر جا string به نام amestris تعریف شود، عبارت Amestris Team نشان داده خواهد شد.

 

حالا باید این استرینگ تعریف شده را به public.xml اضفه کنیم.

به این منظور فایل public.xml را باز میکنیم و در قسمت strings اینگونه عمل میکنیم:

 

میدانیم که آی دی استرینگ ها اینگونه هست:

 

<public type="string" name="config_import_vcard_type" id="0x7f0b0000" />حالا ما استرینگ آمستریس را اضافه میکنیم:

 

 

<public type="string" name="config_import_vcard_type" id="0x7f0b0000" />

<public type="string" name="amestris" id="0x7f0b0001" />فایل را ذخیره میکنیم.

 

 

 

تیم آمستریس

mplove

03-02-2012, 09:14

سلام.ممنون از اموزش های بسیار خوبتون.

اینجا (http://forum.mobilestan.net/showpost.php?p=2636045&postcount=90)رو نگاه کنید من خیلی ساده تونستم ایکون این برنامه ها رو به تم خودم اضافه کنم.

اول برنامه ها رو دیکامپایل کردم بعد اسم پکیجشون رو نگاه کردم بعد تو xml ها یه فایلی همنام همون اسم پکیج درست کردم بعد محتویاتش رو مثل برنامه های دیگه کردم فقط اسم برنامه مربوط رو معرفی کردم بعد کامپایل کردم اینجوریapk manager تو public یه I'd واسه برنامه درست می کنه.امیدوارم کمک کوچکی کرده باشه

اینجا (http://forum.mobilestan.net/showpost.php?p=2636939&postcount=91)رو هم نگاه کنید چرا با این کار مشکل بعضی از تم های سیانوژن برطرف می شه؟و چجوری می شه هم پیش نمایش داشت و هم تم بتونه انتخاب بشه؟:ax:

M_J_Nazari

03-02-2012, 14:49

سلام.ممنون از اموزش های بسیار خوبتون.

اینجا (http://forum.mobilestan.net/showpost.php?p=2636045&postcount=90)رو نگاه کنید من خیلی ساده تونستم ایکون این برنامه ها رو به تم خودم اضافه کنم.

اول برنامه ها رو دیکامپایل کردم بعد اسم پکیجشون رو نگاه کردم بعد تو xml ها یه فایلی همنام همون اسم پکیج درست کردم بعد محتویاتش رو مثل برنامه های دیگه کردم فقط اسم برنامه مربوط رو معرفی کردم بعد کامپایل کردم اینجوریapk manager تو public یه I'd واسه برنامه درست می کنه.امیدوارم کمک کوچکی کرده باشه

اینجا (http://forum.mobilestan.net/showpost.php?p=2636939&postcount=91)رو هم نگاه کنید چرا با این کار مشکل بعضی از تم های سیانوژن برطرف می شه؟و چجوری می شه هم پیش نمایش داشت و هم تم بتونه انتخاب بشه؟:ax:

 

سلام

ساختار Apkmanager خیلی متفاوت هست، توی Apkmanager شما هر فایلی رو که اضافه کنید، نرم افزار بصورت اتوماتیک اونو به public.xml اضافه میکنه.

 

توی آموزش های با apkmanager ، قابلیت هاش رو به طور کامل توضیح میدم.

ولی شما برای api های بالاتر از 10 دیگه نمیتونید از Apkmanager استفاده کنید، مگه اینکه فایل apktools آپدیت بشه.

 

 

شما در دیکامپایل با Apktools باید ساختار Api level رو معرفی کنید.

 

 

برای جواب سئوالتون، هم باید گفت که بخاطر اینکه احتمالا تم هایی که استفاده کردید مربوط به نسخه های قدیمی بوده، باید چک کنید که برای کدوم نسخه sdk و api طراحی شده.

 

اون رفع باگ فقط اصلاح آدرس هست نه چیز دیگه ای.

 

در مورد پیش نمایش اطلاعی ندارم ، کلا با بیس های سیانوژن حال نمیکنم.

 

ای کاش سئوالت رو توی بخش پرسش و پاسخ میپرسیدی. چون اینجا جاش نبود.

 

 

با تشکر

 

 

 

--ویرایش:

برای رفع مشکل نشون دادن تم ، میتونی تم هایی که درست هستند رو با این نسخه ای که شما داری چک کنی، ببینی کدوم خاصیت و مقدار تعریف نشده و یا فرق داره!

M_J_Nazari

03-02-2012, 16:42

فرض میکنیم آی دی public type برای drawables اولیه این مقدار هست

id="0x7f010000

 

برای تعریف های آی دی های بعدی از این public type داریم:

 

id="0x7f010001

id="0x7f010002

id="0x7f010003

id="0x7f010004

id="0x7f010005

id="0x7f010006

id="0x7f010007

id="0x7f010008

id="0x7f010009

id="0x7f01000a

id="0x7f01000b

id="0x7f01000c

id="0x7f01000d

id="0x7f01000e

id="0x7f01000f

id="0x7f010010

id="0x7f010011

id="0x7f010012

id="0x7f010013

id="0x7f010014

id="0x7f010015

.

.

id="0x7f01001e

id="0x7f01001f

id="0x7f010020

id="0x7f010021

id="0x7f010022

.

.

id="0x7f01002e

id="0x7f01002f

id="0x7f010030

id="0x7f010031

.

.

id="0x7f01003f.

id="0x7f010040

.

.

id="0x7f01004f

id="0x7f010050

.

id="0x7f01005f

.

.

.

id="0x7f0100ff

id="0x7f010100

id="0x7f010101

id="0x7f010102

id="0x7f010103

.

.

.

id="0x7f010fff

id="0x7f011000

..

 

...

.....

 

به همین روال تکرار خواهد شد.

  • ۹۹/۰۳/۰۵
  • vahid hasani

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

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