Я потратил некоторое время на изучение режима checkjni с помощью эмулятора Android в своем приложении.
Хотя написано (в http://android -developers.blogspot.com / 2011/11 / jni-local-reference-changes-in-ics.html ), что CheckJNI включен по умолчанию, если debuggable = " true "& targetSdkVersion - это, по крайней мере, Ice Cream Sandwich (в файле AndroidManifest.xml). Отладочный дамп вывода CheckJNI (предупреждения и ошибки) по-прежнему печатается в DDMS, даже если я использую значения Gingerbread и устанавливаю его на Пряничный эмулятор.
Единственное различие, которое я обнаружил, заключается в том, что предупреждения CheckJNI на эмуляторе Ice Cream Sandwich (независимо от значений в моем файле AndroidManifest.xml) приведут к сбою приложения с соответствующим предупреждением - хотя они будут только напечатано в эмуляторе пряников (я проверил DeleteGlobalRef, используемый на локальной ссылке, чтобы вызвать это предупреждение).
Существует два неинформационных журнала, которые печатаются в соответствии с AndroidManifest.xml - но журналы режима CheckJNI не затрагиваются.
Вот журналы -
# В эмуляторе ICS
После установки приложения:
01-19 08:43:01.491: D/AndroidRuntime(32): CheckJNI is ON
Loading the app:
01-19 08:32:26.617: D/dalvikvm(590): Not late-enabling CheckJNI (already on)
(The last line is printed only when debuggable="true")
01-19 08:32:27.066: I/dalvikvm(590): Turning on JNI app bug workarounds for target SDK version 10...
(The last line is printed only when targetSdkVersion=10)
При коде ошибки (сбой):
01-19 08:37:56.176: W/dalvikvm(651): JNI WARNING: DeleteGlobalRef on non-global 0x41339550 (type=1)
...
01-19 08:37:56.187: E/dalvikvm(651): VM aborting
01-19 08:37:56.187: A/libc(651): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1)
# На пряниках:
После установки приложения:
01-19 08:43:01.491: D/AndroidRuntime(32): CheckJNI is ON
Loading the app:
Нет важных журналов
При коде ошибки (без сбоев):
01-19 08:45:20.079: W/dalvikvm(304): JNI: DeleteGlobalRef(0x40608718) failed to find entry (valid=1)
Итак, мой вопрос: как мне включить / выключить его и как это должно влиять на приложение (или журналы) по-разному при включении?
Спасибо.