首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在黑莓中升级自己的应用程序

在黑莓中升级自己的应用程序
EN

Stack Overflow用户
提问于 2014-01-23 12:27:02
回答 1查看 225关注 0票数 0

首先,我想告诉你,我对黑莓的发展是陌生的。

不知何故,我在BB 5.0.0及以上版本中开发了一个应用程序。

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

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

我引用了链接,并最初找到了这里引用

无法用上述解决方案完成此任务。我认为上面的网址解决方案需要BB AppWorld作为中介或升级版本来保存在BB应用服务器上。

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

这在安卓和J2ME中是可能的,在iOS中是不可能的,但不知道黑莓的情况。

编辑:

我实现了安装程序的代码,给出的官方黑莓开发者网站,并得到以下例外。看看我的日志。

代码语言:javascript
复制
{"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

更新

我在我的应用程序中为我的目的保存了安装程序代码:

代码语言:javascript
复制
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));  

我得到的结果= 10是CodeModuleManager.CMM_HANDLE_INVALID,现在由于下一个条件抛出异常等等,现在我发现文件实际上是被下载的,但是当它试图保存时,int result = CodeModuleManager.saveNewModule(moduleHandles, true);在这一行我得到了CMM_HANDLE_INVALID。如果有人知道这个问题,请告诉我。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-23 13:54:00

您引用了一篇官方的KB文章:

可编程​安装升级应用程序​ns

这篇文章是这样写的:注意:应用程序本身不能升级。

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

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

除此之外,您在另一个链接中找到的选项和信息:

如何在黑莓中实现自动更新功能

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

更新

我涉水浏览了你提供的日志,并从中找出了一条似乎与此相关的信息:

例外情况: java.io.InterruptedIOException:在~ 120000下载URL:3.0.1.cod后本地连接超时

因此,您有一个网络错误或问题,试图检索鳕鱼。这是一个网络问题,与安装程序完全无关。我建议您了解为什么安装程序试图引用该文件,以及服务器为什么不提供该文件。如果URL是有效的,那么您可能必须更新MIME参数,以便服务器知道.cod文件扩展名应该被视为二进制文件。

进一步更新

您已经对所提供的代码进行了更改,包括删除对同一应用程序的多个cod文件的支持。我可以建议您使用所提供的安装程序和代码来测试下载代码吗?如果您有问题,我们可以更容易地重新创建和/或测试它。

--一项建议

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21308134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档