Friday, February 17

Knowledge of Android 3

ယခုုအပိုုင္းမွာေတာ့ က်ေနာ္ Android Run Time မွာပါ၀င္တဲ့ Dalvik Virtual Machine ရဲ ့ အလုုပ္လုုပ္ပုံကိုု အနည္းငယ္တင္ျပေဆြးေႏြးလိုုပါတယ္။


Dalvik VM ဆိုုတာဘာလဲ?
Dalvik VM ဆိုုတာ ၂၀၀၅ ခုုနွစ္ေလာက္မွာ Android mobile ကိရိယာမ်ားအတြက္ အထူးသီးသန္ ့ဒီဇိုုင္းထုုတ္ျပီး Google မွ Engineer ျဖစ္သူ Dan Bornstein ဦးေဆာင္ေသာ အဖြဲ ့ က တည္ေဆာက္ထားတဲ့ Virtual Machine ျဖစ္ပါတယ္။


Java Virtual Machine ( JVM )
ဒီေန ရာမွာ က်ေနာ္ Java Virtual Machine ကိုု Android mobile devices မ်ားအတြက္ သီးသန္ ့အထူးထုုတ္လုုပ္ထားတဲ့ထုုတ္လုုပ္ထား Dalvik Virtual Machine နွင့္ အနည္းငယ္ နွဳိင္းယွဥ္ တင္ျပလိုုတာေၾကာင့္ JVM ကိုု ဦးစြာ ရွင္းလင္းတင္ျပပါရေစ။
ေအာက္က ပုုံကိုု တခ်က္ၾကည့္ေပးပါ။




သင္ၾကိဳက္နွစ္သက္ရာText Editor (ဥပမာ -Notepad လိုုမ်ဳိး ေရးသားျပင္ဆင္နုုိင္တဲ့ ပရိုုဂရမ္တစ္မ်ဳိး) မွာ က်ေနာ္တိုု ့ Java Program တခုုကိုု ေ၇းသားနုုိင္ပါတယ္။

example HelloWorld java program

public class HelloWorld{
public static void main (String[] args){
System.out.println(“Hello World”);
}
}

က်ေနာ္တိုု ့ ဒီဥပမာ Java Program ေလးကိုုကိုု Text Editor တခုုခုုမွာေရးသားလိုုက္ပါတယ္။ ျပီးေတာ့ က်ေနာ္တိုု ့ class name နဲ ့နာမည္တူေအာင္ ေပးျပီး classname.java (HelloWorld.java) ဆိုုျပီး သိမ္းလိုုက္ပါတယ္။ ဒါကိုု က်ေနာ္တိုု ့က source code လိုု ့ ေခၚပါတယ္။ ဒီ source code file မွာ ျပင္ဆင္ခြင့္ေရးသားခြင့္ရွိပါတယ္။ အဲဒီ source code ကိုု java compiler က compile လုုပ္လိုုက္တဲ့အခါမွာ classname.class ဆိုုျပီး file တဖိုုင္က်လာပါလိမ့္မယ္။ source file ကိုု compile လုုပ္တဲ့အခါ ရရွိလာတဲ့ file ဟာ bytecodes ျဖစ္ပါတယ္။ ဒီ bytecodes ဟာ Operating System (OS ) နားလည္တဲ့ အဆင့္ေတာ့မေရာက္ေသးပါဘူး။


Source code ကိုု ေရးသားရာမွာ တခုုခုုမွားယြင္းခဲ့ရင္ compile လုုပ္တဲ့အခါမွာ errors ေတြျပပါလိမ့္မယ္။ တကယ္လိုု ့မွားယြင္းခဲ့ျပီး errors ျပခဲ့ရင္ေတာ့ bytecodes ျဖစ္တဲ့ classname.class (HelloWorld.class) ဟာက်လာမွမဟုုတ္ပါဘူး။ ဒီ errors ကိုုေတာ့ compile time errors လိုု ့ေခၚပါတယ္။ ဒီအဆင့္က ဘယ္လိုု ဥပမာေပးရမလဲဆုုိေတာ့ English Grammar ေရးသားတာနဲ ့ဥပမာေပးပါ့မယ္။ English စာမွာဆိုုရင္ စာေၾကာင္း တေၾကာင္းရဲ ့အစကိုု အၾကီးနဲ ့ေရးသားရမယ္ စာေၾကာင္း (၀ါက်) အဆုုံးမွာ full stop (.) ပါ၀င္ရမယ္။ စသည္ျဖင့္ နည္းဥပေဒေတြရွိပါတယ္။ ဒီလိုုပဲ Java programming ကိုုေရးသားရာမွာ လိုုက္နာရမည့္ syntax rules ေတြရွိပါတယ္။(ဒီအေၾကာင္းကိုု ေနာက္ပိုုင္း Java tutorials မ်ားမွာဆက္လက္ေလ့လာနုုိင္ပါတယ္)


တကယ္လုုိ ့မွန္ခဲ့တယ္ဆိုုပါစိုု ့… classname.class (HelloWorld.class) ဖိုုင္ေလးက်လာျပီဆိုုရင္ အဲ *.class file ကိုု Java Virtual Macnhine (JVM ) က interpret လုုပ္လိုုက္တဲ့အခါမွာ OS နားလည္တဲ့ executable file ျဖစ္ျပီး မိမိေရးသားခဲ့တဲ့ ပရိုုဂရမ္အတုုိင္း ကြန္ပ်ဴတာက လုုပ္ေဆာင္ေပးမွာပါ။ ဥပမာ program မွာ Hello World ကိုုရိုုက္ထုုတ္ဖိုု ့ေရးသားထားလိုု ့ Hello World ကိုု ရိုုက္ထုုတ္ေပးပါလိမ့္မယ္။


တကယ္လိုု ့မ်ား interpret (run)လုုပ္လိုုက္တဲ့အခ်ိန္ errors ေတြျပခဲ့ရင္ ဒါဟာ Run Time errors ပါ။ ဒါကိုု ဘယ္လိုု ဥပမာေပးရမလဲဆိုုေတာ့ က်ေနာ္တိုု ့Microsoft World မွာ စာရိုက္တာနဲ ့ ဆင္တူပါတယ္။ MS world က်ေနာ္တိုု ့English စာ ၀ါက်ေရးသားရာမွာ စာလုုံးေပါင္းမွားရင္၊ အၾကီးအေသးမွားရင္၊ စားလုုံးထားသိုုေနရာထားမွဳ (space) မ်ားမွားတဲ့အခါ အနီေရာင္ အစိမ္းေရာင္ အတြန္ ့ကေလးေတြ ျပတာ သတိထားမိမွာပါ။ ဒါဟာ programming မွာဆိုု syntax မွားတာေပါ့။ အဲလိုုမွားျပီး Run လိုု ့ကေတာ့ compile လုုပ္တဲ့အဆင့္မွာကိုု errors ေတြတက္မွာပါ။ တခါတေလ ကိုုေရးသားတဲ့အခါမွာ လုုံး၀ အဲလိုု အနီေရာင္ အတြန္ ့ မ်ဥ္းေလးေတြမျပ ဘူးဆိုုတိုုင္း မွန္တယ္မထင္ပါနဲ ့။ ဥပမာ က်ေနာ္က I am Aung Aung. လိုု ့မ်ား ေရးသားခဲ့ရင္ ဘာအမွားမွ ျပမွာမဟုုတ္ပါဘူး။ ဘာလိုု ့လဲဆိုုေတာ့ ေရးသားပုုံ grammar ကမွန္ေနတာကိုုးဗ်။ ဘယ္ေနရာမွာ မွားမလဲဆိုုေတာ့ က်ေနာ့္ကိုုသိတဲ့လူေတြဖတ္တဲ့အခါ ဟ မင္းက Aung Aung မဟုုတ္တာYe’ Paing Phyo ပါကြဆိုုျပီးျပန္ေျပာပါလိမ့္မယ္။ ဒါမ်ဳိးကိုု Run Time errors လိုု ့ေခၚပါတယ္။ ဒီေနရာမွာ compile time errors နွင့္ run time errors ကိုု ရွင္းလင္း နားလည္ေစခ်င္တာပါ။


JVM ဟာ OS platform အေတာ္မ်ားမ်ားအတြက္ ရရွိနုုိင္တာမိုု ့ Java ဟာ platform လြတ္လပ္မွဳရွိတယ္လိုု ့ဆိုုနုုိင္တာေပါ့။ ဒါေၾကာင့္ သင္ဟာ Windows OS မွာ compile လုုပ္ထားတဲ့ HelloWorld.class ဖိုုင္လ္ ကိုု JVM တင္ထားတဲ့ ၾကိဳက္တဲ့ OS မွာ interpret လုုပ္နုုိင္ျပီေပါ့။


အားလုုံးကိုု ျပန္ျခဳံငုုံ ေျပာရရင္ေတာ့ Text editor တခုုခုုမွာ java program (classname.java) ေရးသားထားတဲ့ source code ကိုု compile လုုပ္တဲ့အခါ byte codes (classname.class) ရပါတယ္။ အဲ .class file ကိုု JVM က interpret လုုပ္လိုုက္မွ OS နားလည္တဲ့ executable file/program ရလာတာပါ။


Dalvik VM ကိုု ရွိနွင့္ျပီးသား Java Virtual Machine (JVM ) ထက္ပိုုမိုုေကာင္းမြန္ေအာင္၊ အထူးသျဖင့္ ၾကိဳးမဲ့မိုုဘိုုင္းကိရိယာမ်ားအတြက္ ရည္ရြယ္ ဖန္တီးထုုတ္လုုပ္ထားျခင္းျဖစ္ပါတယ္။ Mobile device ေတြဟာ သယ္ယူရ အဆင္ေျပလြယ္ကူေစရန္ အရြယ္အစား အားျဖင့္ ေသးငယ္ေအာင္ ထုုတ္လုုပ္ရတာ ျဖစ္တဲ့အတြက္ Battery life, processign power, memory management ျပႆနာေတြကရွိေနဆဲျဖစ္ပါတယ္။ Dalvik ကိုု အဓိကအားျဖင့္ battery life ၾကာခ်ိန္နွင့္ ေမာင္းနွင္တြက္ခ်က္နုုိင္စြမ္းအား processing power တုုိ ့ကဲ့သိုု ့ေသာ mobile devices မ်ား၏ အကန္ ့အသတ္မ်ားအတြက္ အဆင္ေျပေစရန္ ဒီဇုုိင္းထုုတ္ထားတာျဖစ္ပါတယ္။


၂၀၀၅ ခုုနွစ္ေလာက္မွာ Google က Dan Bornstein ဦးေဆာင္တဲ့ Engineer အဖြဲ ့ဟာ Dalvik VM ျဖင့္ JVM ကိုု အစားထုုိးနုုိင္ဖိုု ့အသည္းအသန္ က်ားကုုတ္က်ားခဲ ၾကိဳးပန္း ဖန္တီးရလဲဆိုုတာ ေနာက္ကြယ္ မွာအေၾကာင္းအရင္း တခုုရွိေနေသးလိုု ့ပါပဲ။ ဒါဆိုု အဲဒါဘာမ်ားျဖစ္မလဲ? LICENSE ခြင့္ျပဳမွဳ ကိစၥေၾကာင့္ျဖစ္ပါတယ္။ အမွန္တကယ္ေတာ့ Java Programming Language, Java tools and Java Libraries ေတြဟာ မည္သူမဆိုု ရယူသုုံးစြဲနုုိင္ေသာ (Open Source) ဆိုုေပမယ့္ Java Virtual Machie (JVM) ကေတာ့ Free မဟုုတ္ပါဘူး။ ဒီကိစၥကလဲ Dalvik ျဖစ္ေပၚလာေစတဲ့အေၾကာင္းရင္း တရပ္ပါပဲ။ ဒါေပမယ့္လည္း ခုုခ်ိန္ခါမွာေတာ့ Sun အဖြဲ ့ၾကီးမွ Java ျဖင့္တည္ေဆာက္ထားေသာ VM ကိုု အစားထိုုးစရာအျဖင့္ Open JDK နွင့္ Apache Harmony တိုု ့လည္းရွိေနျပီျဖစ္သည္။ ဒီေန ရာမွာသတိထားမိရမွာက လူသားေတြရဲ ့တီထြင္ဖန္တီးလိုုမွဳျဖစ္ပါတယ္။ Open Source အဖြဲ ့စည္းေတြဟာ ကန္ ့သတ္မွုုေတြကိုုေက်ာ္လႊားနုုိင္ဖိုု ့ အသစ္တီထြင္ဖန္တီးနုုိင္ဖိုု ့ကိုု အျမဲတမ္းၾကိဳးစားၾကပါတယ္။ လူသားေတြရဲ ့တီထြင္ဖန္တီးမွဳဟာလဲ အကန္ ့သတ္ေတြမရွိတဲ့အခါ ပိုုမိုုေတာက္ေျပာင္လာအုုံးမွာပါပဲ။


Dalvik VM & Java VM
Java မွာ source file ကို text editor တခုုခုုမွာေရးသားျပီး java compiler ( javac HelloWorld.java) ကိုုသုုံးျပီး Java byte codes အျဖစ္ ေျပာင္းလဲကာ compile လုုပ္ပါတယ္။ ထိုု ့ေနာက္ Java byte code ကိုု Java VM ေပၚတြင္ run (java HelloWorld) ယူသည္။ Android OS ေပၚတြင္မွုု မတူေတာ့သည့္ ကိစၥမ်ားရွိလာသည္။ source file (*.java) ကိုု compiler ျဖင့္ java byte codes (*.class) ဖိုုင္ရယူသည္အထိက အတူတူုုျဖစ္ပါတယ္။ သိုု ့ေသာ္ ထိုုအဆင့္တြင္ Dalvik compile ကိုု ထပ္ျဖတ္ျပီး Dalvik byte code အျဖစ္ ထုုတ္ယူျပီး ရရွိလာတဲ့ Dalvik byte code ကိုုမွ Dalvik VM ေပၚတြင္ အလုုပ္လုုပ္ေစျခင္းမ်ဳိးျဖစ္ပါတယ္။



က်ေနာ္ တိုု ့ဒီေန ရာမွာ သတိထားရမွာက Dalvik byte code ရေအာင္ java က ေန တိုုက္ရိုုက္မထုုတ္ယူပဲ Dalvik compiler ကိုု တဆင့္ခံသုုံးထားတယ္ဆိုုတာကိုုပါ။ ဒီလိုု တဆင့္ခံသုုံးထားတာေၾကာင့္ အက်ဳိးဆက္မ်ား ျဖစ္လာပါတယ္။ ဥပမာ- java byte code ျဖစ္ေစတဲ့ ( Python/ Ruby စသည့္) မည္သည့္ programming language မဆိုု Android Application မ်ား ေရးသားနုုိင္သြားျခင္းမ်ဳိးျဖစ္သည္။
Java မွာ အဓိကအားျဖင့္ေအာက္ပါအတုုိင္း …


Java Standard Edition (J2SE) – Desktop application မ်ားေရးသားရာတြင္ အသုုံးျပဳသည္။
Java Enterprise Edition ( J2EE) – Enterprise System , e-Commerce ကဲ့သိုု ့ေသာ လုုပ္ငန္းၾကီးမ်ား အတြက္ application မ်ားေရးသားရာတြင္ အသုုံးျပဳသည္။
Java Micro Edition (J2ME/ Java ME) – java phone မ်ား mobile application မ်ားအတြက္ျဖစ္သည္။

Android တြင္ ပါ၀င္ေပါင္းစပ္ေသာ java libraries မ်ားမွာ Java Standard Edition နွင့္အနီးစပ္ ဆုုံးျဖစ္သည္။ ၄င္းတိုု ့၂ ခုု၏ အဓိက ကြာျခားေသာ အခ်က္မွာ J2SE မွ user interface libraries ကိုု ဖယ္ထုုတ္လိုုက္ျပီး Android အဓိက user interface librarires မ်ားကိုုျဖည့္သြင္းထားျခင္းျဖစ္သည္။ သိုု ့ေသာ Java ၏ standard features မ်ားကိုု ေထာက္ပံ့ေပးထားသည္နွင့္ တျပိဳင္နက္တြင္ features အသစ္မ်ားကိုုလည္း Android တြင္ ျဖည့္စြက္ ထည့္သြင္းထားေပးပါသည္။ ေနာက္ တပိုုင္းမွပဲ Application Framework မ်ား ႏွင့္ပတ္သက္ျပီး ဆက္လက္ေဆြးေႏြးပါေတာ့မယ္။

No comments:

Post a Comment