【问题标题】:Blackberry: Command line build and application auto-start黑莓:命令行构建和应用程序自动启动
【发布时间】:2010-02-26 07:30:29
【问题描述】:

我有一个使用 J2ME Polish 从命令行 (ANT) 构建的应用程序。因此,此应用程序是通过 build.xml 定义的,而不是来自 Blackberry JDE 项目文件。

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

JDE 提供了选项,您可以检查这些选项以启用自动启动,并从 ANT:

  <cldc runonstartup=="true"...

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

有人知道 JDE 中的自动启动选项实际上做了什么/改变了什么吗?

【问题讨论】:

    标签: blackberry mobile


    【解决方案1】:

    因此,不幸的是,这样做的方法是更改​​ J2ME-Polish 源!正如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】:

    另一个波兰用户:)

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

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

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

    我没有对此进行测试,但逻辑似乎是有效的 :) 让我知道它是否有效。

    【讨论】:

    • 那行不通(也行不通)——已经试过了。波兰黑莓应用程序不是 MIDlet,尽管看起来如此。波兰语构建过程将 MIDlet 转换为 Blackberry UIApplication(请参阅j2mepolish.org/cms/leftsection/documentation/platforms/…)。设置 RIM-MIDlet-Flags 仅适用于 MIDlet,因此您描述的方法不起作用。
    • 我说得太早了——显然 RIM-MIDlet-Flags does 对非 MIDlet 不起作用...我一定是做错了什么。我会再试一次,并尝试调试问题所在。
    • 太棒了 :) 让我知道这是否有效。呵呵 抱歉忘了提及您可能需要将这种情况下的数字“1”更改为其他值,具体取决于设备/操作系统我刚刚注意到某些版本将 32 列为自动启动的有效数字。
    • 绝对不行。 JarToCodFinalizer(“Polish Blackberry 构建链”的一部分)将 RIM-MIDlet-Flags 硬编码为“0”,然后传递给 RAPC。如果没有将标志传递给 RAPC,则应用程序不会获得 -autostart 属性。不过,我想我有一个解决方法(这需要更改和构建 J2MEPolish!)。
    • 让我知道补丁,我会确保它被提交 :) 一直在为他们的 BB 支持添加一些丢失的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2010-12-30
    相关资源
    最近更新 更多