android diaries

از حالا یه چند تا درسی رو راجع به view ها یا به طور کلی المان های ظاهری برنامه ها اختصاص میدم. 
کلا view  یه ناحیه مستطیلی روی صفحه رو در بر میگیره و مسئول اینه اونو رسم کنه و event هاش رو هندل کنه. کلاس View، کلاس پایه برای widget هاست و همه چی مثل button ها و ... از این کلاس ارث میبرن. یه viewgroup هم داریم که بعدا راجع بهشون صحبت میکنیم.
همه اینا برای ساختن ui برنامه یا ظاهرش هستن.
برای ساختن و استفاده از view ها اول تعریفشون میکنیم. بعدا ویژگی هاشون رو توی layout تعریف میکنیم و بعد توی کد هندل میکنیم رفتارشون رو . البته همه اینا مستقل از xml هم میشه یعنی توی زمان runtime.

1- textview
اولین و ساده ترین و پرکاربردترین ویدجت، Textview هست که واسه نمایش دادن اطلاعات متنیه.قابلیت ویرایش رو به کاربر نمیده و فقط متن رو نمایش میده. ویژگی یا attribute های زیادی داره. واسه آشنا شدن با attr هاش بهتره به صفحه android developer رجوع بشه.

2-button
3-EditText
4-ImageView
5-seekbar
6-fab

به عنوان تمرین ویوی checkbox و radiobutton  , siwtch , toggle button و spinner رو دربیارین  و پروژه ای که تعریف میکنیم بعدا
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ بهمن ۹۵ ، ۱۶:۱۹
نویسنده آماتور

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

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

minimum sdk : این عدد نشون میده که پروژه ما از چه ورژنی از اندروید به بالا میتونه اجرا بشه. مثلا از ورژن 15 تا ورژن 23 یعنی از اندروید 4 تا اندروید 6 اپ من میتونه ران بشه. بعد اگه برنامه ام رو روی اندروید 2 بخام نصب کنم اجازه نمیده و میگه ورژنش به دستگاه شما نمیخوره. ولی فکر کنم روی اندروید 7 اجرا میشه
package : این پکیج قسمت بندی اصلی کدهای جاوا رو نشون میده و به منظم شدن کار خیلی کمک میکنه. این قضیه توی پروژه های بزرگ خیلی مهمه. نکته ای که اینجا هست اینه این پکیج بندی به صورت فیزیکی هست . یعنی واقعا توی workspace به ازای لایه های پکیج های ما فولدر ایجاد میشه.
قسمت های مختلف یه اکتیویتی



قسمتای اصلی یه پروژه اندروید توی ide ی اندروید استادیو به ترتیب ایناست :
1-java
2-res
3-manifest
4-gradle

البته یه نکته ای که خیلی خیلی مهمه اینه این ترتیب بستگی به بیلد سیستم داره یعنی توی اندروید استادیو که به سیستم gradle کار میکنه، ساختار یه پروژه به این شکله. ولی در اکلیپس که ant داره ساختار به یه شکل دیگه ایه. 

یه چیز دیگه هم هست اینه که برای اینکه پروژه رو به این صورت ببینیم، باید مد نمایش رو از اون منوی کشویی بالا روی اندروید انتخاب کنیم و اگه مدل های دیگه اش رو برگزینیم :) نمایش های مختلفی رو بهمون نشون میده

1-جاوا
اصلی ترین قسمت کار کدهای جاواست این قسمت در فولدر java قرار میگیره. پکیج ها هم در همون جا هست

2-res
تو این قسمت ، فایلهای مربوط به طراحی قرار میگیره. layout ها، عکس ها، اندازه و متنها. هرکدوم از اینها در یه فولدر و فایل جدا قرار میگیرن
در برنامه نویسی اندروید، ترجیح اینه که هر چیزی در فایل res مخصوص به خودش قرار بگیره. مثلا بهتره همه اندازه ها در فایل dimen.xml باشه و همه متن ها در string.xml اینکار هم باعث مرتب شدن کار میشه و هم اینکه پشتیبانی از سایز و کلا شرایط مختلف مثل زبان های مختلف رو امکان پذیر میکنه.

3-manifest
در این فایل که پسوند xml داره ویژگی های کلی اپ قرار میگیره. قبلا که تمرکز گوگل روی اکلیپس و سیستم ant بود فایل منیفست مهم تر بود و ورژن و پکیج و ... هم توی این فایل قرار میگرفت ولی با اومدن سیستم گریدل یه سری از مسئولیتاش رفت پیش فایلای گریدل. 
توی این فایل معرفی کامپوننت های برنامه و ویژگی هاشون  و اجازه ها قرار میگیره و یه سری چیزای دیگه مثل intent قرار میگیره

4- geadle
 این قضیه گریدل خیلی مفصله. کلا بیلد سیستم ، یعنی سیستمی که فایلای برنامه نویسی رو کامپایل میکنه و تبدیل به بایت کد و در نهایت فایل اجرایی میکنه. اول سیستم ant بود در اکلیپس و الان شده gradle که دستوراتش رو با groovy مینویسن و کلی قضیه مثل تولید flavor های مختلف داره که اینجا جاش نیست. ببینین هر اپ ممکنه از چندین ماژول ساخته شده باشه. منظورم از ماژول قسمتاییه جدا از هم هستن . شاید خوب نتونم بگم ولی مثلا اپ روت ما یه ماژوله ، بعد اگه از یه کتابخونه اپن سورس توی برنامه استفاده کنیم اون میشه یه ماژول دیگه. به ازای هر ماژول یه فایل gradle وجود داره داخل این فایل کارای مهمی انجام میشه. 1- تعریف پکیج برنامه 2- تعریف ورژن ها 3- تعریف ریپوزیتوری و کتابخونه ها 4- بعدها اگه خواستیم progaurd 
یه فایل گریدل دیگه هم هست که مال کل برنامه یعنی همه ماژول هاست که ورژن گریدل رو داره و یه سری اطلاعات کلی تر. 

تا اینجای کار ساختار یه اپ خالی رو تا یه حدی آشنا شدیم. 
به عنوان تمرین یکی قضیه تصاویر در اندروید فولدرهای mipmap و drawble و انواعش و دیگه پسوند های کلی فولدرهای res رو سرچ کنین که قضیه اش چیه
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ بهمن ۹۵ ، ۱۶:۱۰
نویسنده آماتور
لایه دوم در معماری اندروید ، لایه framework هست که رابط بین اپلیکیشن و سخت افزاره . شامل یه سری کامپوننت هست. که واحدهای اصلی اپلیکیشن های اندروید هستن. یعنی یه برنامه نویس اندروید در 80 درصد مواقع داره با اینا کار میکنه. هر موقع که بخایم با اینا کار کنیم باید توی فایل androidmanifest.xml تعریفشون کنیم. 
این کامپوننت ها اینان :
1-activity
2-service
3-broadcast receiver
4-content provider

1- activity
 تمام چیزی هست که ما در صفحه نمایش میبینیم. یعنی قسمت های مختلف یه برنامه رو داخل یه اکتیویتی پیاده سازی میکنیم. یعنی یه صفحه از اپلیکیشن رو میگیم اکتیویتی. مثلا باتن ها ، تکس باکس ها و ... داخل یه اکتیویتی قرار میگیرن. در واقع می تونیم بگیم که اکتیوتی معادل form در سی شارپ هست. اکتیویتی از دو قسمت مهم تشکیل شده. یکی layout یا ظاهر برنامه که یه فایل .xml هست و یکی دیگه هم یه فایل .java هست که کدنویسی ها داخل اون انجام میشه. اینکه مثلا وقتی این باتن رو میزنیم چه اتفاقی بیفته. 
اکتیویتی ها یه مبحث مهم دارن به اسم lifecycle  یا چرخه حیات که خیلی مهمه. و بعدا بهش می پردازم. 
یه مبحث مهم دیگه هم متدهای override هست که اونا هم مقاله جدا میخواد. 
نحوه تعریف یه کلاس به عنوان یه اکتیویتی ، همون مبحث ارث بری هست که توی جاوا یا سی پلاس میخوندیم با استفاده از کلمه کلیدی extends به این صورت :
گفتم که برای اینکه از یه اکتیویتی استفاده کنیم باید اونو داخل فایل منیفست تعریف کنیم . یعنی اگه برنامه ما 5 تا اکتیویتی داره باید 5 بار هم تعریف بشه با نام خودش و ادرسش هم پکیجش هست . به این صورت :


2- service
سرویس ها یه کامپوننت هستن که برای انجام عملیات در پشت صحنه استفاده میشن. مثلا وقتی که میخوایم برنامه برامون یه دیتایی دانلود کنه (این یه نکته داراه ، بعدا میگم) یا مثلا یه موزیکی پخش کنه در حالیکه کاربر داره با بقیه بخش های برنامه هم کار کنه باید از سرویس استفاده کنیم. 
یکی دیگه از کاربردهای سرویس ها انجام عملیاتی هست که طولانی مدته و یه کم سنگین. یعنی اگه اون کار رو به یه اکتیویتی بسپریم ، یعنی لی اوت داشته باشه ، گوشی هنگ میکنه. 
در واقع سرویس ها در کنار اکتیویتی ها وظیفه اجرای کاری رو به عهده میگیرن.
گفتم که سرویس ها در پشت صحنه و خارج از دید کاربرد اجرا میشن یعنی layout  ندارن 
تعریف یه کلاس به عنوان سرویس :
و در فایل منیفست :

3-contentProvider
توی جلسه قبل گفتم که در لینوکس و اندروید هیچ اپلیکیشنی به داده های اپلیکیشن دیگه دسترسی نداره. ولی اینطوری که هیچ ارتباطی نباشه هم که نمیشه... بنابراین راه ارتباطی بین اپلیکیشن های مختلف contentProvider هست
من سایت های فارسی و انگلیسی دیگه ای خوندم که ببینم اطلاعات دیگه ای راجع به contentProvvider دارن یا نه اما دیدم که همشون یه حرف رو هی دارن تکرار میکنن
و 

4-broadcast receiver
بعضی وقتا توی برنامه ما لازم داریم که نسبت به یه عمل خاصی ، یه عکس العملی نشون بدیم که خیلی روند خاص و مشخصی نداره. مثلا هر موقع کاربر تاریخ دستگاهشو رو عوض کرد، ما هم یه حرکتی بزنیم . یا مثلا اگه ما توی برنامه یه کاری کردیم به بقیه برنامه ها هم بگیم. اصلا معنی کلمه اش هم پراکندن و دریافت هست. 
و 

تمامی این کلاس ها یه سری متد دارن که از طریق اونها وظایفشون رو انجام میدن . هرکدوم چندین جلسه توضیح دارن ولی اینجا ما یه معرفی کلی میکنم و بعدا مفصل بهشون میپردازم
۰ نظر موافقین ۰ مخالفین ۰ ۱۵ بهمن ۹۵ ، ۲۰:۳۰
نویسنده آماتور
گفتم که اندروید بر پایه نسخه اصلاح شده لینوکس هستش بنابراین از قواعد لینوکس پیروی میکنه. یعنی هر اپ اندروید که میزنیم میاد در ساختار لینوکس میشینه.
توی حوزه اندروید باید با معماری اندروید ، یعنی لایه های مختلف سیستم عامل آشنا باشیم. این به ما یه نگاه کلان میده . خیلی به درد برنامه نویسی نمیخوره. فقط باعث میشه تسلط داشته باشیم که کجای کار هستیم :)


لایه اول که لایه application  هست ، همون اپلیکیشن هایی هست که ماها می نویسیم و توسط end user ها استفاده میشه. 
لایه دوم شامل یه سری کامپوننت ها و امکانات اپلیکیشن هست که رابط بین اپلیکیشن و سخت افزاره. با c و c++ زده شده و از تیکه تیکه اش برای کنترل سخت افزار استفاده میشه . 
لایه سوم کتابخونه های اندروید هست 
یه قسمتی که خیلی مهمه برنامه نویسای اندروید بدونن اون قسمت زرد رنگه . داخل اون میبینیم که نوشته dalvik virtual machine. این ماشین مجازی اندرویده. میدونیم که خیلی از مزایای جاوا که خیلی بهش پز میده همین قضیه ماشین مجازیه. اینکه اگه این ماشین مجازی روی هر سیستم عاملی سوار بشه میتونه کدهای جاوا رو ران کنه. دالویک همون jvm هست که بهینه شده تا روی موبایل و ... سوار بشه و کار کنه. 
فایل اجرایی این میشه یه فایل اجرایی با پسوند .dex  که وقتی هم apk رو مهندسی معکوس میکنیم و میخوایم کدهاش رو ببینیم ، همین فایل رو تبدیل میکنیم.  این فایل یه فایل بسیار فشرده و بهینه ای هست و میاد روی ماشین مجازی اجرا میشه و به بایت کد تبدیل میشه و سیستم اینا رو اجرا میکنه. 
پایین ترین سطح هم کرنل لینوکس هست. 
 یه نکته دیگه ای که هست اینه که ساختار لینوکس اینجوریه که هر اپلیکیشنی که روی اون قرار میگیره ، دارای یه user ای هست که ادمین اون اپلیکیشن هست. هیچ ادمین دیگه ای دسترسی به ادمین اپ دیگه رو نداره. بخاطر همینه که لینوکس و به تبع اون اندروید امنیت خیلی بالایی داره 
ادمینی که به همه user ها دسترسی داره ادمین root هست. وقتی میگیم یکی رفته گوشیش رو روت کرده یعنی رفته همه ادمین ها رو کرده ادمین root . یعنی همه به همه دسترسی دارن.
توی درس بعدی راجع به مهمترین کامپوننت های لایه دوم صحبت میکنیم
۰ نظر موافقین ۰ مخالفین ۰ ۱۵ بهمن ۹۵ ، ۱۸:۳۹
نویسنده آماتور
اندروید ، یه سیستم عامل بر مبنای نسخه اصلاح شده لینوکسه. بیشترین کاربردش برای موبایل و تبلته. ولی برای دستگاه های مختلفی مثل ساعت تلویزیون هم هست. 
گوگل اندروید رو به صورت open source و رایگان عرضه کرده. بخاطر همین وقتی خیلی از شرکتایی که موبایل و تبلت تولید میکنند به سلیقه خودشون اندروید رو تغییر میدن و چیزایی رو بهش اضافه میکنن.
این ویژگی باعث شده که خیلیا جذبش بشن. هر کسی از ده کوره های هندوستان تا برنامه نویسای حرفه ای امریکا و کره بتونه راحت یاد بگیره. 
و خیلی از شرکتا که میخوان وارد عرصه تلفن هوشمند بشه فوری میره سراغ اندروید . و اگه دقت کنین تولید کننده های ios و windows phone انحصاری ان ولی اندروید چندیییین شرکت از شرق و غرب عالمن.
البته این یه کم بدی هم حساب میشه. چون دستگاه های پشتیبانی کننده اندروید خیلی متنوع ان و تولید برنامه رو یه کم سخن میکنند و برنامه نویسا واقعا باید یه کم سختی بکشن چون نگران ظاهر برنامه اشون توی دستگاه های مختلف باشن ولی یه برنامه نویس ios اصلا این نکرانی رو نداره چون دستگاه هاش محدودن.
یه ویژگی دیگه اندروید وجود نسخه های مختلفه. گوگل موقع نام گذاری نسخه های مختلف از اسم شیرینیا به ترتیب حروف الفبا استفاده میکنه. از حرف a که نسخه 1 هست تا الان که نسخه 7 هست به اسم nougha .
هم عرض با نسخه های مختلف اندروید یه سری بسته های برنامه نویسی هم ارائه میده که به ازای هر نسخه ممکنه چندین آپدیت بیاد یعنی هم عرض نیستن (API)
۰ نظر موافقین ۰ مخالفین ۰ ۰۸ بهمن ۹۵ ، ۱۷:۰۲
نویسنده آماتور