Sunday, May 18, 2014

Android ဖြဲ႕စည္းပုုံအေသးစိတ္



Android ကိုုဘယ္လိုု ဖြဲ ့စည္းထားပါသလဲ?

ဒီေမးခြန္းဟာ သိပ္ကို ေမးသင့္ေမးအပ္တဲ့ ေမးခြန္းတခုျဖစ္သလိုု သိထားသင့္တဲ့အခ်က္ထဲမွာလဲပါ၀င္ပါတယ္။ ဘာလိုု ့လဲဆိုုေတာ့ ကိုယ္က Android developer တစ္ေယာက္ ျဖစ္ဖိုု ့ စိတ္ကူးရွိေနျပီဆိုရင္ေတာ့ ကိုယ္စီးမယ့္ျမင္းဟာ အထီးလား အမလားဆိုတာေတာ့ သိထားသင့္တယ္ မဟုတ္လား။ Android Application ကိုုေရးသားမယ့္ developer တစ္ေယာက္ဟာ ကိုယ္ေရးသားမယ့္ Operating System ဟာ ဘယ္လို ဖြဲ ့စည္းတည္ေဆာက္ထားသလဲ system ရဲ ့အခင္းအက်င္း ေတြကို ေကာင္းစြာ နားလည္ သေဘာေပါက္ ထားမွသာလွ်င္ ကိုယ္ေရးသားမည့္ application ေတြဟာ ၄င္း OS ေပၚမွာ ေကာင္းစြာ အလုပ္လုပ္မွာပါ။

Android developer တစ္ေယာက္အတြက္ တကယ့္ကို အေရးပါဆုုံး အခ်က္ကေတာ့ API (Application Programming Interface) Level ျဖစ္ပါတယ္။ ဘာလိုု ့လဲဆိုုေတာ့ ကိုယ့္ application ဟာ ဘယ္ ကိရိယာေတြ (devices) ဘယ္ OS version မွာ အလုပ္ လုပ္မည္ မလုပ္မည္ ဆိုတဲ့ ကိစၥကို သတ္မွတ္ နုုိင္စြမ္းရွိတဲ့ အဆင့္ျဖစ္လိုု ့ပါပဲ။ ဥပမာ တခ်ဳိ႕ Application ေတြဟာ graphic ဘယ္ေလာက္ရွိမွ CPU ကဘယ္ေလာက္ျဖစ္မွ OS version က ဘယ္ေလာက္မွသုုံးလိုု ့ရမယ္ မရဘူး စတာေတြကို ဒီအဆင့္မွာ သတ္မွတ္တာ ျဖစ္တဲ့အတြက္ေၾကာင့္ပါ။

Android ဟာ Linux Kernel ကိုု အေျခခံေရးသားထားတဲ့ OS (Operating System) တခုုျဖစ္တယ္ဆိုုတာ ျပီးေတာ့ Open Source ျဖစ္တယ္ဆိုတာကိုု ျပီးခဲ့တဲ့ အပိုုင္းမွာ တင္ျပခဲ့ပါတယ္။ ဒါဆိုု ဘာအေၾကာင္း ေတြေၾကာင့္မ်ား Android က Linux အေပၚ အေျခခံရသလဲဆိုုတဲ့ ေမးခြန္း တခုု ထြက္လာပါတယ္။ Linux ဟာလဲ Free and Open Source ျဖစ္ပါတယ္။ ျပီးေတာ့ Linux က ေပါ့ပါးတယ္။ လုုံျခဳံမွဳရွိတယ္။ Features ေတြစုုံလင္မွဳရွိတယ္။

Linux ဟာ ကြန္ပ်ဳတာ hardware ေတာ္ေတာ္မ်ားမ်ားမွာ ( mobile ဖုုန္းေတြ၊ tablet computers ေတြ network routers, televisions , vedio game consoles, desktop computer, mainframes နဲ ့super computer ေတြအထိ) အလြယ္တကူ ေပါင္းစပ္ အလုပ္ လုပ္နုုိင္စြမ္း ရွိပါတယ္။ ဒီလို hardware အေတာ္မ်ားမ်ားမွာ အလြယ္တကူ ေပါင္းစပ္ အလုုပ္ လုုပ္နုိင္စြမ္းရွိတဲ့ OS တခုုကိုု Android က အေျခခံျပီး ရယူသုုံးစြဲလုုိက္ျခင္းဟာ hardware မ်ားကိုု အတိုုင္းအတာ တခုုအထိခ်ဳံ ့နုုိင္ခဲ့သလိုု hardware နွင့္ ၄င္းရဲ႕ features အေတာ္ မ်ားမ်ားကိုလည္း ထည့္သြင္းစဥ္းစားဖိုု ့မလိုုအပ္ေတာ့ပါဘူး။ အားလုုံး သိျပီးတဲ့အတုုိင္း Linux ရဲ ့Low Level အပိုုင္း အေတာ္အမ်ားမ်ားကိုု ေပါ့ပါးတဲ့ C programming language code ေတြနဲ ့ေရးသားထားတဲ့အတြက္ Android ရဲ႕ hardware device ေတြနဲ ့android application တိုု ့ဟာ လြယ္ကူ အဆင္ေျပစြာ ေပါင္းစပ္ အလုပ္လုပ္နုုိင္ ေနေတာ့တာပါပဲျဖစ္ပါတယ္။ ဒါေၾကာင့္ Android ဟာလဲ ေပါ့ပါးသြက္လပ္တဲ့ mobile OS တခုုအျဖစ္ ရပ္တည္လာနုုိင္ေတာ့တာပါပဲျဖစ္ပါတယ္။

ေနာက္ျပီး Linux ဟာ လုုံျခဳံေရးေကာင္းမြန္တဲ့ Operating System ဆိုတာ ဘယ္သူမွ မျငင္းနုုိင္ပါဘူး။ သူ ျဖတ္သန္း လာခဲ့တဲ့ သမိုုင္းကာလ ေတြကိုုၾကည့္ရင္ သူယခုု ရပ္တည္ေနတဲ့ အေျခအေနေတြကိုုၾကည့္ရင္ ဘယ္ေလာက္ထိ လုုံျခံဳမွုု ေပးနုုိင္သလဲဆိုုတာ သိနုုိင္ပါတယ္။ ျပီးတာ့ application တစ္ခုကိုတစ္ခုု တည္မွီျပီး အလုပ္ လုပ္ျခင္း မရွိတာေၾကာင့္ application တစ္ခုုကေန application တစ္ခုုသိုု ့ထိုုးေဖာက္ျပီးေတာ့ တိုုက္ခိုုက္လာနုုိင္ေသာ လုုံျခံဳေရးဆုုိင္ရာ ျပႆနာမ်ားလည္း အေတာ့ကိုု ကင္းရွင္းသြားပါတယ္။ 

Adroid ဟာ ဘာေၾကာင့္ ဒီလိုု လုုံျခဳံေရးဆုုိင္ရာ အားသာခ်က္ မ်ာစြာရွိေနတဲ့ Linux Kernel ကိုုအေျခခံရယူသုုံးစြဲ ရသလဲဆိုတာ ေမးခြန္းေတာင္ ေမးေနစရာမလိုုေအာင္ပါပဲ။ ၂၀၁၀ စက္တင္ဘာေလာက္မွာ Linux Kernel developer တဦးျဖစ္တဲ့ Rafael J.Wysocki က mainline Linux wakeup events Framework အတြက္ patch တခုုကိုု ထည့္သြင္းခဲ့ပါတယ္။ Android devices မ်ားရဲ ့drivers ေတြအတြက္ေတာ့ သိပ္ေကာင္းတဲ့ patch တခုုပဲေလ။ ၂၀၁၁ ဒီဇင္ဘာလ ေလာက္မွာေတာ့ Android ရဲ ့MainLining Project ကိုုစတင္ခဲ့ျပီး ၄င္းတိုု ့ရဲ ့ ရည္ရြယ္ခ်က္ကေတာ့ Adriod ရဲ ့drivers မ်ား Patch မ်ား နဲ ့Features မ်ားကိုု Linux Kernel ထဲကိုု Linux version 3.3 မွစျပီး ထည့္သြင္းဖိုု ့ရည္ရြယ္ခဲ့တာျဖစ္ပါတယ္။

Android မွာ Linux ကဲ့သိုု ့ပင္ Mobile devices (ေရြ႕လားနုုိင္ေသာ ၾကိဳးမဲ့ကိရိယာမ်ား) မ်ားအတြက္

မွတ္ဥာဏ္ ပိုုင္းဆုုိင္ရာ ထိန္းခ်ဳပ္စီမံနုုိင္ျခင္း (Memory Management) : မလိုုအပ္ေသာအခ်ိန္တြင္ မလိုုအပ္ေသာ လုုပ္ငန္းေဆာင္တာမ်ားအားရွင္းလင္းျခင္း၊ အျမဲတမ္းသုုံးေလ့ရွိေသာ applicaiton မ်ားလုုပ္ငန္းေဆာင္တာမ်ားကိုု မွတ္သားထားျပီး ရွာေဖြလုုပ္ေဆာင္တဲ့အခါမွာ လွ်င္ျမန္စြာ ဦးစားေပးေဖာ္ျပေပးနုုိင္ျခင္း စတဲ့လုပ္ငန္းေဆာင္တာေတြဟာ မွတ္ဥာဏ္ပိုင္းဆုုင္ရာ ထိန္းခ်ဳပ္စီမံနုုိင္ျခင္းပါပဲ။

ဘထၳရီမွ စြမ္းအင္ရယူသုုံးစြဲမွဳကိုု ထိန္းခ်ဳပ္စီမံနိုုင္ျခင္း (Power Management) : မလိုုအပ္တဲ့လုုပ္ငန္းေဆာင္တာမ်ားအား memory မွာ ဖယ္ရွားျခင္းဟာလဲ memory သုုံးစြဲမွဳ နည္းသြားတဲ့အတြက္ စြမ္းအင္ပိုမို သုုံးစြဲလာႏိုင္ျခင္း screen resolution ကိုုထိန္းခ်ဳပ္စီမံႏိုင္ျခင္းေၾကာင့္ စြမ္းအင္သုုံးစြဲႏိုင္ခ်ိန္ ပိုမိုေကာင္းမြန္လာျခင္း စသည့္ ဘထၳရီမွ စြမ္းအင္သုုံးစြဲမႈ ၾကာခ်ိန္ကိုုျမင့္တင္ႏိုင္ဖို႔ ေရးဆြဲးထားသည့္ Management tool တခုပါပဲ။

ကြန္ယက္ခ်ိတ္ဆက္သုုံးစြဲနုုိင္တဲ့ networking စတဲ့စြမ္းအင္ျမင့္ Features မ်ားလဲပါ၀င္ပါတယ္။ Android ဟာ GSM/EDGE, CDMA, IDEN, EV-DO, UMTS, Bluetooth, Wifi, LTE နွင့္ Wimax အစရွိတဲ့ ကြန္ယက္ခ်ိတ္ဆက္မႈ နည္းပညာမ်ားကိုု အေထာက္အပံ့ေပးပါတယ္။

အျခား စြမ္းအင္ျမင့္ Features ေတြျဖစ္တဲ့ Handset Layouts ( graphic ရုပ္ပိုင္းဆိုင္မ်ားအဆင္ေျပေစရန္)၊ Storage (data ေတြသုုံးဖိုု ့အတြက္ ေပါ့ပါးတဲ့ Relational database အမ်ဳိးစား ျဖစ္တဲ့ SQLite မ်ားသုုံးစြဲထားျခင္း)။ Multiple Language Support, Web Browser, JavaSupport , Multitasking,Multi touch, Screen capture ,Additional Hardware support, Media/Streaming Media support, Video calling စတဲ့ Features မ်ားကိုုရရွိနုုိင္ပါတယ္။

တကယ္ေတာ့ Android OS ကိုု အလႊာ အထပ္ထပ္နဲ့ ေပါင္းစပ္ဖြဲ ့စည္းထားတာျဖစ္ပါတယ္။ ျပီးေတာ့ ၄င္းအလႊာ တခု နွင့္ တခုဟာလည္း သည္းျခားစြာ ကြဲျပား ရပ္တည္ေနျခင္းမ်ဳိး မဟုုတ္ဘဲ တခု ႏွင့္ တခုေပါင္းစပ္ အလုုပ္ လုုပ္ၾကတဲ့ ပုံစံမ်ဳိးျဖစ္ပါတယ္။ ဒီေအာက္က ပုုံေလးကေတာ့ Android Operating System ကို ဘယ္လိုုအလႊာ အဆင့္ဆင့္နဲ ့ ဖြဲ ့စည္းထားသလဲ ဆိုုတာကိုုျပသတဲ့ပုံ ( Android Stack) ပါပဲ။


Android ဟာ ၄င္းရဲ ့ တကယ့္ core system services ေတြျဖစ္တဲ့ လုုံျခဳံမွဳ (security)၊ မွတ္ဥာဏ္ပိုင္းဆိုင္ရာ ထိမ္းခ်ဳပ္ စီမံခန္ ့ခြဲမႈ (Memory management)၊ စြမ္းအင္သုုံးစြဲမွဳဆိုုင္ရာ စီမံခန္ ့ခြဲမွဳ (Power Management)၊ လုုပ္ငန္းေဆာင္တာ စီမံခန္ ့ခြဲမႈ (process management)၊ ကြန္ယက္ခ်ိတ္ဆက္မွုုဆုdင္ရာ (nework stack)၊ hardware မ်ား ႏိုးၾကြားလုပ္ေဆာင္နုုိ္င္ေစမယ့္ (driver model) စသည္တိုု ့အတြက္ Linux Kernel 2.6 ကိုစတင္ျပီး ရယူသုုံးစြဲခဲ့ပါတယ္။ Apache 2.0 license ေအာက္မွာ ျဖစ္ပါတယ္။ အထက္မွာေဖာ္ျပခဲ့သလိုုပဲ linux ရဲ ့low level အပိုုင္းအေတာ္မ်ားမ်ားဟာ C code ေတြျဖစ္တာေၾကာင့္ hardware မ်ားကိုု ေကာင္းစြားသိရွိျပီး လြယ္ကူေပါ့ပါးစြာ ေပါင္းစပ္အလုပ္လုပ္နုုိင္ပါတယ္။

Android အတြက္ applications မ်ား၊ လိုုအပ္တဲ့ services မ်ား ဖန္တီးေရးသား တဲ့အခါမွာ ၄င္း apps မ်ားနွင့္ services မ်ားဟာ Andorid OS ရဲ ့Application Layer မွာ အလုုပ္ လုုပ္ပါတယ္။ Android သာမန္အသုုံးျပဳသူ(end user)ဟာ ဒီ Application Layer ေပၚမွ apps မ်ား၊ services မ်ားကိုုသာ အသုုံးျပဳမွာပါ။ ေအာက္က layers ေတြကိုု သူတိုု ့သတိထားမိမွာမဟုုတ္ပါဘူး။

ဥပမာ က်ေနာ္တိုု ့ Contact Book application တခုုေရးသားတယ္ဆိုုပါေတာ့ဗ်ာ။ အသုုံးျပဳသူက contact အသစ္ဖန္တီးျခင္း၊ ဖ်က္ျခင္း၊ ျပင္ဆင္ျခင္း၊ ရွာေဖြျခင္းစတာေတြပဲ သူတိုု ့အသုုံးျပဳမွာပါ။ ဒီေနရာမွာ သိရမွာက Andorid Application layers ေပၚက apps & services မ်ားဟာ ေအာက္က layers ေတြနဲ ့ဆက္ႏြယ္ အလုုပ္လုုပ္ေဆာင္တယ္ဆိုုတာကိုု သိထားရမွာပါ။ အထက္ေဖာ္ျပပါ contact app ေရးသားတဲ့အခါ ေဒတာေတြသိမ္းဖိုု ့အတြက္ SQLite လိုု libraries ေတြ စတဲ့ libraries ေတြအသုုံးျပဳရမွာပါ။ ဆိုုလိုုခ်င္တာက applcation layer မွာေရးသားမယ္ applications ေတြဟာ Native Libraries ေတြကို အသုုံးျပဳေရးသားတယ္။ ၄င္းတိုု ့လိုုအပ္တဲ့ layers ေတြနဲ ့ခ်ိတ္ဆက္အလုုပ္လုုပ္တယ္ဆိုတာကိုသိေစခ်င္တာပါ။ 

၄င္း Native Libraries ေတြဟာ C/C++ လိုု programming နဲ ့ေရးသားထားျပီး open source ျဖစ္တဲ့အတြက္ မည္သူမဆိုု သိရွိနုုိင္ေလ့လာနုုိင္တဲ့အျပင္ ရယူသုုံးစြဲျပင္ဆင္နုုိင္ခြင့္ရွိပါတယ္။ ဒီအေၾကာင္းေတြကို အရင္အပိုင္းမွာေျပာၾကားခဲ့ျပီးျဖစ္ပါတယ္။

SQLite :application အားလုုံးအတြက္ ေပါ့ပါးျပီး စြမ္းအင္ျမင့္မားတဲ့ Relational Database Engine ရရွိနုုိင္ပါတယ္။ Features ေတာ္ေတာ္မ်ားမ်ား စုံလင္စြာ ပါရွိတဲ့ SQL Database အမ်ိဳးအစားပါ။

Surface Manager
WebKit- modern web browser engine တမ်ဳိးပါ။ Safari ၊ Chrome ႏွင့္ အျခား browser မ်ားတြင္သုုံးထားေသာ web rendering engine မ်ဳိးျဖစ္ပါတယ္။
Open GL -3D graphic libraries မ်ားပါ။ Open GL ES 1.0 APIs ကိုုအေျခခံထားတာပါ။

FreeType-bitmap and vector font rendering
Surface Manager- Application ေပါင္းစုုံက ၂ ဖက္ျမင္ ၃ ဖက္ျမင္ အလႊာမ်ားအဆင္ေျပေျပ ေပါင္းစပ္ အလုုပ္လုုပ္နုုိင္ဖိုု ့၊ သက္ဆုုိင္ရာ subsystem ေတြအထိ display access ကို စီမံခန္ ့ခြဲနုုိင္တဲ့ libraries ျဖစ္သည္။
Media libraries မ်ားမွာလဲ လူသုုံးမ်ားတဲ့ ရုုပ္ပုံ၊ အသံ၊ ရုုပ္ရွင္ ဖိုုင္ေတြရဲ ့format ေတြျဖစ္တဲ့ ( MPEG4, 3GP, MP3, JPG, PNG စတဲ့ ဖိုုင္အမ်ဳိးစားမ်ား ေထာင့္ပံ့တဲ့ libraries မ်ားျဖစ္သည္။

SSL -Secure Socket Layer လုုံျခဳံမႈဆုိင္ရာ libraries မ်ား ျဖစ္သည္။
Libc - ဆိုုတာကေတာ့ System C libraries မ်ားျဖစ္ပါတယ္။

အထက္ေဖာ္ျပပါ libraries မ်ားကိုု နဂိုုအရွိတုုိင္း တုုိက္ရိုုက္အသုုံးခ်နုုိင္ပါတယ္။ ဒါေပမယ့္တခ်ဳိ ့ mobile ကိ၇ိယာ ထုုတ္လုုပ္သူမ်ားက မိမိတိုု ့ထုုတ္လုုပ္မယ့္ hardware မ်ားနွင့္ကိုုက္ညီေစရန္ စံထား C Library မ်ားကိုု ျပန္လည္ေရးသားျပီး အသုုံးျပဳေသာ မူကြဲ တစ္မ်ဳိး အျဖစ္ Bionic ကိုု ထည့္သြင္း သုုံးစြဲပါတယ္။ Bionic ကိုု သုုံးစြဲရတာ အေၾကာင္း ၂ ရပ္ေၾကာင့္ပါ။

နည္းပညာအပိုု္င္းအရ moblie devices မ်ားကို သယ္ယူရအဆင္ေျပေစရန္ ေသးငယ္ေအာင္ ထုုတ္လုုပ္ရပါတယ္။ mobile devices မ်ားဟာလည္း battery မွစြမ္းအင္ကိုု ရယူသုုံးစြဲေနရတဲ့အခ်ိန္ battery မ်ားရဲ ့စြမ္းအင္သိုုေလာင္နုုိင္မွုု ကိုလည္း ခ်က္ျခင္းၾကီး တိုုးတက္ေအာင္မလုပ္နုုိင္ေသးတဲ့အခ်ိန္မ်ဳိးမွာ အတက္နုုိင္ဆုုံး အဆင္ေျပေစရန္ ၄င္းတိုု ့အတြက္ ရည္ရြယ္ျပီး Bionic ကိုုထည့္သြင္းထားပါတယ္။
ခြင့္ျပဳမွုု - ၄င္းကိုု ျပဳျပင္ယူကာသုုံးလိုသူမ်ားအတြက္ အဆင္ေျပေသာ license မ်ဳိးရွိျခင္း တိုု ့ေၾကာင့္ Bionic ကိုုထည့္ထသြင္းထားပါတယ္။

Android Run time ကိုေတာ့ JVM နဲ ့ အနည္းငယ္ ႏႈိင္းယွဥ္တင္ျပလိုတာေၾကာင့္ ေနာက္တပိုင္းမွ ေရးသားပါေတာ့မယ္။

credit to>>> ရဲထက္ Post By Zuu

Pages (31)1234 Next