Подписанное приложение для Android ведет себя иначе, чем при запуске вручную на устройстве из Eclipse?

#android #eclipse #behavior #unsigned #signed

#Android #eclipse #поведение #неподписанный #подписано

Вопрос:

Теперь я чувствую себя испорченным после работы над этой проблемой в течение прошлого столетия. Заранее спасибо за вашу помощь!

Что произошло: я разрабатываю приложение, представляющее собой игру, содержащую игровое действие, в котором используются таймеры обратного отсчета для временных игровых раундов. Приостановка, выход из приложения из этого действия (нажатием кнопки питания, кнопки «Домой» и т. Д.) Отлично работает при тестировании на моем Samsung Galaxy Tab 7 «, Запуск неподписанного приложения из Eclipse до его подписания.

В восторге от того, что я завершил свою работу, я продолжаю и подписываю долбаный apk в CMD. Я тестирую подписанное приложение, просто чтобы убедиться, что оно работает нормально, скопировав и вставив signed .apk на SD-карту той же Galaxy Tab, а затем установив его после удаления всех старых данных приложения, запущенного из Eclipse, но, КОНЕЧНО, ЭТО НЕ РАБОТАЕТ.

Что-то идет не так, например, действие не приостанавливается, когда я нажимаю кнопку питания во время запуска синхронизированного раунда (после повторного включения устройства я обнаруживаю, что таймер был запущен, когда экран был выключен и все еще работает, а мой диалог приостановки игры нигде не найден),действие закрывается, когда я нажимаю клавишу home (после того, как я нажимаю клавишу home и снова открываю приложение, приложение перезапускается с вводной заставки приложения) и, наконец, когда я приостанавливаю игру на полпути, выключаю и на экране нажимаю «Возобновить» в диалоговом окне «Приостановить игру» — диалоговое окно «Приостановить игру».игровой таймер переходит от примерно 18,42 с прямо к 0,00 с и переходит оттуда к следующему действию.

Хорошо, это гораздо больше история, чем вопрос о коде, но вот технический вопрос — почему мое подписанное приложение ведет себя иначе, чем неподписанное, которое было запущено из Eclipse? Я не привожу здесь никакого кода о том, как я это делал, поскольку это не должно иметь значения, учитывая, что они работают в первую очередь (например, при запуске приложения на моем устройстве во время разработки в Eclipse).

Так что почти все… ТЬФУ

Ответ №1:

Не уверен, действительно ли это ваша проблема… но наиболее распространенная причина, по которой подписанное приложение не работает, когда работает неподписанная версия / Eclipse, заключается в том, что создание подписанного приложения обычно включает этап обфускации / оптимизации Proguard.

Одним из последствий оптимизации Proguard является то, что некоторые классы / методы, на которые ссылаются либо в ваших XML-макетах, либо с использованием отражения, могут больше не иметь того же имени (или, возможно, были полностью оптимизированы).

Самый простой / быстрый способ проверить — посмотреть трассировку logcat — там будет ClassNotFoundException или MethodNotFoundException или что-то в этом роде.

Комментарии:

1. Я не знаю, правильно ли я это делаю, но я не смог найти никаких NotFoundExceptions. Что я сделал, так это подключил свое устройство к ПК через USB, нажал на DDMS и имя моего устройства и посмотрел на logcat с включенным фильтром типа «исключение», делая то же самое в приложении на устройстве. Означает ли это, что проблема не связана с обфускацией Proguard? Если не считать публикации всего logcat здесь, есть идеи, куда я могу пойти отсюда? В любом случае спасибо за сообщение 🙂

2. Если вы используете logcat в Eclipse (что, похоже, вы делаете), то я не думаю, что вы можете фильтровать по «исключению», т.Е. Вы, возможно, полностью пропустили исключение. Попробуйте просто просмотреть основные записи «журнала» — это может появиться там.

3. И, вероятно, стоит проверить, что любые обработчики onclick в ваших XML-файлах макета исключены из файла конфигурации Proguard.