代码之家  ›  专栏  ›  技术社区  ›  KevinD

blackberry:命令行构建和应用程序自动启动

  •  1
  • KevinD  · 技术社区  · 16 年前

    我有一个应用程序,它是使用j2me polish从命令行(ant)构建的。因此,此应用程序是通过build.xml定义的,而不是从BlackBerry JDE项目文件定义的。

    我需要做的是让这个应用程序自动启动。一旦应用程序第一次运行,这很容易做到( example )但是,这确实要求应用程序由用户手动运行(我希望避免这种情况)。

    JDE提供了一些选项,您可以选中这些选项以启用自动启动,并且可以从Ant:

      <cldc runonstartup=="true"...
    

    会成功的。问题是,我如何将其集成到一个波兰构建中(即,集成到一个波兰build.xml中,它也在为其他平台构建)?

    有人知道jde中的auto start选项实际上做了什么/它改变了什么?

    2 回复  |  直到 16 年前
        1
  •  1
  •   KevinD    16 年前

    所以,不幸的是,实现这一点的方法是更改j2me的波兰源代码!如本文所述 bug report j2me波兰构建框架(版本2.1.4)没有将rim-midlet-flags-x jad属性传递给rapc。

    这些更改相对简单-如果在jad中定义了rim-midlet-flags-1值,则仅传递该值,否则将其设置为零(正如原始的2.1.4源代码所做的那样)。

    差异(来自2.1.4)来源:

    Index: /enough-polish-build/source/extensions/de/enough/polish/blackberry/JarToCodFinalizer.java
    ===================================================================
    --- /enough-polish-build/source/extensions/de/enough/polish/blackberry/JarToCodFinalizer.java   (revision 315)
    +++ /enough-polish-build/source/extensions/de/enough/polish/blackberry/JarToCodFinalizer.java   (revision 316)
    @@ -36,6 +36,7 @@
     import java.util.Calendar;
     import java.util.Locale;
     import java.util.Map;
    +import java.util.List;
     import java.util.Properties;
    
     import org.apache.tools.ant.BuildException;
    @@ -185,6 +186,13 @@
                }
            }
            File iconFile = null;
    +       Map jadProperties;
    +       try { 
    +           jadProperties = FileUtil.readPropertiesFile( jadFile, ':' );    
    +       } catch (Exception e) {
    +           e.printStackTrace();
    +           throw new BuildException("Unable to read JAD file " + e.toString() );
    +       }
            if (mainClassName != null) {
                try {
                    /*
    @@ -230,12 +238,26 @@
                            "MicroEdition-Configuration: CLDC-1.1",
                            //"MIDlet-1: Demo," + iconUrl + ",",
                            "MIDlet-1: " + env.getVariable("MIDlet-Name") + "," + iconUrl + ",",
    -                       //"MIDlet-Icon: " + iconUrl,
    -                       "RIM-MIDlet-Flags-1: 0"
    +                       //"MIDlet-Icon: " + iconUrl
                    };
    
    +               /* Ensure that if RIM-MIDlet-Flags is defined in the JAD, it is
    +                * passed on to RAPC to create the COD file.
    +                * See https://developer.berlios.de/bugs/?func=detailbug&group_id=1246&bug_id=16901
    +                * for details.
    +                */
    +               ArrayList newEntriesList = new ArrayList(Arrays.asList(newEntries));
    +               final String flagsKey = "RIM-MIDlet-Flags-1";
    +               String flagString = (String)jadProperties.get(flagsKey);
    +               if (flagString == null) {
    +                   flagString = "0";
    +               }
    +               flagString = flagString.trim();
    +               System.out.println("JarToCodFinalizer setting " + flagsKey + ": " + flagString);
    +               newEntriesList.add(flagsKey+ ": "  + flagString);
    +
                    File rapcFile = new File( jadFile.getParent(), codName + ".rapc");
    -               FileUtil.writeTextFile( rapcFile, newEntries );
    +               FileUtil.writeTextFile( rapcFile, newEntriesList );
                } catch ( IOException e ) {
                    // this shouldn't happen
                    e.printStackTrace();
    @@ -367,7 +389,6 @@
                // now rewrite JAD file so that it is ready for OTA download:
                // (first backup JAD file:)
                //FileUtil.copy(jadFile,  new File(jadFile.getParent(), jadFile.getName() + ".bak") );
    -           Map jadProperties = FileUtil.readPropertiesFile( jadFile, ':' );    
                Object[] keys = jadProperties.keySet().toArray();
                for (int i = 0; i < keys.length; i++) {
                    String key = (String) keys[i];
    
        2
  •  0
  •   drubin    16 年前

    另一位波兰用户:)

    看一看 BB 论坛第二篇帖子。然后用我们所知道的波兰语和 jad attributes

    将此添加到build.xml的jad部分

    <jad>
     <attribute  name="RIM-MIDlet-Flags" 
       value="1" 
      if="polish.vendor == BlackBerry" />
    </jad>
    

    我还没有测试过,但逻辑似乎是有效的:)让我知道它是否有效。