2010-12-13 4 views
1

Мы подписали приложение 4,7 Blackberry с инструментом для подписи кода 4.6. Но при запуске приложения второй раз он генерирует «исключение KeyCodeNumber».Почему исключение KeyCodeNumber после подписания приложения Blackberry?

Кто-нибудь подсказывает, почему мы получаем это исключение?

Спасибо!

ответ

1

Исключения для KeyCodeNumber имеют todo с процессом проверки.

Blackberry published an article, описывающий, как предотвратить ошибки проверки:

When developing Java applications for the BlackBerry smartphone, you may encounter any of the following verification errors or errors similar to the following:

Verification Error 3141 Module 'MyMIDlet' has verification error (<###>) at offset <###>. Error starting MyMIDlet: Module 'MyMIDlet' has verification error (<####>) at offset <###>." These errors often occur when creating MIDlets. They are inherently hard to debug because the same error message can apply to a number of problems.

Ниже приведен список возможных решений для предотвращения или исправления ошибок проверки:

  1. Если вы начали путем создания Java Архива (JAR), а затем использовал Компилятор прикладной программы RIM (RAPC) для создания файлов .cod, make уверен, что вы отключите запутывание, когда создание файла JAR. Компилятор RAPC выполняет свою собственную обфускацию , и могут возникнуть проблемы, если код уже запутан.
  2. Удалите любые вызовы System.out. *. Эти вообще ничего не делают на смартфоне BlackBerry , но они могут привести к ошибкам проверки.
  3. Удалить неиспользованные операторы импорта.
  4. Явно указать доступ для каждой функции или переменной. Для примера убедитесь, что каждый из них указан как открытый, закрытый или защищенный.
  5. Если вы работаете с MIDlet, убедитесь, что класс MIDlet объявлен как открытый.
  6. Ошибки проверки могут возникнуть, если файл COD поврежден или был не подписан правильно. Убедитесь, что вы выполняете чистую перестройку, и что вы повторно подписываете свое приложение. Заново установите приложение на смартфон BlackBerry .
  7. Прокомментировать любой неисполняемый код. Ошибки проверки могут быть связаны с размером основного файла и библиотечными файлами. Если у вас , прокомментируйте неисполнимый код, изменение размера файла, что может исправить ошибку .
  8. Если вы создали какие-либо классы, которые наследуют от классов RIM, изменить имя каких-либо пользовательских методов и членов, которые вы создали в этих классов. Это гарантирует, что вы не назвали ни одного метода или с одноименным именем в пределах внутренних классов RIM .
  9. Если ваше приложение использует BlackBerry® Device Software 3.8 или позже, ошибки проверки происходят , когда приложение, которое реализует класс javax.microedition.rms.RecordStore скомпилирован с помощью BlackBerry® Java® среды разработки (BlackBerry JDE) раньше, чем версии 4.0. Это происходит, если приложение использует либо addRecordListener, либо removeRecordListener-методы класса RecordStore. Чтобы устранить эту проблему , перекомпилируйте приложение с использованием BlackBerry JDE 4.0 или новее.
  10. Существует проблема с тем, как BlackBerry® Java® Virtual Machine (BlackBerry JVM) обрабатывает реферирование класса непосредственно в конструкторе другого класса. Ниже приведен пример: Class1 class1 = new Class1 (Class2.class.getName());

Чтобы обойти эту проблему, не делают вызов класса в конструкторе, как показано в следующем примере:

Class1 class1; 
String className = Class2.class.getName(); 
Class1 = new Class1(className); 

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

public class MyOuterClass { 
    static int var; 
    class MyInnerClass { 
     public void doSomething() { 
      var = 7; 
     } 
    } 
} 

Есть несколько способов, вы можете удалить эти ссылки, такие как создание методов получения/установки для вар во внешнем классе или модифицируя логику тянуть MyInnerClass из MyOuterClass.

  1. Процедура сборки обычно компилируется из исходного файла Java с командой JAVAC, а затем работает preverify.exe файл, а затем РААС. Добавьте следующую командную строку аргументы JAVAC, чтобы помочь избежать проблем в более ранних версиях РААС:

    javac.exe -source 1,3 -target 1,1

  2. Некоторые методы, которые очень долго могут причиной проверки ошибки. К , перебирая эти методы в вспомогательные методы , вы можете уменьшить вероятность ошибок проверки .

  3. Хотя не так, вероятно, некоторые очень длинные определений методов (с 10 или более параметров), и некоторые очень длинные постоянных определений (длинный пакет структуры и/или длинные имена) может также вызвать ошибки проверки.

+0

Отличный пост, но это почему мобильный разработчик INSANE;) – drubin

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