在blackberry中升级自身的应用程序

在blackberry中升级自身的应用程序,blackberry,Blackberry,首先,我想告诉你,我是blackeberry development的新手 不知何故,我在BB5.0.0及以上版本中开发了一个应用程序 我有一个功能来实现我可以下载BB应用程序(如.cod文件)并升级它,从我的应用程序中的 升级后的应用程序将保留在我的公司服务器上,当我呼叫我的服务器并找到升级版本时,我可以通过编程方式升级它 我引用了链接,最初发现了引用 无法使用上述解决方案完成此任务。 我认为上面的URL解决方案需要BB AppWorld作为中介或升级版本保存在BB AppServer上 请让

首先,我想告诉你,我是blackeberry development的新手

不知何故,我在BB5.0.0及以上版本中开发了一个应用程序

我有一个功能来实现我可以下载BB应用程序(如.cod文件)并升级它,从我的应用程序中的

升级后的应用程序将保留在我的公司服务器上,当我呼叫我的服务器并找到升级版本时,我可以通过编程方式升级它

我引用了链接,最初发现了引用

无法使用上述解决方案完成此任务。 我认为上面的URL解决方案需要BB AppWorld作为中介或升级版本保存在BB AppServer上

请让我知道,我是否可以升级我的BB应用程序下载和更换,从它里面执行一些代码,而不保持在BB应用程序世界,如果是的话,那么我是否可以实现这一点与上述链接

这在Android和J2ME中是可能的,在iOS中是不可能的,但我不知道黑莓

编辑:

我实现了blackberry官方开发者网站上给出的安装程序应用程序代码,并得到以下异常。检查我的日志

{"FileSize":2338776,"FileName":"MyApp_3.0.1.cod","LatestBuild":"2","LatestVersion":"3.0.1","DownloadURL":"http://myserver.link/uploads/116/MyApp_3.0.1.cod"}
 0:08:38.025: MyApp is being upgraded to version 3.0.1
 0:10:31.509: [AppWorld] - 01/23 11:38:00    INFO  Updater run() Update check at: Thu Jan 23 11:38:00 GMT 2014      
 0:10:31.511: [AppWorld] - 01/23 11:38:00    DEBUG  AbstractDatabase readDatabase()      
 0:10:31.513: [AppWorld] - 01/23 11:38:00    DEBUG  Updater run() Updater Content Installs 5      
 0:10:31.516: [AppWorld] - 01/23 11:38:00    DEBUG  Connecting to: 80bba47723dae059a32abfff7844cea89fbb7bc1e90e3ed8159e626b8427aeac825047d8b3dbc418dbf3b04b6dfd17a6f063f3d7cd6a0ed860be0c9f81cf58f488916d58a1d5b3fc52f1806693b9f8179b9fc9de5643c62f2bf92f4945716455af200982fa
 0:10:31.518: 1618056b5bddb91f830ae1d11076db1ec2adb6      
 0:10:31.519: [AppWorld] - 01/23 11:38:00    DEBUG  Connection Method: DEVICE      
 0:10:31.940: [AppWorld] - 01/23 11:38:00    INFO  AppStoreConnection: HTTP 200 , Content-Length: 2497      
 0:10:31.942: [AppWorld] - 01/23 11:38:00    INFO  Appworld server reporting minimum version: 4.0.0.55 our local version is: 2.1.4.13      
 0:10:31.944: [AppWorld] - 01/23 11:38:00  22  ERROR  An error has occur while updating.  Updater load() id1  null  
 0:10:31.948: VM:PISVt=0,h=4d1e,id=d15a33128dfbb5d9
 0:10:31.949: VM:LNTDa=commit,t=1,p=net_rim_bb_appworld_updater,h=135
 0:10:31.951: [AppWorld] - 01/23 11:38:00  22  ERROR  An error has occur while updating.    null  
 0:10:31.954: VM:PISVt=0,h=4d1e,id=d15a33128dfbb5d9
 0:10:31.956: VM:LNTDa=commit,t=1,p=net_rim_bb_appworld_updater,h=135
 0:10:31.957: [AppWorld] - 01/23 11:38:00    INFO  Updater rescheduleUpdateTime() Attempting to schedule Next Update at Thu Jan 23 12:08:00 GMT 2014      
 0:10:31.959: AM: App net_rim_bb_appworld_updater is trying to schedule for time: 1390478880504
 0:10:31.960: AM: Scheduled net_rim_bb_appworld_updater for 1390478880000
 0:10:31.962: [AppWorld] - 01/23 11:38:00    INFO  AppWorld Updater Rescheduled @ Thu Jan 23 12:08:00 GMT 2014      
 0:10:31.971: Process net_rim_bb_appworld_updater(303) cleanup started
 0:10:31.972: Process net_rim_bb_appworld_updater(303) cleanup done
 0:10:38.055: Exception: java.io.InterruptedIOException: Local connection timed out after ~ 120000 downloading URL: http://myserver.link/uploads/116/MyApp_3.0.1.cod
 0:10:38.059: FD Back On
 0:10:38.061: Exception during install of MyApp java.lang.NullPointerException
 0:10:38.064: MyApp 3.0.1 failed to upgrade.
 0:10:38.117: FocusHistory: Focus gained; App net_rim_services_impl; Component net.rim.device.api.ui.component.ButtonField
更新

我在我的应用程序中保留的安装程序代码:

CodeModuleGroup cmGroup = new CodeModuleGroup(appInfo.getModuleGroupName());
cmGroup.setFriendlyName(appInfo.getModuleGroupFriendlyName());
cmGroup.setVersion(appInfo.getVersion());   
cmGroup.setVendor(appInfo.getVendor());

//Download and save all of the cod files.
//for(int count = 0; count < numOfCods; ++count)
//{
    byte[] codData = downloadFile(appInfo.getDescriptorURL());

//  if (codData != null)
//  {
    //Create the new cod file.
    moduleHandles = CodeModuleManager.createNewModule(codData.length, codData, codData.length);

    //Save the module
    int result = CodeModuleManager.saveNewModule(moduleHandles, true);
    log("Result code :"+result);
    //Ensure that the cod file was saved.
    if (result != CodeModuleManager.CMM_OK && result != CodeModuleManager.CMM_OK_MODULE_OVERWRITTEN)
    {
            //The cod file was not saved.
        throw new Exception("Failed to save cod."+result);
    }

    //Add the CodeModule to the CodeModuleGroup.
    cmGroup.addModule(CodeModuleManager.getModuleName(moduleHandles));  
CodeModuleGroup cmGroup=newcodemodulegroup(appInfo.getModuleGroupName());
cmGroup.setFriendlyName(appInfo.getModuleGroupFriendlyName());
cmGroup.setVersion(appInfo.getVersion());
cmGroup.setVendor(appInfo.getVendor());
//下载并保存所有cod文件。
//对于(int count=0;count
我得到的结果=10是CodeModuleManager.CMM\u HANDLE\u无效,现在由于下一个条件引发异常等等,现在我发现文件实际上正在下载,但当它试图保存时,
int result=CodeModuleManager.saveNewModule(moduleHandles,true)
在这一行,我发现CMM_HANDLE_无效。如果有人知道这个问题,请告诉我


提前感谢。

您引用了一篇官方知识库文章:

那篇文章说: 注意:应用程序无法自行升级

因此,为了实现您想要做的事情,您必须创建一个安装程序应用程序,如KB文章中所述

这意味着您必须在程序中从公司服务器下载所需的文件,因此您可能会遇到常见的网络问题。我注意到您在另一个线程中报告了超时问题作为注释。这与地域有关抱歉,您可能需要花一些时间使网络代码正常工作

除此之外,您在其他链接中找到的选项和信息:

在我看来,这是对你选择的一个相当完整的描述

更新

我浏览了您提供的日志,找到了一条似乎相关的信息:

异常:java.io.InterruptedIOException:本地连接在下载约120000个URL后超时:

因此,您在尝试检索该cod时遇到网络错误或问题。这是一个网络问题,与安装程序无关。我建议您找出安装程序尝试引用该文件的原因以及服务器不提供该文件的原因。如果URL有效,则您可能必须更新MIME参数,以便服务器知道.cod文件扩展名应被视为二进制文件

进一步更新

您已对提供的代码进行了更改,包括删除了对同一应用程序的多个cod文件的支持。我建议您使用提供的安装程序和代码测试下载代码,并在正常工作后,将正常工作的代码插入应用程序。如果您有问题,我们可以更轻松地重新创建It和/或试验

建议


与其做所有这些,不如让应用程序检查它是否是最新的,如果不是,不要启动,而是启动一个网页的浏览器,该网页是当前应用程序的OTA下载。然后,您需要维护的只是OTA URL-应用程序可以检查jad,查看其中的版本是否与当前版本。您已经编写了有效完成这一部分的代码,您可以将其插入应用程序,然后您就不需要安装程序了。只是想一想。

我正在使用官方KB文章中为安装程序应用程序逻辑提供的代码,现在在下载.cod文件时,在.cod文件的基础上使用该代码e尝试在那里下载其他代码时,我遇到了错误。请阅读我问题中的日志。如果我在创建构建时只得到一个.cod文件,那么代码需要什么其他.cod文件。我还检查了我的网络代码,替换了其他http代码,但发现我的文件是通过打印字节码下载的,所以网络代码很好,但我使用CodeModuleManager保存文件/模块时,t抛出错误句柄错误。请建议。我使安装程序应用程序代码正常工作,我直接尝试安装cod文件,该文件是在登录可交付成果\standard[版本号]后生成的,但后来我知道我们需要提取该.cod文件并