[MOD-2332] Android: EncryptedDatabase - Fix "loadLibs" error, update SQLCipher to 3.5.7, handle Ti.Blob
GitHub Issue | n/a |
---|---|
Type | Improvement |
Priority | Critical |
Status | Closed |
Resolution | Fixed |
Resolution Date | 2018-02-11T16:38:06.000+0000 |
Affected Version/s | n/a |
Fix Version/s | Ti.EncryptedDatabase 3.0.0 |
Components | Encrypted SQLite DB |
Labels | android |
Reporter | Michael Gangolf |
Assignee | Lokesh Choudhary |
Created | 2017-04-14T21:53:43.000+0000 |
Updated | 2018-08-06T17:49:28.000+0000 |
Description
* update the SQLCipher library
* handle blobs
* fix loadLibs error:
PR: https://github.com/appcelerator-modules/appcelerator.encrypteddatabase/pull/20
{noformat}
[WARN] W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getFilesDir()' on a null object reference
[WARN] W/System.err: at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:169)
[WARN] W/System.err: at appcelerator.encrypteddatabase.EncrypteddatabaseModule.open(EncrypteddatabaseModule.java:64)
[WARN] W/System.err: at org.appcelerator.kroll.runtime.v8.V8Function.nativeInvoke(Native Method)
[WARN] W/System.err: at org.appcelerator.kroll.runtime.v8.V8Function.callSync(V8Function.java:57)
[WARN] W/System.err: at org.appcelerator.kroll.runtime.v8.V8Function.call(V8Function.java:43)
[WARN] W/System.err: at ti.modules.titanium.TitaniumModule$Timer.run(TitaniumModule.java:147)
[WARN] W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
[WARN] W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
[WARN] W/System.err: at android.os.Looper.loop(Looper.java:158)
[WARN] W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7231)
[WARN] W/System.err: at java.lang.reflect.Method.invoke(Native Method)
[WARN] W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
[WARN] W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
{noformat}
Remove old files according to: {quote}If your previous usage of SQLCipher for Android was packaged as a zip archive that included 3 .so files per platform (i.e., libdatabase_sqlcipher.so, libsqlcipher_android.so, and libstlport_shared.so), you should remove all of those. Our new packaging will only include one .so file (i.e., libsqlcipher.so) for each native platform. In addition to the different native libraries, you should also remove the ICU zip file (i.e., icudt46l.zip) previously included within the assets directory of your application.{quote} Test code will follow!
Thanks for submitting the request. Our engineers will look into it.
*Testcase:*
*Output:* Current version 2.0.2: * typeof rowHandle.fieldByName('image') is "String" (before it was always applying toString to all elements, even blobs); * no red square is displayed (Could not open stream to get bitmap) Patched version 2.0.3: * typeof is object * red square is displayed
Tested the above on an Android 7.0 device. It works. I've also tested loading an image file to a blob and verified that I could save/load it to/from database successfully.
[~hknoechel] [~lchoudhary] I included these changes into version
3.0.0
of the module.Cleaning up older fixed issues. If this issue should not have been closed as fixed, please reopen.