Intereting Posts
Как обнаружить биржевой браузер Android Android Row становится Unclickable с кнопкой Как распечатать текстовый файл с помощью WiFi Direct Бета-тестирование Google Play без опубликованного приложения? Как настроить репозитории Git для разработки Android в Eclipse? Как я могу исправить? Эта версия библиотеки рендеринга более поздняя, ​​чем ваша версия плагина ADT в eclipse Создание локального уведомления в ответ на push-уведомление (из firebase) в кордове / ионной Сгенерировать файл .so в Android Studio Жизненный цикл операции – onCreate, вызываемый при каждой переориентации Отправка сообщения обработчику мертвой нити при получении местоположения из IntentService Как проверить, являются ли два изображения похожими или нет, используя openCV в java? Создать границы на андроидном представлении в drawable xml, с трех сторон? Как установить цвет текста в приложении Android для всего текста? Заменить фрагмент другим фрагментом внутри ViewPager Android получить реальный путь Uri.getPath ()

Должен ли я удалить e.printStackTrace () из моего кода перед публикацией

Я читал документы Android Publishing, и они сказали удалить все вызовы журнала из моего кода. У меня есть некоторые вызовы e.printStackTrace() в моем коде, которые могут быть напечатаны как часть обычного запуска моей программы (т. e.printStackTrace() Если файл еще не существует).

Должен ли я также удалить эти вызовы?

Solutions Collecting From Web of "Должен ли я удалить e.printStackTrace () из моего кода перед публикацией"

Вы не должны использовать e.printStackTrace() прямо в любом случае – это приведет к отправке информации в журнал Android без отображения того приложения (тега журнала), из которого оно было e.printStackTrace() .

Как отмечали другие, продолжайте ловить Exception идет речь, но используйте один из методов android.util.Log для ведения журнала. Вы можете записать только сообщение, но не трассировку стека, или использовать подробное ведение журнала для трассировки стека:

 try { Object foo = null; foo.toString(); } catch (NullPointerException ex) { Log.w(LOG_TAG, "Foo didn't work: "+ ex.getMessage()); Log.d(LOG_TAG, Util.stackTraceWriter(ex)); } 

Вы должны лишить сообщения журнала DEBUG или VERBOSE из своих производственных сборок. Самый простой способ – использовать ProGuard для удаления вызовов Log.[dv] из вашего кода.

Если вы разрешаете исключение распространяться до ОС, то ОС запишет его в журнал, а также всплывает окно «Силовое закрытие», убивая ваше приложение. Если вы поймаете это, вы можете запретить принудительное закрытие приложения.

Если вы хотите, чтобы ваши пользователи имели возможность отправлять вам ошибки, которые они получают, я бы зарегистрировал трассировку стека. Затем они могут отправить вам журнал через приложение, подобное Log Collector .

Если вы хотите избежать возможности разоблачить информацию о трассировке стека для своих пользователей, тогда поймайте исключение и не заходите в него.

Я бы использовал класс журнала для отправки сообщения. Для журналов, которые, по вашему мнению, важны для пребывания в приложении, используйте Log.i для предупреждения об ошибках – Log.e Log.w Для отладки Log.d – и вы можете отключить его, если приложение находится в режиме отладки.

http://developer.android.com/reference/android/util/DebugUtils.html

Хорошо printStackTrace() будет записывать его в ОС, заставляя приложение andorid (или компьютер) прекратить (принудительно закрыть) вместо этого сделать что-то вроде этого:

 public void nullPointerExceptionCauser() { try { Object example = null; example.toString(); } catch (Exception e) { Logger.log(Level.SEVERE, "Caught Exception: {0}", e.getStackTrace()); } } 

В моем скромном мнении (я не разработчик Android)

Это должно быть хорошо. Я не знаю параметры ведения журнала для Android, но я уверен, что у вас есть настраиваемая вещь для вывода (или отсутствия) ваших следов.

И если вы не сделаете printStackTrace (), Android не будет делать грязную работу, игнорируя ее.

🙂

Это всего лишь вещь хорошего настроения (стиля).

Если вы хотите быть в безопасности, то есть не позволяйте никому отслеживать чтение журналов исключений, вы можете сделать что-то вроде

 private void hideExceptionsInReleaseMode() { final Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler(); if(!BuildConfig.DEBUG) { Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread thread, Throwable ex) { defaultHandler.uncaughtException(thread, new RuntimeException("Something went wrong :p")); } }); } } 

Чтобы использовать printStackTrace более безопасным способом, я бы использовал StringWrite и PrintWriter :

  ... catch (final Exception e) { final StringWriter sw = new StringWriter(); final PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); Log.e("TAG", sw.toString()); } 

Или, альтернативно:

  catch (final Exception e) { Log.e(TAG, Log.getStackTraceString(e)); } 

Используйте это, чтобы удалить журналы из релиза apk

 if (BuildConfig.DEBUG) Log.d(TAG, "your meseage");