2014-01-23 4 views
0

Прежде всего, я хотел бы сказать вам, что я новичок в разработке черной рыбы.Приложение для обновления себя в blackberry

Как-то я разработал приложение в BB 5.0.0 и выше.

У меня есть функциональность для реализации, где я могу загрузить приложение BB (например, файл .cod) и обновить его, начиная с в моем приложении.

Модернизированное приложение будет храниться на моем сервере компании, и когда я позвоню в свой раздел и найду обновленную версию, я смогу обновить его программно.

я упомянул this ссылки и первоначально нашел ссылки here

не в состоянии получить эту задачу сделать с вышеуказанным раствором. Я думаю, что над решением URL требуется BB AppWorld в качестве посредника или обновленной версии, которая будет храниться на сервере приложений BB.

Пожалуйста, дайте мне знать, могу ли я обновить свое приложение BB, загрузив и заменив его внутри, выполнив некоторый код, не сохраняя его в мире приложений BB, и если да, то могу ли я достичь этого с помощью вышеупомянутой ссылки.

Это возможно в Android и J2ME и невозможно в iOS, но не знают о Blackberry.

Edit:

Я реализовал установки кода приложения, приведенные в официальном ежевика сайте разработчика и получать следующее исключение. Проверьте мои журналы.

{"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 

Update

код установщика я сохранил для моей цели в моем приложении:

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. Если кто-нибудь знает вопрос, пожалуйста, дайте мне знать.

Заранее спасибо.

+0

Не могли бы вы предоставить ссылку (ссылку) на код установщика, который вы используете? –

+0

Я использую код, приведенный в официальной статье в KB, есть вложение с именем Installer.zip, http://supportforums.blackberry.com/t5/Java-Development/Programmatically-install-and-upgrade-applications/ta-p/443008 – Ankit

+0

В следующий раз, пожалуйста, просто поместите сообщение журнала, которое приходит из вашего приложения, или связано с вашим приложением. Вам даже не пришлось публиковать этот журнал - единственное Исключение, которое имеет значение, - это все, что нам нужно. –

ответ

1

Вы ссылается официальный статью KB:

Programmat​ically install and upgrade applicatio​ns

В этой статье говорится следующее: Примечание: приложение не может сама себя модернизировать.

Итак, чтобы достичь того, что вы хотите сделать, вам нужно будет создать приложение-установщик, как описано в статье базы знаний.

Это означает, что вам придется загружать требуемые файлы с вашего корпоративного сервера в вашу программу, и поэтому у вас могут быть обычные сетевые проблемы. Я отмечаю, что вы сообщили о проблеме с тайм-аутом в качестве комментария в другом потоке. Это связано с тем, что вам жаль края, вам, возможно, потребуется потратить некоторое время на то, чтобы ваш сетевой код работал.

Это в стороне, параметры и информация, которую вы нашли в вашей другой ссылке:

How to implement auto-update feature in blackberry

, мне кажется, будет довольно полное описание ваших вариантов.

Update

Я пробирался через бревно, которую вы предоставили и выудил на одно сообщение, которое, кажется уместным:

Исключение: java.io.InterruptedIOException: Локальное подключение истекло после ~ 120000 URL-адрес загрузки: http://myserver.link/uploads/116/MyApp_3.0.1.cod

У вас есть сетевая ошибка или проблема, пытающаяся извлечь эту треску. Это проблема с сетью и вообще не связана с установщиком. Я предлагаю вам понять, почему установщик пытается ссылаться на этот файл и почему сервер не передает его. Если URL-адрес действителен, вам может потребоваться обновить параметры MIME, чтобы сервер знал, что расширение файла .cod следует рассматривать как двоичный файл.

Дальнейшее обновление

Вы сделали изменения в код поставки, включая удаление поддержку нескольких файлов трески для одного приложения. Могу ли я предложить вам протестировать код загрузки с помощью прилагаемого установщика и кода, и когда вы это заработаете, закрепите рабочий код в своем приложении. Тогда, если у вас есть проблема, нам гораздо легче воссоздать его и/или проверить.

Предложение

Вместо того, делать все это, возможно, было бы лучше для приложения, чтобы проверить, если он является самым актуальным, и если нет, то не пускают, а не запустить браузер на веб-страницы, которая представляет собой загрузку текущего приложения в OTA. Тогда все, что вам нужно поддерживать, это OTA URL - приложение может проверить jad, чтобы увидеть, есть ли версия там же, что и текущая версия. Вы уже написали код, который эффективно выполняет эту часть, вы можете закрепить это в приложении, а затем вам не понадобится программа установки. Просто мысль.

+0

Я использую код, приведенный в официальной статье KB для логики приложения-установщика, теперь в этом коде, когда загружается файл .cod, и на основе этого файла .cod другие треки пытаются скачать там. Я получаю ошибку. Прочитайте журналы в моем вопросе. AFAIK. Я получаю только один файл .cod при создании сборки, а затем другие файлы .cod, которые нужны коду. – Ankit

+0

Я обновил свой код, пожалуйста, предложите .. я все еще застрял. – Ankit

+0

Я также проверил свой сетевой код, заменив другой http-код, но обнаружил, что мой файл загружается путем печати его байтового кода, поэтому сетевой код в порядке, но он вызывает неправильную ошибку при сохранении файла/модуля с помощью CodeModuleManager. Пожалуйста, предложите. – Ankit

Смежные вопросы