זה מכשיר אנדרואיד, אבל קצת יותר מסובך מהרגיל.

Xiaomi ZMI Z1 הוא מכשיר מסקרן. נתחיל עם מעט פרטים טכניים:

  • מערכת הפעלה: Android 4.4.4 (KitKat)
  • RAM: 512MB
  • ROM: 4GB
  • תמיכה ב4G,כולל VoLTE בתדרים ישראליים (לפחות בחלק. בדקתי למיטב זכרוני בסים של חברת סלקום).
  • Chipset: Qualcomm MSM8905
  • מסך: 2.8אינץ’
  • מצלמה: 2MP
  • סוללה: 5,000mAh
  • מקשים קלאסיים.

בקיצור, מדובר במכשיר נחמד, שיכול להתאים למי שמחפש מכשיר פשוט וטוב. מכשיר מקשים, נוח, עם מצלמה, תמיכהב4G, ועדיפות לאנדרואיד - מערכת נוחה להתאמה ושימוש.

אופס… כל זה בתאוריה. גיליתי שלמרות שמדובר במכשיר אנדרואיד,לא בדיוק מדובר ב”נוח להתאמה”.

שלב ראשון - ROOT ,התקנת אפליקציות, קושחה.

בשלב זה לא ארחיב יותר מידי, כי המידע נמצא באינטרנט. בגדול, אפליקציות ניתן להתקין דרך תוכנת הגיבוי והשחזור המובנית (מתקין החבילה הקלאסי של המכשיר חסום להתקנה מ”מקורות לא ידועים” ואי אפשר לפתוח). רוט, ניתן להשיג על ידי שימוש בריקברי מקוסטם שנוצר למכשיר דומה מאוד-Micromax Bharat 1.ואחרי שיש רוט… מה הבעיה להשיג קושחה, עם פקודת dd?

lock/bootdevice/by-name/system of=/sdcard/system.img bs=2048

אומנם עדיין אין לנו לואדרים (firehorse,קבצי mbn - מדובר פה במעבד Qcom), ואף יתכן שאם אחפש אמצא כאלו, אבל למה צריך לואדרים כשאפשר לצרוב דרך fastboot?

fastboot flash system system.img

בניגוד למכשירי אנדרואיד מקשים אחרים רבים, כאן ניתן להגיע בקלות לfastboot, אפילו אם פגמנו בטעות את אחת המחיצות והמכשיר לא נדלק. הדלקה ובמקביל לחיצה על מקש #. מניסיון , זה עובד גם אם מחיצת system נפגמה (לגבי מחיצות אחרות,כגון boot, לא בדקתי). מחיצותsystem, boot, recovery הועלו לפורום 4PDA, וכן כלים לביצוע רוט, הוספת שירותי גוגל פליי למכשיר וכדומה. השרשור על המכשיר בפורום 4PDA.

שלב שני: מתחילים לעבוד. שינוי שפה ומקלדת

כאן כבר מתחילים הקשיים. למרות שבהגדרות המכשיר יש את האופציה להחליף שפות ושיטת קלט

זה לא יעיל. במקלדת המובנית יש רק סינית ואנגלית, וכן באופציות החלפת השפה.

אומנם בדרך כלל זו לא בעיה, לא נדיר במכשירים מהסוג הזה, ויש לי ניסיון כבר בלוקליזציה של מכשירים. אבל פה היו דברים מיוחדים…

. לאחר התקנת מקלדת אחרת (QinPad בעברית) אי אפשר היה לבחור בה דרך ההגדרות.

  1. גם לאחר הוספת התיקיות

values-iw

values-iw-rIL

בframework-res.apk, עדיין לא הייתה אופציה להחליף שפה לעברית. למעשה, בקושחה המקורית כבר יש עוד כמה שפות חוץ מסינית ואנגלית (רוסית וערבית, למשל), אבל אי אפשר לבחור בהם. העסק מתחיל להיות מוזר… אבל לא נורא, אפשר לשנות את הגדרות השפה והמקלדת דרך adb. לשינוי שפת הממשק:

country IL; setprop ctl.restart zygote

כמובן, מדובר פה בפקודה לשינוי לעברית, מי שרוצה לשפה אחרת, צריך לבחור מזהים אחרים. כמו כן, כמובן שלא מדובר פה בתרגום המערכת, אלא רק בהגדרה שבמקרה שיש סטרינגים בעברית, להשתמש בהם.

ולגבי מקלדת? נקבל את רשימת המקלדות המותקנות במכשיר עם

ime list

כפי שאפשר לראות, במכשיר מותקנות 2 מקלדות:

  1. com.iqqijni.dv12key

  2. us.chronovir.qinpad

הראשונה היא המקלדת המקורית של המכשיר, השניה היא המקלדת עם העברית שהתקנתי. עכשיו, נריץ את הפקודה הבאה להפעלת שירות המקלדת QinPad (אפשר לראות מה הערך הנכון בתמונה מהפקודה הקודמת)

su ime set us.chronovir.qinpad/.QinPadIME

מה לגבי פיתרון קבע? לא התעמקתי. או שהייתי מוצא את מה לערוך בהגדרות, או שהייתי כותב אפליקציה שתריץ את הפקודות האלו (כRoot, כמובן). כרגע, בשלב המחקר והפיתוח, זה מספיק.

שלב שלישי: מתחילים לתרגם

אחת הבעיות המרכזיות בתרגום מכשיר לעברית, היא כיווניות התצוגה. בעוד שברוב השפות, התצוגה היא משמאל לימין (LTR), בעברית זה הפוך. מימיןלשמאל (RTL). יש כמובן דרכים לטפל בזה, אבל קיוויתי שבמכשיר הזה לא אצטרך לעשות את זה. כמו שהזכרתי למעלה, בקושחה מובנית גם השפה הערבית, שגם היא נכתבת מימין לשמאל. ולמרות שהיא לא ניתנת לבחירה בדרך פשוטה, הרשיתי לעצמי להיות אופטימי. וצדקתי. לאחר הרצת הפקודה לשינוי שפת הממשק לעברית, השתנתה גם פריסת התצוגה.

טוב, נעבור לתרגום. אז התחלתי בלהעתיק את קבצי הסטרינגים מROM CrDroid בגרסת אנדרואיד זהה (4.4.4) שנוצר למכשיר אחר. כמובן שזה לא עוזר לכל הסטרינגים, כי מדובר פה בגרסת אנדרואיד מיוחדת מאוד, שעברה התאמה למקשים, אבל זו התחלה טובה. את השאר אפשר לתרגם ידנית (ועשיתי את זה לכמה סטרינגים בודדים). אפליקציית “המבחן” שבאמצעותה תכננתי לבדוק שהכל בסדר, הייתה אפליקציית ההודעות. ופה העסק מסתבך.

אכן יש ישור ימין לשמאל, אבל כמו שאפשר לראות - המילים “ברחו” יותר מידי ימינה, והאותיות הראשונות נחתכו. ניסיתי קצת לרפרף על הAPK ולמצוא את הxml האחראי על הRTL, ולא מצאתי. לא אומר שזה לא קיים…(וכמובן, אפילו חיטטתי קצת בsmali). אז החלטתי לנסות כיוון אחר - עריכת התצוגה בתפריט הזה. אבל גם פה, לא מצאתי את הקובץ האחראי…

אז ניסיתי כיוון אחר: להוסיף לסטרינג הבעייתי - במקרה שלנו, “הודעה חדשה” כמה רווחים בהתחלה, כדי שהם אלו שיעלמו מהמסך במקום האותיות הראשונות. לא עבד. גםלא הוספת תוויםאחרים,למשל _ . מה כן עבד?להוסיף עוד אות. שהסטרינג יהיה “ההודעה חדשה” זה כבר עבד - אבל בעיה מכיוון אחר. הסטרינג הזה בשימוש בעוד מקום, ושם מוצגות כל האותיות, כולל האות המיותרת.

אז פתחתי את האפליקציה עם MT MANAGER, העתקתי את הid של הסטרינג וחיפשתי אותו בclasses.dex כפי שאפשר לראות, יש תוצאה אחת.

זה קצת מוזר, כי בטלפון הסטרינג קיים פעמיים. בכל מקרה, החלפתי את ההפניה בSMALI לסטרינג אחר שמכיל את אותם המילים. והפעם… זה עבד! בגלל ששני הסטרינגים נמצאים במקומות שונים, אני יכול לערוך אחדבלי להשפיע עלהשני!. אז… אני יכול עכשיו להוסיף ידנית סטרינגים ולשנות את ההפניות בקובץ הdex ככה שהסטרינגים שצריכים תיקון יופיעו רק במקום אחד, וככה שינוי בהם לא ישפיע על מקומות אחרים. אבל זו עבודה מסורבלת. אז חשבתי על רעיון אחר. הרי הסטרינג הזה הופיע רק פעם אחת בdex, וכששיניתי אותו השפיע רק על דבר אחד - על המסך התקין, ולא על התפריט עם המילים החתוכות. וזה אומר… שלכאורה התפריט עם המילים החתוכות מוגדר כולו בקבצי XML, ועכשיו יש לי איך לחפש את הקובץ הרלוונטי - לחפש את הסטרינג הספציפי בXML, וככה למצוא את הXML הרלוונטי, ושם כנראה נוכל להגדיר את המרחק של המילה מגבול התצוגה - ולמנוע את החיתוך! אז בואו ננסה… נבחר Serch XML

מכיוון שאני מחפש לפי ID, ביטלתי כמובן את האופציה ID2Name וזה קיים בשני קבצים.

השני נראה רלוונטי יותר. נבדוק. פירקתי את הAPK במחשב, עם APKEditor. ואכן, הקובץ השני מכיל מבנה של כל התפריט.

ניסיתי כל מיני מניפולציות עליו, וגם על קובץ הXML השני (הראשון בתוצאות החיפוש). לא הייתה התקדמות משמעותית. אבל אז עלה לי רעיון: עכשיו כתוב לי איזה סטרינג מדוייק זה כל לחצן, ולא נצטרך לנחש… אז פשוט הוספתי לכל לחצן אות ושני רווחים בהתחלה, כדי לסדר את הבעיה. ובתפריט הזה, זה עבד.

זהו לבינתיים, אין לי כרגע את הזמן להמשיך את העבודה על המכשיר המעניין הזה, למרות שנראה שהוא עשוי להיות די מוצלח.

אולי בעתיד…