| 挑戰 | 對策 |
|---|---|
| 屏幕尺寸碎片化 | 控件尺寸以屏幕長寬為變量計算;繪製採用圖片平鋪+畫線,縮放只需調整平鋪次數;單一參數化控件類支援所有控件類型 |
| API 差異 | 建立統一工具類封裝層(如 createSubImg),不同機型提供不同實現,業務代碼零修改 |
| 按鍵碼不一致 | 定義虛擬按鍵碼,用 int 位掩碼記錄狀態;提供機型專屬 mapKeyCode 映射函數 |
| 機型特有 Bug | 封裝庫隔離差異,必要時特殊處理 |
// Nokia 專有 API
public static Image createSubImg(Image img, int[] rect) {
Image sub = DirectUtils.createImage(rect[2], rect[3], 0);
sub.getGraphics().drawImage(img, -rect[0], -rect[1], 20);
return sub;
}
// MIDP 2.0 標準 API
public static Image createSubImg(Image img, int[] rect) {
return Image.createImage(img, rect[0], rect[1], rect[2], rect[3], 0);
}
1 << n),int 可容納 32 鍵。keyPressed 置位,keyReleased 清位。mapKeyCode(int keyCode) 返回虛擬鍵 bit,各機型重寫此函數填入實際 keyCode。移植時僅需重寫這三個類的平台相關部分,核心邏輯複用。作者曾 1 分鐘完成 Motorola V600 → Nokia N-Gage 移植。
開發所見即所得動畫編輯器,配合 GraphicsManager 管理圖片資源,進一步降低移植成本。
移植本質是「拆合」:將差異點剝離封裝,業務邏輯保持純粹。但機型 Bug 仍需逐個擊破,前期架構設計決定後期維護成本。