Sep 13, 2012
Wie Ripple an den Nerven rippelt
Das Entwickeln in JavaScript und HTML5 ist teilweise abenteuerlich. Wer im Blackberry-Land unterwegs ist, soll laut Community den Ripple Emulator benutzen. Leider kommt das Ding aus dem Alpha- und Beta-Stadium nicht richtig heraus und kann sich auch nicht recht entscheiden ob es jetzt Entwicklungsumgebung oder Debugger sein möchte.
Wie man mit einer kleinen Batch das Build & Deploy aus Visual Studio erledigen kann, zeig ich hier. Das klappt sogar für Blackberry Smartphone und Tablet und besser als mit Ripple.
Das Script
@echo off :: ----------------------------------------------------------------- :: Default Settings :: Target :: 1 = Blackberry Playbook :: 2 = Blackberry Smartphone SET target=1 :: Web Inspector :: J = ON, N = Off SET web_inspector=N :: Signaturpassword :: Password to sign SET sign= :: Silent Generation SET silent=N :: Installation to device (Playbook only) SET install=N SET install_password= SET install_device= :: ----------------------------------------------------------------- :: SDKs :: WebWorks Tablet SDK SET path_webworks_tablet_sdk="D:\SDK\BlackBerry WebWorks SDK for TabletOS 2.2.0.5\bbwp" :: WebWorks Smartphone SDK SET path_webworks_smartphone_sdk="D:\SDK\BlackBerry WebWorks SDK 2.3.1.5" :: ----------------------------------------------------------------- :: Tools :: 7Zip SET path_7zip="C:\Program Files\7-Zip\7z.exe" :: ----------------------------------------------------------------- :: Exclude Directory :: Exclude .svn, bin etc. folders SET exclude_expression=-xr@exclude.txt :: ----------------------------------------------------------------- :: Here is the Script! Stop editing here! :: Project SET path_project=%1 SET project=%2 IF "%path_project%"=="" GOTO exit_usage IF "%project%"=="" GOTO exit_usage :: Trying to get some initial variables from project CALL %path_project%\vars.cmd IF NOT EXIST %path_project% GOTO exit_wrong_project IF "%silent%"=="J" GOTO automated ECHO 1 :Blackberry Playbook ECHO 2 :Blackberry Smartphone :: Ask target :ask_for_target SET /P ask_target=Select a target [%target%]: IF "%ask_target%"=="" GOTO ask_for_web_inspector IF %ask_target% LSS 1 GOTO ask_for_target IF %ask_target% GTR 2 GOTO ask_for_target SET target=%ask_target% :: Ask Web Inspector :ask_for_web_inspector SET /P ask_web_inspector=Activate Web Inspector? [%web_inspector%]: IF "%ask_web_inspector%"=="" GOTO ask_for_sign IF "%ask_web_inspector%"=="J" SET web_inspector=J IF "%ask_web_inspector%"=="N" SET web_inspector=N :: Ask for Signature :ask_for_sign SET /P sign=Password to sign: :automated :: Package IF "%target%"=="1" SET package=%path_project%\Packages\Playbook IF "%target%"=="2" SET package=%path_project%\Packages\Blackberry IF NOT EXIST %package%\NUL MD %package% IF "%target%"=="1" GOTO target_1 IF "%target%"=="2" GOTO target_2 :target_1 DEL %package%\*.zip 2> NUL DEL %package%\*.bar 2> NUL :: zip %path_7zip% a -tzip %exclude_expression% "%package%\%project%.zip" %path_project%\* :: inject the correct config.xml MD %TEMP%\bb_webworks_build COPY %path_project%\config.tablet.xml %TEMP%\bb_webworks_build\config.xml %path_7zip% a -tzip "%package%\%project%.zip" %TEMP%\bb_webworks_build\config.xml DEL %TEMP%\bb_webworks_build\config.xml RD %TEMP%\bb_webworks_build :: pack IF "%web_inspector%"=="J" SET param_web_inspector=-d IF NOT "%sign%"=="" SET param_sign=-g %sign% %path_webworks_tablet_sdk%\bbwp "%package%\%project%.zip" %param_web_inspector% %param_sign% -o "%package%" IF "%install%"=="J" %path_webworks_tablet_sdk%\blackberry-tablet-sdk\bin\blackberry-deploy.bat -installApp -password %install_password% -device %install_device% -package "%package%\%project%.bar" GOTO exit :target_2 DEL %package%\*.zip 2> NUL IF NOT EXIST %package%\OTAInstall\NUL MD %package%\OTAInstall IF NOT EXIST %package%\StandardInstall\NUL MD %package%\StandardInstall DEL %package%\OTAInstall\*.cod 2> NUL DEL %package%\OTAInstall\*.jad 2> NUL DEL %package%\StandardInstall\*.cod 2> NUL DEL %package%\StandardInstall\*.alx 2> NUL DEL %package%\StandardInstall\*.csl 2> NUL DEL %package%\StandardInstall\*.cso 2> NUL :: zip %path_7zip% a -tzip %exclude_expression% "%package%\%project%.zip" %path_project%\* :: inject the correct config.xml MD %TEMP%\bb_webworks_build COPY %path_project%\config.smartphone.xml %TEMP%\bb_webworks_build\config.xml %path_7zip% a -tzip "%package%\%project%.zip" %TEMP%\bb_webworks_build\config.xml DEL %TEMP%\bb_webworks_build\config.xml RD %TEMP%\bb_webworks_build :: pack IF "%web_inspector%"=="J" SET param_web_inspector=-d IF NOT "%sign%"=="" SET param_sign=-g %sign% %path_webworks_smartphone_sdk%\bbwp "%package%\%project%.zip" %param_web_inspector% %param_sign% -o "%package%" GOTO exit :exit_usage ECHO Usage: %0 [path to project] [projectname] GOTO exit :exit_wrong_project ECHO The specified project path does not exist. GOTO exit :exit
Einbinden in Visual Studio
Um das ganze jetzt aus Visual Studio aufrufen zu können, könnt ihr das Script als “Externes Tool” einrichten (unter Extras). Der Aufruf sollte dann etwa wie im Screenshot aussehen.
Die exclude.txt
Im Visual Studio-Projektverzeichnis tummeln sich natürlich einige Dateien, die nicht ausgeliefert werden sollen. Um diese vom Zippen auszuschließen kann man eine exclude.txt anlegen und entsprechende Einträge hinzufügen.
.svn bin obj Packages Properties Web.config Web.Debug.config Web.Release.config config.xml config.tablet.xml config.smartphone.xml *.cmd *.csproj *.csproj.user *.lnk
Die vars.cmd
Manchmal kommt man in die Verlegenheit, dass man nicht immer signieren oder das Package auf das Playbook laden möchte. Um solche Steuerungen vorzunehmen, kann man im Projektverzeichnis eine vars.cmd anlegen. Das Script kann dann zum Vorbelegen einiger Einstellungen genutzt werden.
:: ----------------------------------------------------------------- :: Default Settings :: Target :: 1 = Blackberry Playbook :: 2 = Blackberry Smartphone SET target=1 :: Web Inspector :: J = ON, N = Off SET web_inspector=N :: Signaturpassword :: Password to sign SET sign= :: Silent Generation SET silent=N :: Project SET project=CoolApp :: Installation to device (Playbook only) SET install=N SET install_password=supersecret SET install_device=258.0.0.1
Fazit
Das ganze ist natürlich Quick and Dirty, funktioniert für mich aber wesentlich besser als das Ripple Package & Deploy. Bitte benutzt das Script mit Vorsicht, da es in eurem Projektverzeichnis rumschreibt (den Packages Folder anlegt). Ich möchte nicht dafür verantwortlich gemacht werden wenn euer Source Control, Automatic Build oder was auch sonst noch so am Start ist, bei euch rumspinnt
.