FlashDevelop für Blackberry Playbook fit machen

Wer die kostenlose IDE FlashDevelop zum Entwickeln von Playbook Apps nutzt, muss im Vergleich zum kommerziellen FlashBuilder einige Mankos hinnehmen. Allerdings lässt sich mit ein paar Zeilen Script und ein blackberry-playbook-fdbisschen Fantasie z.B. das Signieren oder Remote-Debuggen bequem in die IDE integrieren.


Macros

FlashDevelop bietet unter anderem die Möglichkeit die IDE mit Makros verschiedener Art anzupassen. Eine Variante ist dabei CS-Script. Mit den Makros möchte ich mir vier Buttons in die IDE aufnehmen: Simulator, Auf Simulator ausführen, Auf Simulator Debuggen(remote) und Signieren.

Hier ist mein Script:

using System;
using System.Drawing;
using System.Windows.Forms;
using FlashDevelop;
using PluginCore;
using System.Diagnostics;

public class FDScript
{
    public const string SETTINGS_PATH = @"C:\Users\Devbar\AppData\Local\FlashDevelop\Scripts";
    public const string VM_PLAYER_PATH = @"C:\Program Files (x86)\VMware\VMware Player\vmplayer.exe";
    public const string VM_PATH = "\"C:\\Users\\Devbar\\Documents\\Virtual Machines\\PB_094\\PB_094.vmx\"";
    public const string VM_IP = "192.568.426.431";
    public const string VM_DEBUG_IP = "192.568.30.423";
    public const string P12_CERT = "D:\\SDK\\RimKeys\\rimkey_tablet.p12";
    
    /**
    * Entry point of the script.
    */
    public static void Execute()
    {
        // Get icon for menu items
        Image imgVmImage = Image.FromFile(SETTINGS_PATH + "\\vmware.png");
        Image imgTabletRun = Image.FromFile(SETTINGS_PATH + "\\tablet_run.png");
        Image imgTabletDebug = Image.FromFile(SETTINGS_PATH + "\\tablet_debug.png");
        Image imgTabletSign = Image.FromFile(SETTINGS_PATH + "\\tablet_sign.png");
        
        // Add a custom button to the toolstrip
        ToolStrip toolstrip = Globals.MainForm.ToolStrip;
        toolstrip.Items.Add(new ToolStripButton("", imgVmImage, OnVmWareClick));
        toolstrip.Items.Add(new ToolStripButton("", imgTabletRun, OnTabletRunClick));
        toolstrip.Items.Add(new ToolStripButton("", imgTabletDebug, OnTabletDebugClick));
        toolstrip.Items.Add(new ToolStripButton("", imgTabletSign, OnTabletSignClick));
    }
    
    /**
    * run vmware with the simulator
    */
    public static void OnVmWareClick(Object sender, EventArgs e)
    {
        Process.Start(VM_PLAYER_PATH, VM_PATH);
    }
    
    /**
    * run without debugger
    */
    public static void OnTabletRunClick(Object sender, EventArgs e)
    {
        Run(false);
    }
    
    /**
    * run with debugger
    */
    public static void OnTabletDebugClick(Object sender, EventArgs e)
    {
        Run(true);
    }
    
    /**
    * Handles the click event for the menu items.
    */
    public static void OnTabletSignClick(Object sender, EventArgs e)
    {
        Sign();
    }
    
    /**
    * Runs the blackberry-airpackager to run the application in the simulator.
    * Use the debug flag receive a connection to the remote debugger from simulator.
    */
    private static void Run(bool remoteDebug){
        ProcessStartInfo processInfo = new ProcessStartInfo();
        string pathSwf = null;
        string pathBar = null;
        string pathPng = null;
        string pathArgs = null;
        string path = null;
        
        pathSwf = PluginBase.CurrentProject.OutputPathAbsolute;
        path = pathSwf.Substring(0,pathSwf.LastIndexOf('\\'));
        pathSwf = pathSwf.Substring(pathSwf.LastIndexOf('\\') +1); 
        pathBar = pathSwf.Substring(0,pathSwf.LastIndexOf('.')) + ".bar";
        pathPng = "blackberry-tablet-icon.png";
        
        pathArgs = "-package " +  pathBar + " " +
                   "-installApp -launchApp application.xml " + pathSwf + " blackberry-tablet.xml " + pathPng + " " +
                   "-device " + VM_IP + " " + 
                   "-password pwd";
                   
        if(remoteDebug)
            pathArgs += " -connect " + VM_DEBUG_IP;
        
        processInfo.WorkingDirectory = path;
        processInfo.FileName = "blackberry-airpackager";
        processInfo.Arguments = pathArgs;
        
        Process.Start(processInfo);
    }
    
    private static void Sign(){
        ProcessStartInfo processInfo = null;
        Process process = null;
        string cskPass = null;
        string p12Pass = null;
        string pathSwf = null;
        string pathBar = null;
        string path = null;
        string pathArgs = null;
        
        pathSwf = PluginBase.CurrentProject.OutputPathAbsolute;
        path = pathSwf.Substring(0,pathSwf.LastIndexOf('\\'));
        pathSwf = pathSwf.Substring(pathSwf.LastIndexOf('\\') +1); 
        pathBar = pathSwf.Substring(0,pathSwf.LastIndexOf('.')) + ".bar";
        
        if (InputBox("Password", "Enter CSK password:", ref cskPass) != DialogResult.OK)
            return;
            
        if (InputBox("Password", "Enter P12 password:", ref p12Pass) != DialogResult.OK)
            return;
        
        pathArgs =     "-verbose -cskpass " + cskPass + " " +
                    "-keystore " + P12_CERT + " " +
                    "-storepass " + p12Pass + " " + pathBar + " RDK >> signing.txt";
                    
        processInfo = new ProcessStartInfo();
        processInfo.WorkingDirectory = path;
        processInfo.FileName = "blackberry-signer";
        processInfo.Arguments = pathArgs;

        process = Process.Start(processInfo);
        process.WaitForExit();
        
        pathArgs =     "-keystore " + P12_CERT + " " + 
                    "-storepass " + p12Pass + " " + pathBar + " author >> signing.txt";
                    
        processInfo = new ProcessStartInfo();
        processInfo.WorkingDirectory = path;
        processInfo.FileName = "blackberry-signer";
        processInfo.Arguments = pathArgs;
        
        process = Process.Start(processInfo);
        process.WaitForExit();
    }
    
    public static DialogResult InputBox(string title, string promptText, ref string value)
    {
          Form form = new Form();
          Label label = new Label();
          TextBox textBox = new TextBox();
          Button buttonOk = new Button();
          Button buttonCancel = new Button();

          form.Text = title;
          label.Text = promptText;
          textBox.Text = value;

          buttonOk.Text = "OK";
          buttonCancel.Text = "Cancel";
          buttonOk.DialogResult = DialogResult.OK;
          buttonCancel.DialogResult = DialogResult.Cancel;

          label.SetBounds(9, 20, 372, 13);
          textBox.SetBounds(12, 36, 372, 20);
          buttonOk.SetBounds(228, 72, 75, 23);
          buttonCancel.SetBounds(309, 72, 75, 23);

          label.AutoSize = true;
          textBox.Anchor = textBox.Anchor | AnchorStyles.Right;
          buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
          buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;

          form.ClientSize = new Size(396, 107);
          form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel });
          form.ClientSize = new Size(Math.Max(300, label.Right + 10), form.ClientSize.Height);
          form.FormBorderStyle = FormBorderStyle.FixedDialog;
          form.StartPosition = FormStartPosition.CenterScreen;
          form.MinimizeBox = false;
          form.MaximizeBox = false;
          form.AcceptButton = buttonOk;
          form.CancelButton = buttonCancel;

          DialogResult dialogResult = form.ShowDialog();
          value = textBox.Text;
          return dialogResult;
    }    
}

Installation

  1. Das komplette Paket (Script und Bilder) kann  hier heruntergeladen werden.
  2. Ruft in FlashDevelop Tools->Application Files auf und entpackt dort in einen Unterordner “Scripts” die Dateien aus der Script.zip.
  3. Die Einstellungen im oberen Bereich der Playbook.cs müsst ihr auf eure Umgebung anpassen.
  4. Legt in FlashDevelop unter Macros->Edit Macros einen neuen Eintrag mit folgenden Einstellungen an:
      • AutoRun: True
      • Entries [0]: ExecuteScript|Internal;C://Users//Devbar//AppData//Local//FlashDevelop//Scripts//Playbook.cs
      • Image: <kann leer bleiben>
      • Label: <beliebig>
      • ShortCut: None
  5. FlashDevelop muss neu gestartet werden, damit die Einträge sichtbar werden.

 

vmwareSimulator

Startet VMWare und lädt die in der Playbook.cs konfigurierte VM.

tablet_runAusführen

Packt eure App als Bar-File und startet sie auf dem Simulator.

tablet_debugDebugger

Packt eure App als Bar-File und startet sie auf dem Simulator. Damit das Remote-Debuggen korrekt funktioniert muss vorher per Debug->Start Remote Session FlashDevelop in Wartestellung gebracht werden. Bitte achtet darauf, dass ihr in die Playbook.cs die korrekt IP-Adresse eingerichtet habt.

tablet_signSignieren

Signiert eine bestehende Bar-File mit dem in der Playbook.cs angegebenen Zertifikat. Passwörter werden vom Script abgefragt.

 

Links:

One thought on “FlashDevelop für Blackberry Playbook fit machen

  1. Pingback: App-Flash » FlashDevelop für Blackberry Playbook fit machen – devbar.de

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>