Android native crash инициирует из /system/framework/arm/boot.овес
после недавнего обновления моего приложения в Google Play, я начал получать много отчетов о сбоях, все из них от устройств Samsung с Android 5. Более низкие версии android работают нормально, и устройства других производителей с Android 5 тоже работают нормально.
у меня нет устройства, где я мог бы воспроизвести проблему, поэтому я не могу разделить. Я пытаюсь вывести, что может быть неправильно из отчета о сбоях и из списка изменений с момента моей последней рабочей версии (которая, к сожалению длинный.)
все отчеты о сбоях выглядят так (только адреса немного различаются между устройствами):
Build fingerprint: 'samsung/kltektt/kltektt:5.0/LRX21T/G900KKTU1BOB1:user/release-keys'
Revision: '15'
ABI: 'arm'
pid: 26265, tid: 26265, name: mt.AnnelidsDemo >>> cz.gdmt.AnnelidsDemo <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x76f57e84
r0 00000800 r1 0000004b r2 b4aa9f9a r3 00000000
r4 1426e019 r5 76f57e80 r6 0000012c r7 76e6b040
r8 00000019 r9 76f57d54 sl 000007ff fp b4e1b330
ip b4aa9f70 sp bea94b50 lr b4bc72c1 pc b4c0d9b8 cpsr 00070030
backtrace:
#00 pc 001099b8 /system/lib/libart.so (art::TypeLookupTable::Lookup(char const*) const+59)
#01 pc 000c32bd /system/lib/libart.so (art::ClassLinker::LookupClassFromImage(char const*, art::gc::space::ImageSpace*)+64)
#02 pc 000d27c1 /system/lib/libart.so (art::ClassLinker::DefineClass(char const*, art::Handle<art::mirror::ClassLoader>, art::DexFile const&, art::DexFile::ClassDef const&)+320)
#03 pc 000d2d89 /system/lib/libart.so (art::ClassLinker::FindClassInPathClassLoader(art::ScopedObjectAccessAlreadyRunnable&, art::Thread*, char const*, art::Handle<art::mirror::ClassLoader>)+452)
#04 pc 001fe20b /system/lib/libart.so (art::VMClassLoader_findLoadedClass(_JNIEnv*, _jclass*, _jobject*, _jstring*)+254)
#05 pc 0001b179 /system/framework/arm/boot.oat
узнал, что art::TypeLookupTable
модификация Samsung и нет свободных источников.
и эта, и последняя рабочие версии построены с тем же Android SDK и NDK (цель-android-19), нет никаких изменений в коде Java, есть много изменений в собственном коде и в данных. Я начал использовать LTO при создании собственного кода. Я начал использовать -z
(Zopfli) параметр zipalign
.
мое приложение использует JNI, так что это, вероятно, первый подозреваемый. Однако CheckJNI не сообщает о каких-либо проблемах. Тот же код работает четко без каких-либо сбоев на других устройствах Android, на IOS и Linux. Он не показывает никаких Омеги в отчет. Поэтому я думаю, что случайное повреждение памяти маловероятно.
Я думаю, что мой Java-код в порядке, но даже если у него были ошибки, он не должен вызывать segfault в java во время выполнения...
пользователи сообщают, что приложение аварийно завершает работу во время запуска, даже не показывая ничего.
Я спросил на форуме разработчиков Samsung, до сих пор без ответа.
у меня два вопроса:
backtrace запускается при загрузке.овес и продолжается в libart.Итак. Что происходит в boot.овес? Возможно ли, что он падает даже до достижения любого из моего кода? (Это будет означать ошибку в Samsung ИСКУССТВО.)
любая идея, что может быть не так, что я мог бы попробовать?
1 ответов
вместе с одним другим разработчиком, который получал тот же сбой в своем приложении, мы обнаружили, что он запускается на . (Повторное сжатие с помощью Zopfli)
точно такие же АПК сбои при выравнивании и перепакованы с помощью Zopfli и не рухнет, когда выравнивается без пережатия.
Я могу только догадываться, что Samsung внес некоторые изменения в Android 5 и представил какую-то странную ошибку в коде, который читает APK. До это исправлено или у меня есть лучшее объяснение, не используя -z
на zipalign
решает проблему.