ကြ်န္ေတာ့္ BLOG အားလာေရာက္ လည္ပါတ္သူမ်ားကို အထူးပင္ေက်းဇူးတင္ရွိပါသည္။

Monday, November 11, 2013

Android ဖုန္းတစ္လံုးကို ျမန္မာစာမွန္ေအာင္လုပ္ျခင္း

Android ဖုန္းတစ္လံုးကို ျမန္မာစာမွန္ေအာင္လုပ္ျခင္း

ကၽြန္ေတာ္က cdma 800 mHz ကဒ္နဲ႔ C8813 ကိုင္ပါတယ္။ GSM ေကာ ထည့္လို႔ရေအာင္ MIUI rom ေျပာင္းထားပါတယ္။ အကုန္အဆင္ေျပပါတယ္။ ျမန္မာစာ အဆင္မေျပတာတစ္ခုကလြဲလို႔။

ကၽြန္ေတာ့္သူငယ္ခ်င္းေတြလည္း HTC One ကိုင္တဲ့တစ္ေယာက္ကလြဲၿပီး က်န္တဲ့သူေတြအားလံုး ျမန္မာစာ လြဲၾကပါတယ္။ အင္တာနက္ေပၚမွာရွာေတာ့လည္း အေျဖမေတြ႕။ မွန္ေအာင္လုပ္ႏိုင္တယ္ဆိုတဲ့ model ကလည္း တစ္လံုးႏွစ္လံုးရယ္။ လူအေတာ္မ်ားမ်ားလည္း ဒီျပႆနာတက္ေနၾကပါတယ္။ ကၽြန္ေတာ္လည္း အတတ္ႏိုင္ဆံုး ေျဖရွင္းၾကည့္တယ္။ ဒီအတြက္ အခ်ိန္ေတြအမ်ားႀကီး ေပးခဲ့ရတယ္။

JB ရဲ႕ ျပႆနာက unicode font ကို support လုပ္လိုက္ျခင္းပါ။ unicode အတိုင္းဆိုရင္ 'အေမ' လို႔ ေပၚဖို႔အတြက္ 'အမေ' လို႔ ႐ိုက္ရပါမယ္။ ကၽြန္ေတာ္တို႔က 'အေမ' လို႔ ႐ိုက္လိုက္ရင္ 'ေအမ' လို႔ သြားေပၚပါတယ္။ ေနာက္ထပ္ျပႆနာတက္တာက အသတ္ေတြပါ။

ျပႆနာက font rendering engine ထဲမွာ ရွိေနပါတယ္။ တစ္ခ်ဳိ႕ model ေတြကို font ေျပာင္းထည့္ၿပီး ေျဖရွင္းၾကပါတယ္။ တစ္ခ်ဳိ႕လည္းအဆင္ေျပတယ္။ အဆင္မေျပတာက ပိုမ်ားပါတယ္။ ကၽြန္ေတာ္လည္း font rendering ကို ေျပာင္းၾကည့္ဖို႔ ႀကိဳးစားခဲ့ပါေသးတယ္။ ဘယ္လိုမွအဆင္မေျပပါဘူး။ မ်က္စိေညာင္းသြားတာသာ အဖတ္တင္ခဲ့တယ္။

ဒါနဲ႔ ေနာက္တစ္နည္းျဖစ္တဲ့ font rendering engine ကို patch လုပ္ဖို႔ ႀကိဳးစားပါတယ္။ ကၽြန္ေတာ္ရွာလို႔ရသေလာက္ font rendering engine က /system/lib/libskia.so နဲ႔ /system/lib/libharfbuzz.so ဆိုတဲ့ file ႏွစ္ခုထဲမွာရွိေနတယ္။ ျပႆနာကလည္း အဲဒီထဲမွာရွိေနပါတယ္။ ရွိေနတယ္ဆိုတာကိုသိေပမယ့္ ဘယ္လိုေျဖရွင္းရမယ္မွန္း မသိဘူးျဖစ္ေနတယ္။ libskia.so နဲ႔ ရက္အေတာ္ၾကာ တိုင္ပတ္ေနေသးတယ္။

ေနာက္ဆံုး android source code ကို ဖတ္ၾကည့္ေတာ့မွ ျပႆနာက libharfbuzz.so မွာရွိေနမွန္း သိသြားပါတယ္။ အဲဒါကို ကၽြန္ေတာ္ IDA Pro နဲ႔ reverse engineering ျပန္လိုက္တယ္။ သေဝထိုးေတြ၊ ငသတ္ေတြကို ေရွ႕ေနာက္မစီႏိုင္ေအာင္ လုပ္ပစ္လိုက္တယ္။ အဲလိုနဲ႔ ကၽြန္ေတာ့္ C8813 ျမန္မာစာ မွန္သြားပါတယ္။

လုပ္ပံုလုပ္နည္းက ဖုန္းထဲကေန libharfbuzz.so ကိုထုတ္တယ္။ computer ထဲမွာ reverse engineering ျပန္လိုက္တယ္။ code ေတြျပင္တယ္။ ေနာက္ၿပီး ျပန္ထည့္တယ္။ ျပႆနာက ဖုန္းတစ္လံုးခ်င္းစီအတြက္ သီးသန္႔လုပ္ရပါတယ္။ libharfbuzz.so ကို တျခားဖုန္းထဲကယူထည့္ရင္ boot loop ျဖစ္သြားပါတယ္။ ကၽြန္ေတာ့္သူငယ္ခ်င္းတစ္ခ်ဳိ႕ကိုလည္း မွန္ေအာင္လုပ္ေပးလိုက္တယ္။ အဆင္ေျပပါတယ္။

နည္းပညာရသြားၿပီဆိုေတာ့ ေရာင္းစားမလားလို႔ ကၽြန္ေတာ္စိတ္ကူးမိပါေသးတယ္။ ကၽြန္ေတာ့္ကို ျပႆနာျဖစ္ေနတဲ့ file ကိုေပး၊ ကၽြန္ေတာ္က patch လုပ္ေပးမယ္ေပါ့။ အခုလက္ရွိနည္းပညာအရကလည္း အမ်ားစုတစ္ၿပိဳင္တည္းလုပ္ဖို႔ မျဖစ္ႏိုင္ေသးပါဘူး။ ဒါေပမယ့္ ျပန္စဥ္းစားၾကည့္ေတာ့ ကၽြန္ေတာ္ရမယ့္အက်ဳိးအျမတ္က နည္းနည္းရယ္။ တကယ္လို႔ ဖုန္းအားလံုး ျမန္မာစာမွန္မယ္ဆိုရင္ အေတာ္မ်ားမ်ားေပ်ာ္ၾကရမွာ။ အဲလိုနဲ႔ ေနာက္ဆံုး free ရေအာင္လုပ္ေပးဖို႔ ဆံုးျဖတ္လိုက္ပါတယ္။

အဓိကျပႆနာက အဲဒီမွာစပါတယ္။ model မတူတဲ့ဖုန္းေတြအမ်ားႀကီးကို တစ္လံုးခ်င္းဆီ patch file ထုတ္ဖို႔ဆိုတာမျဖစ္ႏိုင္ဘူး။ အဲဒီနားမွာေတာ့ ကၽြန္ေတာ့္ဦးေႏွာက္ အရည္ေပ်ာ္က်မတတ္ စဥ္းစားရပါတယ္။ ေနာက္ဆံုး ကံေကာင္းစြာနဲ႔ ဖုန္းအားလံုးနီးပါးမွာ ျပင္ရမယ့္ code segment ေလးက သြားတူေနပါတယ္။ ကၽြန္ေတာ္က byte ေတြ bit ေတြနဲ႔ ကစားရတာကို ဝါသနာပါတယ္။ အျပန္ျပန္အလွန္လွန္ႀကိဳးစားၿပီးေနာက္မွာ one click tool ေလးတစ္ခုကို C++ နဲ႔ ေရးႏိုင္ခဲ့ပါတယ္။

အဲဒီ one click tool ေလးကို ထုတ္ေပးေတာ့မလားလို႔ စဥ္းစားလိုက္ပါေသးတယ္။ ဒါေပမယ့္ သံုးသူအားလံုး တကယ့္ကို free ရေစခ်င္တယ္။ one click tool ေလးက computer မရွိတဲ့သူအတြက္ဆို အဆင္မေျပျပန္ဘူး။ ေနာက္ၿပီး ကၽြန္ေတာ္အလကားေပးထားတဲ့ tool ေလးကို တစ္ခ်ဳိ႕ေတြက အခေၾကးေငြယူၿပီး လုပ္စားၾကဦးမယ္။ အဲလိုနဲ႔ ေနာက္ထပ္တစ္လွမ္း ဆက္လွမ္းရပါတယ္။

အဲဒါကေတာ့ လူတိုင္းလြယ္လြယ္ကူကူသံုးဖို႔ apk ထုတ္ေပးဖို႔ပါ။ android programming က ကၽြန္ေတာ္ကၽြမ္းက်င္လွတဲ့ ဘာသာရပ္မဟုတ္ဘူး။ ေနာက္ၿပီး UI ေတြေရးတဲ့ေနရာမွာ ကၽြန္ေတာ္ေတာ္ေတာ္ညံ့တယ္။ C++ ကေန Java ေျပာင္းဖို႔ကို အခ်ိန္ေတာ္ေတာ္ယူလိုက္ရပါတယ္။ ေနာက္ဆံုးမွာေတာ့ apk file ေလး ထြက္လာခဲ့ပါတယ္။ အလွႀကီးမဟုတ္ေပမယ့္ ၾကည့္ေပ်ာ္႐ႈေပ်ာ္လို႔ ေျပာလို႔ရမယ့္ဒီဇိုင္းေလးနဲ႔ပါ။

အဲဒီ apk ေလးက ဒီလိုအလုပ္လုပ္ပါတယ္။
- /system/lib/libharfbuzz.so ကို သူ႕ files directory ထဲကို backup ဆိုတဲ့ နာမည္နဲ႔ copy ကူးယူတယ္။
- အဲဒီ copy ကူးထားတဲ့ file ေလးကို byte တစ္ခ်ဳိ႕ျပင္ၿပီး temp ဆိုတဲ့ file အေနနဲ႔ ေရးလိုက္တယ္။
- အဲဒီ temp file ေလးကို /system/lib/libharfbuzz.so ဖိုင္ေနရာမွာ အစားျပန္ထိုးပါတယ္။

အလုပ္လုပ္သြားပံုက လြယ္လြယ္ကေလးပါ။ ဒါေပမယ့္ အဲဒီအတြက္ ေတာ္ေတာ္ႀကိဳးစားခဲ့ရပါတယ္။

apk file ေလး အၾကမ္းထြက္လာေတာ့ ကၽြန္ေတာ့္သူငယ္ခ်င္းေတြရဲ႕ ဖုန္းေတြမွာ လိုက္စမ္းပါတယ္။ ေနာက္ဆံုး စိတ္ခ်ရေလာက္ၿပီဆိုတဲ့အခ်ိန္ တင္ေပးလိုက္တာပါ။ ကၽြန္ေတာ္ကေတာ့ စိတ္တိုင္းမက်လွေသးဘူး။ ဒါေပမယ့္ သူငယ္ခ်င္းေတြက အတင္းတင္ခိုင္းတာနဲ႔ တင္လိုက္ရပါတယ္။ ေက်းဇူးတင္ရမယ့္သူေတြထဲမွာ သူတို႔ေတြလဲ ပါပါတယ္။ (Soe Min Htut, Khun Htun Hla, Khaing Khant Lwin)

PATCH_FAIL_ERROR ျဖစ္ရတဲ့အေၾကာင္းရင္းက code segment မကိုက္လို႔ပါ။ အဲဒီဖုန္းေတြအတြက္ /system/lib/libharfbuzz.so ဆိုတဲ့ file ေလးကို dr.kyawzawnaing@gmail.com ကို ပို႔ေပးထားပါ။ ေနာက္ပိုင္း အဲဒီ code segment လည္း ျပင္လို႔ရေအာင္ update ထုတ္ေပးပါ့မယ္။ ၾကန္႔ၾကာေနခဲ့ရင္လည္း သည္းခံေပးပါ။

ေနာက္ၿပီး ကၽြန္ေတာ့္ရဲ႕ app ဟာ unicode နဲ႔ ပိုေဝးသြားေစတာအတြက္ေတာ့ စိတ္မေကာင္းပါဘူး။ ကၽြန္ေတာ္တို႔ဟာ ေရွ႕ကိုတိုးတာမဟုတ္ဘဲ ေနာက္ကိုျပန္ဆုတ္လိုက္ျခင္းသာျဖစ္ပါတယ္။

IT ဖြံ႔ျဖိဳးဖို႔ဆိုရင္ developer ေတြကို အားေပးဖို႔လိုပါတယ္။ ဒါေၾကာင့္ သူတို႔ေရာင္းတဲ့ app ေတြကို ဝယ္ယူအားေပးေစခ်င္ပါတယ္။ သူတို႔ဆိုတဲ့အထဲမွာ ကၽြန္ေတာ္ေတာ့ မပါပါဘူး။ ကၽြန္ေတာ္ဟာ ဝါသနာရွင္အဆင့္ပဲရွိပါတယ္။

ဘယ္လိုပဲဆိုဆို အားေပးၾကတဲ့အတြက္ ေက်းဇူးတင္ပါတယ္။ အားလံုးေပ်ာ္ေနၾကတဲ့အတြက္ ကၽြန္ေတာ္လည္းေပ်ာ္ပါတယ္။ brick ျဖစ္သြားတယ္လို႔ မၾကားရေသးတဲ့အတြက္လည္း ဝမ္းသာပါတယ္။ donate လုပ္ခ်င္သူမ်ားအေနနဲ႔ေတာ့ dr.kyawzawnaing@gmail.com ကို MecTel 800 MHz ေငြျဖည့္ကဒ္ ကုဒ္နံပါတ္မ်ား ပို႔ေပးႏိုင္ပါေၾကာင္း :D

No comments:

Post a Comment