הבהרה: אין לי ניסיון אישי עם פיתוח למערכות אנדרואיד נכון לכתיבת פוסט זה. גרסת האנדרואיד האחרונה שהשתמשתי בה היתה גרסה 1.x (אינני זוכר את תת הגרסה), ומאז הרבה FUD עבר בין חברות הסלולר השונות.
קראתי היום דיון שמתנהל כבר זמן מה לגבי פיתוח לסביבת אנדרואיד, וביקשו מאדם שיש לו ניסיון קצת בתחום להסביר במה מדובר, וההסבר שלו נמצא כאן.
זה ניסיון להציג סוג של תרגום של חלק ממה שהוא כתב וגם תוספות שלי לטקסט 🙂
אז יש כיום (החל מ2.3 עד כמה שאני מבין) תמיכה באנדרואיד לפתח ב2 צורות כאשר מדובר בקוד חיצוני:
- שימוש ב JNI ולטעון ספריות משותפות (קבצי so).
- למממש את ה API של אנדרואיד בשפה שלכם, ולרוץ בצורה כמעט לגמרי נקייה מג'אווה.
היתרון של עבודה עם תוכנה עצמאית, היא שניתן לכתוב תוכנה אחת למספר רב של פלטפורמות ובעצם ליצור סוג של ספרייה גבוהה יותר, שעבור כל פלטפורמה היא ממומשת בצורה הטבעית שנדרשת מאיתנו, אבל התוכנה עצמה אינה צריכה להשתנות כמעט בכלל בגלל סוג הפלטפורמה (כמובן שזה תלוי במספר גורמים).
אז כיצד הפיתוח מתבצע ? ובכן נוריד קודם את הספריות הממשות את ה API של אנדרואיד אלינו:
$ svn co https://p-tools.svn.sourceforge.net/svnroot/p-tools/PascalNotes4Android PascalNotes4Android
לאחר מכן, נכתוב את התוכנה הגרפית שלנו:
program pascalnotes4android; {$mode objfpc}{$H+} uses Classes, androidpipescomm, androidui, javalang; {$R *.res} var layout : TAbsoluteLayout; params : TAbsoluteLayout_LayoutParams; tv : TTextView; et : TTextView; btn : TButton; begin // Here add any initialization. // Any initialization code will be run inside Activity.onCreate, // so keep it as short as possible! // It should mostly contain GUI initialization // User interface // Prepares the UI of the program layout := TAbsoluteLayout.Create; tv := TTextView.Create; tv.setText('The first Pascal Android application =)'); params := TAbsoluteLayout_LayoutParams.Create(320, 300, 0, 120); layout.addView(tv, params); params.Free; et := TEditText.Create; et.setText('edit me please'); params := TAbsoluteLayout_LayoutParams.Create(320, 50, 0, 0); layout.addView(et, params); params.Free; btn := TButton.Create; btn.setText('Go!'); { btn.setOnClickListener(buttonClickCallback);} params := TAbsoluteLayout_LayoutParams.Create(320, 50, 0, 60); layout.addView(btn, params); params.Free; Activity.setContentView(layout); // Now tell Java that the initialization has finished myAndroidPipesComm := TAndroidPipesComm.Create; myAndroidPipesComm.InitializationFinished(); // Here you can add any other initialization, // specially non-GUI code // Now we block our execution waiting for callbacks from Java myAndroidPipesComm.MessageLoop(); end.
ועכשיו כל מה שנשאר זה לבצע את הפעולות הבאות:
- לדאוג שיש לנו חבילה של arm-linux cross-compiler כאשר היא תומכת בARMv5 eabi עם softfloat (חלק מהטלפונים לא תומכים ב FPU).
- להתקין את ה SDK של אנדרואיד
- להתקין את Ant של ג'אווה.
- לפתוח את הפרוייקט PascalNotes4Android/pascalsrc/pascalnotes4android.lpi באמצעות לזרוס ולבדוק שמצב הבנייה של אנרואיד מתאים לנו ואז להדר את התוצר.
- להעתיק את pascalsrc/pascalnotes4android ל libs/armeabi/libpascalnotes4android.so (אם הספרייה armebi לא קיימת יש ליצור אותה).
- ליצור את תוצר ה APK באמצעות ant במצב debug.
- לחבר את הטלפון שלך ולהבטיח כי הוא מחובר דרך ADB.
- להתקין את התוכנה בטלפון באמצעות כלי ההתקנה המועדף עלייך (כדוגמת ADB).
וזהו, תהנו מהתוצאה.
בצורה דומה (ע"י תקשורת) הכינו אפשרות לכתוב לאנדרואיד בשפות תסריט
http://code.google.com/p/android-scripting/
אפשר לכתוב ברובי ופרל ולקרוא ל api של אנדרואיד כאילו זה ממומש בשפות עצמן.
בפיתון הוספתי ספריות שכתובות בפיתון נקי למדריך ההתקנה והשתמשתי בהן בתסריטי פיתון ללא בעיה. הבעיה היחידה שלי היא שהסמליל של התסריט על מסך הטלפון הוא הנחשים של פיתון ולא תמונה שאני בחרתי.