2010-02-26 127 views
1

我用J2ME波兰这是命令行(ANT)构建的应用程序。因此,此应用程序是通过build.xml定义的,而不是来自Blackberry JDE项目文件。黑莓:命令行构建和应用程序自动启动

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

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

<cldc runonstartup=="true"... 

会做的伎俩。问题是,我如何将这个集成到一个波兰buiild中(例如,将其纳入一个波兰build.xml中,该build.xml也在为其他平台构建)?

任何人都知道在JDE的自动启动选项实际上做/什么变化?

回答

1

所以,要做到这一点的方法是,不幸的是,改变J2ME - 波兰源!如此bug report中所述,J2ME Polish构建框架(版本2.1.4)不会将RIM-MIDlet-Flags-x JAD属性传递给RAPC。

的变化是相对简单的 - 仅仅传递如果在JAD中定义的RIM-的MIDlet-标志-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]; 
+0

承诺一些更改请参阅波兰线程http:// www。j2mepolish.org/forum/viewtopic.php?p=3379#3379 – drubin 2010-04-07 21:09:51

0

另一个抛光用户:)

看看BB论坛第二届职。然后使用我们所知道的波兰和jad attributes

添加到您的build.xml您的JAD部分

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

我没有测试过这一点,但逻辑似乎是有效的:)让我知道,如果它的工作与否。

+0

这不会(不)工作 - 已经尝试过了。 波兰黑莓应用程序不是MIDlet,尽管出现。波兰的构建过程将MIDlet转换为黑莓UIA应用(参见http://www.j2mepolish.org/cms/leftsection/documentation/platforms/blackberry.html#blackberry-gui)。 设置RIM-MIDlet标志仅适用于MIDlet,因此您描述的方法不起作用。 – KevinD 2010-03-01 07:08:01

+0

我说得太快 - 显然RIM-MIDlet-Flags *不能工作不是非MIDlet ...我一定在做错了什么。我会再次尝试并尝试调试什么是错误的。 – KevinD 2010-03-01 10:29:05

+0

伟大:)让我知道如果这个工程。嘿嘿 对不起忘了提及你可能需要根据设备/ OS我只注意到一些版本列表32作为自动启动的有效号码中的“1”,这种情况下要更改为别的东西。 – drubin 2010-03-01 11:00:13