• 0
muqawem

ما هو ال Porting

سؤال

بسم اللله الرحمن الرحيم باسمه نبدأ وعليه نتوكل

عالم J2ME الحقيقي هو العالم الذي ستراه في شركات البرمجه ان شاء الله وقدر ان تكون مبرمج J2ME وفيه سوف تجد بعض الاختلافات عن ما تعرفه عن J2ME التي تقرأها في الكتب أو تاخذها في دورات الجافا.

في هذا الدرس سوف اقدم لك واحد من أهم الاختلافات وهو ال Porting . هذه هي أول مره اكتب فيها مقالا تعليميا لذلك اعتذر عن اي اخطاء املائيه او اسلوبيه.

متطلبات الدرس: تحتاج لتطبيق هذا الدرس الى Netbeans 6.1 واذا اردت مشاهده النتائج العمليه للمشروع سوف تحتاج الى SonyEricsson SDK .

ما هو ال Porting ؟

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

ما هي الحالات التي احتاج فيها لعمل Porting ؟

1. وجود اخطاء في ال VM الموجوده على بعض الموبايلات وفي هذه الحاله سوف تقوم بعمل التفاف برمجي لكي يعمل مشروعك على ذلك الموبايل دون الحاجه الى عمل هذا التعديل لباقي الاجهزه حيث انها سوف تعمل بشكل صحيح.

مثال: Graphics.drawRegion لا تعمل بشكل صحيح على بعض اجهزه ال Nokia S40 لذلك يمكن عمل method بديله لها باستخدام g.setClip وتعطينا نفس النتائج دون استخدام هذا الالتفاف على اجهزه Nokia s60 مثلا.

2. اختلاف قدرات الاجهزه التي سوف يعمل عليها البرنامج, لنفترض انك تقوم بعمل برنامج يحدد مكانك ثم يظهر مكانك على الخريطه. في هذه الحاله يمكنك استخدام طريقتين لكي تحدد خط الطول والعرض. الاولى باستخدام ابراج الاتصالات والثانيه باستخدام الGPS. ولكن هل كل الاجهزه تحتوي على نظام GPS مدمج, بالطبع لا. في هذه الحاله عند ارسال برنامجي الى جهاز N95 مثلا يجب ان يحتوي البرنامج على الخيارين معا ام عند ارساله الى جهاز N73 فسارسل له نسخه من البرنامج لا تحتوي على خيار الGPS وهنا اتحدث عن ان النسخه لا تحتوي على كود قراءه الموقع من ال GPS وليس فقط عن اخفاء هذه الخاصيه.

والان كيف استطيع تطبيق ذلك باستخدام NetBeans لحسن الحظ فان NetBeans يساعدك على عمل ذلك بكل بساطه باستخدام Preprocessor Blocks.

ما هي ال Preprocessor Blocks ؟

هي عمليه التحكم بالكود الذي سوف تقوم بعمل Compile له بناء على الخواص التي تقوم انت بتحديدها.

مثال:

//#if SCREEN_240X320	
public static final int WIDTH = 240;
public static final int HEIGHT = 320;
//#elif SCREEN_176X220
//# public static final int WIDTH = 176;
//# public static final int HEIGHT = 220;
//#endif

الذي في الاعلى وعليه فان نتيجه ال compile هي وجود متغيرين الاول WIDTH وقيمته 240 والثاني HEIGHT وقيمته 320 وهذا لاني اضفت الخاصيه SCREEN_240X320 الى مشروعي اما عند حذفها واضافه الخاصيه SCREEN_176X220 فان العكس تماما سوف يحدث واليك النتيجه:

//#if SCREEN_240X320	
//# public static final int WIDTH = 240;
//# public static final int HEIGHT = 320;
//#elif SCREEN_176X220
public static final int WIDTH = 176;
public static final int HEIGHT = 220;
//#endif

والان لنجرب مثالا عمليا كاملا حتى تتضح الصوره:

1. في NetBeans اذهب الى File ثم New Project ثم Categories اختر Mobility ومن Projects اختر MIDP Application ثم Next .

2. في شاشه New Project ادخل Project Name ليكون PortingLesson تأكد انك اخترت Set As Main Project وازل الاختيار عن Create Hello MIDlet.

3. الان سوف نقوم بعمل Configurations للاجهزه التي سوف يعمل عليها برنامجي الاول سوف يكون SE P990 وهو ذو شاشه 240x320 ويدعم استخدام ال Pointer اما الجهاز الثاني وهو SE K750 وهو ذو شاشه 176X220 ولا يدعم استخدام ال Pointer . لذلك اضغط باليمين على المشروع وقم باختيار Properties في اعلى الشاشه عند Project Configuration قم باختيار Add Configuration والان ادخل الاسم وليكن P990 والان اعد الخطوات وليكن اسم الثاني K750 .

4. الان سوف نقوم بضبط الخصائص. باليمين على اسم المشروع ثم اختر Properties. تأكد ان تقف على P990 Configuration ثم اذهب الى تبويب Abilities ثم اضف الخاصيه SCREEN_240X320 والخاصيه SUPPORT_POINTER اعد الخطوات السابقه ولكن لل K750 ولكن في هذه المره اضف الخاصيه SCREEN_176X220 فقط.

5. والان سوف نحدد ما هو اسم ال Jar file لكل جهاز. باليمين على اسم المشروع ثم اختر Properties ثم تأكد انك تقف على ال P990 ثم اذهب ال Creating Jar ثم غير اسم ال Jar الى PortingLesson_P990.jar وال Jad الى PortingLesson_P990.jad اعد الخطوات السابقه لل K750 وسوف تصبح الاسماء على الترتيب PortingLesson_K750.jar , PortingLesson_K750.jad .

6. والان اضف ال Class الاول وهو MyMidlet :

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

import javax.microedition.midlet.MIDletStateChangeException;

public class MyMidlet extends MIDlet {

protected void startApp() throws MIDletStateChangeException {
MyCanvas c = new MyCanvas( this );
Display.getDisplay( this ).setCurrent( c );

}

protected void pauseApp() {

}

public void destroyApp(boolean arg) throws MIDletStateChangeException {
notifyDestroyed();

}

}

7. اضف ال class الثاني وهو MyCanvas :

import javax.microedition.lcdui.Canvas;

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

public class MyCanvas extends Canvas {

public MyCanvas( MIDlet midlet ) {
this.midlet = midlet;
x = 0;
y = 0;

}

protected void showNotify() {
setFullScreenMode( true );

}


protected void paint(Graphics g) {
g.setColor( 0 );
g.fillRect(0, 0, WIDTH, HEIGHT);

g.setColor( 0xFFFFF );
g.drawString(
"Poring is important!",
x,
y,
Graphics.LEFT | Graphics.TOP
);

}

protected void keyPressed(int key) {
midlet.notifyDestroyed();

}

//#if SUPPORT_POINTER
protected void pointerPressed(int x, int y) {
this.x = x;
this.y = y;
repaint();

}
//#endif

//#if SCREEN_240X320
public static final int WIDTH = 240;
public static final int HEIGHT = 320;
//#elif SCREEN_176X220
//# public static final int WIDTH = 176;
//# public static final int HEIGHT = 220;
//#endif

private MIDlet midlet;
private int x;
private int y;

}

8. والان لكي تحصل على برنامجك. باليمين على اسم المشروع ثم اختر Batch Deploy منها اختر ال P990 وال K750 . الان اذهب الى مجلد المشروع لتجد نسختين من برنامجك الولى ل P990 وهي تعمل على شاشه 240x320 وتستجيب لل Pointer والثاني ل K750 وهي تعمل على شاشه ال 176X220 .

ملاحظه: اذا اردت ان تجرب الفرق بين النسختين على جهازك يمكنك تحميل Sony Ericsson SDK وبعدها اضف ال emulators الى Netbeans ثم باليمين على اسم المشروع ثم Properties ثم Platform وهنك حدد ال Emulator الصحيح لكل Configuration .

يمكنك تحميل نسخه من المشروع ومن المقال من المرفقات

Porting.pdf

PortingLessonCode.rar

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

شارك هذا الرد


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

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

  • 0

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

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

وغفر لك ولوالديك

نفعك الله بعلمك ، ولا حرمك الأجر والمثوبة...

وتقبل منك زكاة علمك

وحفظك من كل الشرور ...

0

شارك هذا الرد


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

أود ان اشكرك اخي جزيل الشكر لانك قمت بالرد علي بعد ان مر على الموضوع اكثر من اسبوع دون ان يظهر هناك اي تفاعل. كنت اتمنى ان اجد اي تعليق حتى لو كان سلبيا. اتمنى ان تكون قد استفدت من الموضوع واكرر شكري لك.

0

شارك هذا الرد


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

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

لقد استفدت كثيرا من هذا الموضوع.

ومن ردودك المفيدة في المنتدى

ولن نوفيك جزاء ما قدمت لنا الا أن ندعوا لك في ظهر الغيب ...

وإذا كان بالامكان ، فضلا لا امرا

شرح لكيفية جعل التطبيق يقرأ من ملفات XML مرفقه معه

والله يرعاك ..

0

شارك هذا الرد


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

السلام عليكم

للاسف لا يوجد في J2ME ما يمكنك من قراءه ملفات ال XML ولكن يمكنك كتابه Parser أو استخدام مكتبه جاهزه لذلك ومن اشهرها KXML وهذا رابطها.

KXML

اما اذا اردت وسيله لتبادل البيانات مثلا بين تطبيق J2ME و Server فانا افضل JSON على XML ويمكنك مراجعه هذا المقال:

JSON

0

شارك هذا الرد


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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

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

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