3

我在 Android 7.0 Samsung S8 和许多其他此类本机崩溃上收到以下崩溃:

backtrace:
#00  pc 000000000005da7c  /system/lib64/libbinder.so (_ZN7android6Parcel14freeDataNoInitEv+16)
#01  pc 00000000000f8538  /system/lib64/libandroid_runtime.so
#02  pc 0000000002a4fa24  /system/framework/arm64/boot-framework.oat (android.os.Parcel.nativeDestroy+128)
#03  pc 0000000002a4ee10  /system/framework/arm64/boot-framework.oat (android.os.Parcel.destroy+76)
#04  pc 0000000002a5396c  /system/framework/arm64/boot-framework.oat (android.os.Parcel.finalize+40)
#05  pc 000000000068a6e0  /system/framework/arm64/boot-core-libart.oat (java.lang.Daemons$FinalizerDaemon.doFinalize+140)
#06  pc 000000000068a9bc  /system/framework/arm64/boot-core-libart.oat (java.lang.Daemons$FinalizerDaemon.runInternal+520)
#07  pc 000000000068a054  /system/framework/arm64/boot-core-libart.oat (java.lang.Daemons$Daemon.run+96)
#08  pc 000000000065fda0  /system/framework/arm64/boot.oat (java.lang.Thread.run+60)
#09  pc 00000000000d25b4  /system/lib64/libart.so (art_quick_invoke_stub+580)
#10  pc 00000000000df6e4  /system/lib64/libart.so (_Z N3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+212)
#11  pc 0000000000475fc4  /system/lib64/libart.so (_ZN3artL18InvokeWithArgArrayERKNS_33ScopedObjectAccessAlreadyRunnableEPNS_9ArtMethodEPNS_8ArgArrayEPNS_6JValueEPKc+108)
#12  pc 0000000000477598  /system/lib64/libart.so (_ZN3art35InvokeVirtualOrInterfaceWithJValuesERKNS_33ScopedObjectAccessAlreadyRunnableEP8_jobjectP10_jmethodIDP6jvalue+372)
#13  pc 00000000004988a8  /system/lib64/libart.so (_ZN3art6Thread14CreateCallbackEPv+1104)
#14  pc 00000000000770f4  /system/lib64/libc.so (_ZL15__pthread_startPv+204)
#15  pc 000000000001e7d0  /system/lib64/libc.so (__start_thread+16)

此崩溃已登录 Play 商店。对于我们在 Play 商店中提供的每个构建更新,它都会不断重复。

下面的库在我的应用程序中使用,它是唯一使用来自 NDK 的 jni 代码的库。

compile 'net.zetetic:android-database-sqlcipher:3.5.9@aar'
compile 'org.greenrobot:greendao:3.0.1'

Github 的 SQLCipher 库

来自 Github 的 Greendao 库

Android 7.0 上的 NDK 限制

请帮助解决此崩溃问题。我的应用程序每天都在增加。见下图:

Play 商店崩溃

Github问题链接

4

2 回答 2

3

请确认您没有将任何 Parcelable 对象存储在持久存储中,例如共享首选项或本地 sqlite 数据库。

Parcel 不是通用的序列化机制。此类(以及用于将任意对象放入 Parcel 的相应 Parcelable API)被设计为高性能 IPC 传输。因此,将任何 Parcel 数据放入持久存储是不合适的:Parcel 中任何数据的底层实现的更改都可能导致旧数据不可读。

于 2018-02-13T10:35:32.663 回答
1

该错误不应与 NDK 限制有关。只是系统 IPC 模块libbinder在发布时崩溃Parcel(您可以在此处查看源代码https://android.googlesource.com/platform/frameworks/native/+/nougat-mr1.7-release/libs/binder/Parcel.cpp)。

检查您在哪里发送/接收数据Parcel/Intent并验证这些地方没有错误。

此外,此类崩溃很有可能仅在特定情况下发生,例如当系统强制终止您的应用程序时 - 如果是这种情况,那么您可能与错误无关。

于 2018-01-31T11:54:34.863 回答