No implementation found for voidnet.sqlcipher.database.SQLiteDatabase.dbopen(java.lang.String, int) (tried Java_net_sqlcipher_database_SQLiteDatabase_dbopen and Java_net_sqlcipher_database_SQLiteDatabase_dbopen__Ljava_lang_String_2I)
最近一个项目使用到了sqlcipher,在Android7.0以上的手机上,经常会抛出上面这个异常,而且这个异常catch不了。花了大半天时间去解决这个问题,最后定位在内存被回收。这个异常只有点击home键退出到桌面,然后再进入APP时才会抛出,因为我们的APP compileSdkVersion是23,在android7.0以上不能适配全面屏,在应用的底部有一块黑色的区域。第一次打开应用去操作不会报错,点击home键退到桌面,再进入APP(这里每次都会重新打开launch activity)去进行sqlite的操作时就会抛出上面的异常。根据报错信息,定位问题是因为点home退回到桌面时,内存被回收导致sqlcipher的so文件找不到。最后我们的解决方案是不让系统内存被回收,适配屏幕大小,在清单文件中加上<meta-data android:name="android.max_aspect" android:value="2.3" />这个属性。