• 0
romansy

مقدمه في برمجه الأجهزه المحموله J2me

سؤال

بسم الله الرحمن الرحيم ،،

سنبدأ في هذه الدورس -ان كتب لها التتمه ان شاء الله- في موضوع برمجه الأجهزه المحموله Mobile Device وهي ليست تقتصر على الجوالات فقط بل في أجهزه PDA وحتى أجهزه البيجر Pager وغيرها من الأجهزه الصغيره مثل Set-top box ،، ويمكن أن نطبق العديد من المشاريع ، بدئا من تطبيقات بسيطه مثل اله حاسبه أو برنامج لحفظ العنواين الى العاب أو تطبيقات تحتاج الوصول للأنترنت ، يمكن أيضا أن نقوم بعمل برامج الاستعلام عن حاله مريض أو درجه طالب (اما برنامج يتصل لweb Server ويرسل له رساله عن طريق اتصال انترنت ، أو ارسال SMS عادي لمودم GSM ) .. كل هذه تطبيقات ممكنه وهناك الكثير من التطبيقات يمكن عملها أيضا ,,,

قبل أن نبدأ ، أحب التنويه بأني مبتدئ في J2ME ، وما طرحت الموضوع الا لكي تصحح معلوماتي والتأكد منها هذا أولا ، وثانيا لعل وعسى أفيد المبتدئين مع أنه هناك دروس أفضل من هذا بكثير في القسم ، لكن في الإعاده افاده دائما :) .

مقدمه في J2ME :

=-=-=-=-=-=-=-=

Java 2 Micro Edition هي النسخه الخاصه ببرمجه الهواتف المحموله من صن ، وفي الحقيقه برمجه الأجهزه المضمنه هي أحد سبب البدء في مشروع الجافا -تقريبا اسمه كان Green Project- ، وبعد ما رأي مخترع اللغه قوه التطبيقات التي تنتجها Applet في تلك الفتره بدء الأهتمام باللغه ، وبعد الكثير من التطويرات أصبحت J2ME كما ستراها الأن في هذه القدمه البسيطه ..

يمكن أن نقول أن J2ME هي مجموعه من API ، تقسم الى ثلاثه أقسام الأول هو Configuration ، والثاني Profile والأخير هو مجموعه دوال تختلف من جهاز لأخر Optional-Api . هذا الconfiguration مصمم للعمل في الأجهزه التي لها قيود معينه مثل الذاكره والمعالجه بالأضافه الى أنه أخذ بضعه API من النسخه J2SE وبالتالى سوف تستطيع استخدامها في ME ، وطبعا يجب أن يكون هذا configuration موجود في الجهاز وهذه مسؤليه مصنع الأجهزه حيث يجب أن يوفر أحد أنواع هذه الconfiguration ، أما الـprofile فهو الذي سنتعامل معه لأنه بني فوق الconfiguration بالإضافه الى أنه يحتوي على api التعامل مع الشاشه وتخزين البيانات وكل الأشياء المطلوبه لكتابه البرامج . أيضا هو أنواع وسنتعامل في دروسنا هذه مع أشهر نوع وهو MIDP .

الصوره التاليه توضح أنواع الConfiguration والـProfile ، وهذه الأنواع تختلف من حيث تعاملها مع ذاكره أكبر من غيرها :

post-51148-1226859572_thumb.png

الConfiguration كما ذكرنا يحدد لي مجموعه من api وأيضا VM ، وهو نوعين ، الأول Connected Device Configuration واختصارا CDC وهذا الConfiguration مخصص للعمل في الأجهزه الكبيره مثل الأجهزه التي تكون في السياره car navigation systems ، أيضا في بعض أنواع الPDA المتطوره والتي تحتوي قدر كبير من الذاكره ،، حيث هذا النوع لكي تستخدمه يجب أن تتوفر ذاكره RAM على الأقل 256KB وذاكره ROM بمقدار 512KB . هذه الCDC تتطور أيضا ، فالمتطلبات السابقه للنسخه الأولى منها ، النسخه الثانيه CDC 1.0.1 تطلبت 2.5MB من ROM و 1MB من RAM .. وحاليا هناك CDC 1.1 وتتطلب بالطبع Resource أكبر والسبب دعم الشبكات والGraphics بشكل كبير ،،

النوع الأخر من الConfiguration هو Connected, Limited Device Configuration وأختصارا CLDC وهو الذي سيكون من إهتمامنا والسبب أن كما هو واضح من الإسم Limited تستطيع التعامل مع الأجهزه ذات Resource قليله (ذاكره قليله ، معالجه قليله ، شاشه صغيره ، لوحه مفاتيح صغيره ، بطاريه صغيره ،دعم شبكات محدود) .. وأغلب أجهزه الجوال من هذا النوع وحتى هناك أنواع من PDA تقع هنا أيضا .. "جوالي أكيد من النوع ده ، شاشه صغيره زرقاء ، بطاريه كل دقيقه تطفي ، الغطى مافي :) "

هناك اصدارين من CLDC الأول القديم وهو CLDC 1.0 والثاني CLDC 1.1 وهو يحتوي على العديد من الأشياء زياده على الأصدار الأول ، وأهمها هو التعامل مع الأعداد الحقيقيه Floating-Point Number .

ذكرنا أن الCLDC هي للأجهزه الصغيره ، وهنا قامت sun بعمل VM صغيره لكي تتلائم مع تلك الإحتياجات وهي KVM (الحرف K اختصار لـKiloByte وهو يدل على صغر الحجم) ، هذه KVM تختلف عن JVM التي تستخدمها في التطبيقات العاديه ، والسبب كما ذكرنا الإمكانيات المحدوده في الجهاز ..

نعود الى الصوره السابقه ، وللنظر الى الProfile وسنجد أن هناك أنوع عديده ، مثلا Foundation Profile يستخدم في الأجهزه التي تتصل بالشبكه ، ولكن لا يحتوي على دعم للواجهات UI ، وبالتالي يمكن استخدام الPersonal Profile معه .. بالإضافه الى الطبقه السفلي CDC (وهذا بالنسبه للأجهزه التي تتعامل مع CDC) .. نذهب للشق الأخر من الصوره ، وسنجد PDAP ولكن هو غير مستخدم بكثره حتى في أجهزه PDA ، أخر Profile وهو الذي سنستخدمه MIDP والأصدار الحديث منه أيضا MIDP 2.0 وهو يحتوي على العديد من الأضافات مثل التعامل مع HTTPS ، وapi للعمل واجهات للألعاب بالإضافه الى دعم الوسائط المتعدده Multimedia .

اذا باستخدام الCLDC + MIDP يمكن عمل MIDP Application وبالتالي سوف يعمل على جهاز صغير ، الصوره التاليه توضح هذه الAPI (العلامه + تعني ان هذا الباكج متوفر في النسخه الحديثه) :

post-51148-1226859604_thumb.png

تطوير تطبيقات الجوال :

=-=-=-=-=-=-=-=-=-=

أعلم أنك متحمس جدا لكتابه أول تطبيق لك يعمل في الجوال ، وربما في نفس الوقت متردد وينتابك شعور بالخوف .. في الحقيقه برمجه الجوالات MIDP Application -من الأن سوف نطلق عليها MIDlet وهي على وزن Applet و Servlet 8-) - أسهل بكثير من برمجه التطبيقات العاديه ، يعني اذا كنت تعرف أساسيات جافا ، تستطيع بلا مشاكل الدخول في J2ME وبرمجه تطبيقات جوال احترافيه ،، وكما شاهدت بالصوره السابقه الباكجات المستخدمه قليله جدا مقارنه مع الباكجات في J2SE ..

لكي تبدأ في كتابه أول برنامج ، هناك طريقتين يوصلان لنفس الهدف ، الطريقه الأولى هي بتحميل MIDP Reference Implementation وهنا سوف تترجم سطر البرنامج من سطر الأوامر ، لكن المشكله هي أن خطوات تطوير البرنامج هنا سوف يكون متعب جدا حيث يجب أن تمر بهذه المراحل ، أولا ترجمه البرنامج ويخرج لك ناتج byte code ، ثم تقوم بأخذ هذا الناتج (ملفات .class) وتقوم بعمل preverifying لها ، هذه العمليه حتى نتأكد من ملفات .class لا تحتوي على كود خاطئ للوصول لموقع في الذاكره ليس مصرح له ، في JVM كان يقوم بعمل الpreverifying وقت التشغيل ، لكن بالطبع هذا الأمر يأخذ مساحه بالذاكره والمعالجه أيضا وهو ما لا يتوفر لتطبيقات MIDP ، بالتالي تم عمل هذه المرحله بعد مرحله الترجمه وأصبحت منفصله عن KVM ، بعد الأنتهاء من عمليه الpreverifying نقوم بعمل باكج يضم جميع الملفات وذلك باستخدام الأداه JAR تحتوي بالطبع على ملف Manifest فيه محتويات هذا الباكج من صور وملفات أخرى ، ثم عمل ملف jad يوضح لك محتويات ملف jar وهو ضروري لكي يعمل البرنامج ، ثم تشغيل المحاكي لاختبار البرنامج .. مراحل طويله لذلك سوف نذهب للخيار الأخر ، وهو عمل هذه المراحل ولكن بضغطه زر واحده ! في حال كان هناك مهتم بالطريقه اليدويه يمكن أن نوضحها لاحقا .. لكن بالطبع الغرض سوف يكون في للعلم ، لكن في عمليه التطوير الأداه WTK أفضل بكثير وتختصر الوقت .

سوف نستخدم Wirless Toolkit وأختصارا WTK ، وهو من خلاله نستطيع عمل Build للبرنامج (وهو يقوم بجميع خطوات تطوير البرنامج بنفسه) ثم نقوم بعمل run لكي نشغله ونختبره .. فقط بضغطه زر .. هذه الأداه من Sun وهي تحتوي على أداه الالpreverifying بالأضافه الى المحاكي Eumlator .. هناك العديد من الأدوات لشركات محتلفه مثل نوكيا وموتورلا .. لكن WTK مناسب جدا ، وستكون الدروس عليه ان شاء الله ،،

دوره حياه الـMIDlet :

=-=-=-=-=-=-=-=-=

كما هو الحال في الأبليت Applet ، الMIDlet لديه دوره حياه يجب أن يمر بها على حسب الحاله ،، لذلك يجب أن تعرفها بشكل مسبط حتى تقوم بكتابه تطبيقاتك بشكل سليم ، و الذي يتحكم بتنفيذ وتغيير الحالات هو application manager وهو تستطيع أن تقول عنه مدير للجهاز وأنت لا تستطيع التحكم به .. هو يدير جميع التطبيقات بما فيها برنامجك ..

post-51148-1226859620_thumb.png

عندما يعمل الMIDlet (يقوم مدير التطبيقات بعمل نسخه) وبالتالي سوف يقوم باستدعاء داله البناء وهنا يدخل الMIDlet في حاله pause ، بعدها مباشره يقوم مدير التطبيقات باستدعاء الداله startApp وهنا يتحول الMIDlet للحاله Active ، في حاله تم استدعاء الداله pauseApp يقوم الapplication manager بعمل ايقاف مؤقت للMIDlet وترجع بمجرد استدعاء startApp .. وينتهي عمل الMIDlet عند استدعاء الداله destroyed وينتظر هنا الGC ،، ويمكن أن يقوم الMIDlet بغلق نفسه وذلك من خلال الداله notifyDestroyed .

كتابه أول تطبيق J2ME :

=-=-=-=-=-=-=-=-=-=

بعد تحميلك الWTK من هنا :

WTK 2.5.2

أو من موقع sun مباشره :

Sun Java Wireless Toolkit 2.5.2 for CLDC Download

قم بفتحه الأن بعد التحميل :

post-51148-1226859653_thumb.png

قم بعمل مشروع جديد ، وأدخل المعلومات التاليه ،

post-51148-1226859673_thumb.png

الأن اضغط على موافق

post-51148-1226859717_thumb.png

هنا نكون جهزنا ملف المشروع ، لكنه حاليا خالى ، أيضا لن نستطيع كتابه الكود في هذه البيئه WTK ، فقط تستطيع عمل مشروع + عمل Build + عمل Run .. لكن لن تستطيع كتابه الكود هنا .. لذلك اذهب الى مسار المشروع ، وتجده موضح في الشاشه الرئيسيه في WTK في المساحه البيضاء ، وبالعاده يكون في ملف mydocuemnts في مجلد j2mewtk من ثم رقم الأصدار 2.5.2 ثم app ثم اسم مشروعك HelloSudanCS ..

اذهب لذلك المسار :

post-51148-1226859727_thumb.png

وأدخل على src وأنشئ ملف جديد باسم Demo.java (يجب أن يكون نفس الأسم الذي أنشئته في البدايه) .. الأن أكتب في هذا الملف :

// HelloSudanCS Project

import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;

public class Demo extends MIDlet implements CommandListener
{
private Display display;
private Command exitCommand;
private Form mainScreen;

public Demo () {
display = Display.getDisplay(this);
exitCommand = new Command("Exit",Command.EXIT,2);
mainScreen = new Form("Main Screen");

StringItem item = new StringItem("","Hello SudanCS");
mainScreen.append(item);

mainScreen.setCommandListener(this);
mainScreen.addCommand(exitCommand);
}

public void startApp () {
display.setCurrent(mainScreen);
}

public void pauseApp () {
}

public void destroyApp (boolean state) {
}

public void commandAction (Command c, Displayable s){
if ( c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
}
}

الأن ارجع لWTK ، وقم بعمل بناء للبرنامج ، ثم شغله :

post-51148-1226859743_thumb.png

وسيكون على الشكل التالي :

post-51148-1226859761_thumb.png

قم بتشغيل البرنامج في باقي المحاكيات لكى تشاهد أنواعهم والفرق بينهم .. بعد الأنتهاء اذا أردت أن نتقل برنامج للجوال .. الصوره التاليه توضح ذلك ..

post-51148-1226859775_thumb.png

شرح مبسط للبرنامج -وستفهم البرنامج المرات القادمه ان شاء الله - ، أولا لكتابه تطبيقات MIDlet سوف تحتاج الى دائما الى الوراثه من MIDlet وتقوم بتعريف الدوال الخاصه بحياه الMIDlet وهي startApp و pauseApp و destroyApp . نبدأ سطر بسطر ، أولا نقوم بعمل تضمين لتلك الباكج :

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

الباكج الأول midlet سنستخدم الكلاس MIDlet وذلك لأننا سنرثه وسنقوم بتعريف الدوال التي ذكرناها أعلاه ، أما الباكج الثاني وهو الخاص بواجه المستخدم وهو lcdui ، والأسم تشبيه بشاشات LCD ربما لأن شاشه الجوال تعمل بنفس المبدأ ،

public class Demo extends MIDlet implements CommandListener {

هنا كما ذكرنا نقوم بعمل وراثه من MIDlet ، وسوف نقوم بتطبيق CommandListener وهو خاص بالتعامل مع الأحداث عند الضغط على مفتاح معين .

private Command exitCommand;
private Display display;
private Form screen;

الأول exitCommand وهو سوف يكون مفتاح لعمل شيء معين ، الثاني display وهو يجب أن يحتوي على مؤشر لعرض MIDlet ، والأخير screen من نوع Form وهي عباره عن صفحه في التطبيق وهنا في مثالنا سوف تكون الصفحه الرئيسيه ،،

داخل داله البناء ،

display = Display.getDisplay(this);
exitCommand = new Command("Exit",Command.EXIT,2);
mainScreen = new Form("Main Screen");

حصلنا على المؤشر للMIDlet أي شاشه العرض ، بعدها قمنا بتعريف زر الخروج (لا تهتم بالقيم الممره الأن) ، وأخيرا قمنا بعمل الشاشه الرئيسيه من نوع Form .

StringItem item = new StringItem("","Hello SudanCS");
mainScreen.append(item);
mainScreen.setCommandListener(this);
mainScreen.addCommand(exitCommand);

قمنا بعمل string من غير عنوان ، وأضفناه للشاشه الرئيسيه ، ثم جعلنا الشاشه الرئيسيه تستمع لأحداث الأزرار ، وأضفنا الزر exit فيها .

public void startApp () { 
display.setCurrent(mainScreen);
}
public void pauseApp () {
}
public void destroyApp (boolean state) {
}

هذه الدوال الثلاثه يجب أن يحتويها أي برنامج MIDlet ، عود نفسك عليها كثيرا .. في الداله start قمنا بجعل مؤشر الشاشه يشير للصفحه الرئيسيه (التي تحتوي على string) ..

public void commandAction (Command c, Displayable s){
if ( c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
}

أخيرا ، الحدث ، في حال فقت بالضغط على زر exit ، سوف ينفذ destroyApp ومررنا لها false وهو انهاء غير مشروط بمعني قد يتم تجاهله ، ولكن الأستدعاء التالي notifyDestroyed كما ذكرنا في دوره حياه الMIDlet يجعل الMIDlet يقوم بخنق نفسه :mrgreen: لم أجد معنى لdestroy :) .

الى هنا قد نكون وصلنا لنهايه المقدمه ، ونكون قد كتبنا أول Hello World يعمل في الجوال ، المرات المقدمه باذنه تعالى نواصل في المزيد من التطبيقات ،،

أي سؤال ، حول الأساسيات طبعا :P

والسلام عليكم ،،

تم تعديل بواسطه Wajdy Essam
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

8 إجابة على هذا السؤال .

  • 0

درس جميل جداً أخي وسيم

لكني استأذنك في نقل الصور إلى السيرفر الخاص بالفريق

طبعاً نزلت wtk

وبحثت عن IDE غير الأخ NetBeans

ووجدت توزيعة من حبيبي Eclipse

وهذه وصلتها

http://www.easyeclipse.org/site/distributions/index.html

المهم أني جهزت العدة وبإذن الله سأشن عليك غارة أسئلة في الليل :lol:

تحياتي

تم تعديل بواسطه علاء الصالحي
تبديل كلمة سأعمل بكلمة سأشن لإرضاء الأخ ضي&#1
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مرحبا استاذي Wajdy Essam

س/ هل اذا استخدمة neatbeas يغني عن wtk ؟

ارجوا ان تتحملني لاني مبتدء في J2ME .

وشكرا على الدروس الرائعة .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اذا كان NetBeans 6 فهو يغني لأنه يحتوي على حزمه الجوال ، أما اذا كنت تستخدم 5 فهناك Plug-in يجب تركيبه حتى يعمل ،، أنظر هنا في موقع نت بينز :

Mobile Applications Learning Trail

ستجد كل ما يخص برمجه الجوال بالنت بينز ، وتقريبا هو يحتوي على Visual Desinger بعكس WTK .

بالتوفيق ،،

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ما شاء الله. الدرس أكثر من رائع.

بارك الله فيك وجزيت خيرا. كنت اتمنى ان اجد مثل هذه الدروس عندما بدأت تعلم هذه اللغه الرائعه.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أحسنت صنعا ..

سلمت يمناك على هذا العمل المنسق البديع المريح للقارئ والرائي

اسلوبك سلس .. سهل الفهم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذا الموضوع من السنة السابقة..

مالداعي لرفعه مرة اخرى و خصوصا بدون استفسار او اضافة؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله كل خير

هذا أول موضوع أقرأه في هذا المجال ، وقد أعجبني كثيرا

لكن لدي استفسار بسيط ، ربما يكون ( بايخ ) ، لكن كما ذكرت انا مبتدئة جدا !

سؤالي : أي ملف يجب أن أرسل إلى الجوال كي يعمل هناك ؟ هل .jad أم .jar ؟

بصراحة جربت إرسال الاثنين .. لكن أحدهم لم يعمل والآخر تظهر لي installation لكن لا يتحرك أبدا !!

لا أدري ، يمكن أن تكون المشكلة من جهازي ، لكن أحببت التأكد فقط

مرة أخرى شكرا لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بارك الله فيك وجزاك خيرا

وبالنسبه للاخت Pal_Freedom ملف الجوال هو الذي يكون .jar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .