** Error installing suite (39): The JAD matches a version of a suite already installed. Execution completed.
在 WTK 模擬器或 EclipseME 中運行/除錯 MIDlet 時頻繁出現,導致無法重新安裝應用。
WTK 模擬器內部維護一個應用資料庫 (appdb),記錄已安裝套件的 MIDlet-Name、MIDlet-Version、MIDlet-Vendor 三元組。當專案屬性未變更但嘗試重新安裝時,WTK 認為同版本已存在,拒絕安裝。常見觸發場景:
deploy/ 目錄下的 JAD/JAR,但 appdb 仍保留記錄Windows 預設路徑:
C:\Documents and Settings\<用戶名>\j2mewtk\2.5.2\appdb\
或 EclipseME 工作區:
/.metadata/.plugins/org.eclipse.me/emulators/<模擬器名>/appdb/
appdb 目錄下包含:
DefaultColorPhone、DefaultGrayPhone、MediaControlSkin、QwertyDevice 等,各自內含套件資料檔(如 #MIDlet%0020Suite_#MyProject_suite.*)操作:
appdb 目錄suites.utf(將重新生成)
@echo off
set WTK_HOME=C:\WTK2.5.2
set APPDB=%WTK_HOME%\appdb
if not exist "%APPDB%" goto :eof
for /d %%d in ("%APPDB%\*") do (
echo Cleaning %%d ...
del /q "%%d\*MyProject*" 2>nul
del /q "%%d\*MIDlet Suite*" 2>nul
)
del /q "%APPDB%\suites.utf" 2>nul
echo Done.
pause
替換 MyProject、MIDlet Suite 為專案關鍵字,雙擊執行即可。
MIDlet-Version(如 1.0.0.{build}),強制 WTK 視為新版本| 習慣 | 效果 |
|---|---|
| 除錯結束正確點擊模擬器「掛機鍵」或選單 Exit | 觸發 MIDlet.destroyApp(),WTK 正常清理安裝狀態 |
| 避免在斷點處強制 Terminate | 防止 JVM 異常退出,留下髒資料 |
| 定期清理 appdb(專案切換時) | 防止舊專案殘留干擾新專案 |
| 使用 Ant + Antenna 自動化建置部署 | 腳本中加入清理步驟,消除人為疏漏 |
Error 39 本質上是狀態不一致:WTK 以為應用已安裝,實際運行環境卻無對應進程。徹底清理 appdb 是治本之道;配合版本號自動遞增、正確退出流程、自動化腳本,可將此錯誤頻率降至接近零。這也提醒我們:嵌入式開發中,模擬器狀態管理同樣是工程一環,不可忽視。