Самостоятельное аварийное завершение работы Android с /system/framework/arm/boot.oat

После недавнего обновления моего приложения в 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 является модификацией ART от Samsung, и нет доступных источников.

И эта, и последняя рабочие версии построены с использованием одного и того же Android SDK и NDK (цель - android-19), в коде Java нет изменений, в собственном коде и данных много изменений. Я начал использовать LTO при создании нативного кода. Я начал использовать-z (Зопфли) параметрzipalign.

Мое приложение использует JNI, так что это, вероятно, первый подозреваемый. Однако CheckJNI не сообщает о каких-либо проблемах. Этот же код работает без сбоев на других устройствах Android, IOS и Linux. Это не показывает никаких ошибок в valgrind. Поэтому я думаю, что случайное повреждение памяти маловероятно.

Я думаю, что мой Java-код в порядке, но даже если в нем были ошибки, он не должен вызывать segfault во время выполнения Java ...

Пользователи сообщают, что приложение вылетает во время запуска, даже не показывая ничего.

Я спросил на форуме разработчиков Samsung, пока без ответа.

У меня есть два вопроса:

Обратный след начинается в boot.oat и продолжается в libart.so. Что происходит в boot.oat? Возможно ли, что он вылетит еще до того, как достигнет моего кода? (Это указывало бы на ошибку в ART от Samsung.)

Есть идеи, что может быть не так, что я могу попробовать?

Ответы на вопрос(1)

Ваш ответ на вопрос