IBM Worklight 6.1 JsonStore issue on Android 4.4

1.4k views Asked by At

I have upgraded to Worklight 6.1 & I was with expectation that the issue I mentioned here IBM Worklight Android 4.4 issue, JSON Store stopped working would be resolved and my app should work fine now. But still facing the JSONStore initialization issue in Android 4.4. Please check below log.

12-10 14:58:30.630: D/dalvikvm(14826): No JNI_OnLoad found in /data/app-lib/com.Test-2/libsqlcipher_android.so 0x41e371b0, skipping init
12-10 14:58:30.630: D/dalvikvm(14826): Trying to load lib /data/app-lib/com.Test-2/libdatabase_sqlcipher.so 0x41e371b0
12-10 14:58:30.630: W/linker(14826): libdatabase_sqlcipher.so has text relocations. This is wasting memory and is a security risk. Please fix.
12-10 14:58:30.630: E/dalvikvm(14826): dlopen("/data/app-lib/com.Test-2/libdatabase_sqlcipher.so") failed: dlopen failed: cannot locate symbol "_ZN7android10MemoryBaseC1ERKNS_2spINS_11IMemoryHeapEEElj" referenced by "libdatabase_sqlcipher.so"...
12-10 14:58:30.640: E/jsonstore-core(14826): Error during provision
12-10 14:58:30.640: E/jsonstore-core(14826): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZN7android10MemoryBaseC1ERKNS_2spINS_11IMemoryHeapEEElj" referenced by "libdatabase_sqlcipher.so"...
12-10 14:58:30.640: E/jsonstore-core(14826):    at java.lang.Runtime.loadLibrary(Runtime.java:364)
12-10 14:58:30.640: E/jsonstore-core(14826):    at java.lang.System.loadLibrary(System.java:526)
12-10 14:58:30.640: E/jsonstore-core(14826):    at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:144)
12-10 14:58:30.640: E/jsonstore-core(14826):    at net.sqlcipher.database.SQLiteDatabase.loadLibs(SQLiteDatabase.java:137)
12-10 14:58:30.640: E/jsonstore-core(14826):    at com.worklight.androidgap.jsonstore.database.DatabaseManager.openDatabaseIfNecessary(DatabaseManager.java:173)
12-10 14:58:30.640: E/jsonstore-core(14826):    at com.worklight.androidgap.jsonstore.database.DatabaseManager.checkDatabaseAgainstSchema(DatabaseManager.java:87)
12-10 14:58:30.640: E/jsonstore-core(14826):    at com.worklight.androidgap.plugin.storage.ProvisionActionDispatcher.isSchemaMismatched(ProvisionActionDispatcher.java:155)
12-10 14:58:30.640: E/jsonstore-core(14826):    at com.worklight.androidgap.plugin.storage.ProvisionActionDispatcher.dispatch(ProvisionActionDispatcher.java:293)
12-10 14:58:30.640: E/jsonstore-core(14826):    at com.worklight.androidgap.plugin.storage.BaseActionDispatcher.dispatch(BaseActionDispatcher.java:87)
12-10 14:58:30.640: E/jsonstore-core(14826):    at com.worklight.androidgap.plugin.storage.DispatchingPlugin$ActionDispatcherRunnable.run(DispatchingPlugin.java:113)
12-10 14:58:30.640: E/jsonstore-core(14826):    at com.worklight.androidgap.plugin.storage.DispatchingPlugin$SerialExecutor$1.run(DispatchingPlugin.java:147)
12-10 14:58:30.640: E/jsonstore-core(14826):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-10 14:58:30.640: E/jsonstore-core(14826):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-10 14:58:30.640: E/jsonstore-core(14826):    at java.lang.Thread.run(Thread.java:841)
12-10 14:58:30.650: E/Test(14826): init notification error:----->{
12-10 14:58:30.650: E/Test(14826):  "src": "initCollection",
12-10 14:58:30.650: E/Test(14826):  "err": -1,
12-10 14:58:30.650: E/Test(14826):  "msg": "PERSISTENT_STORE_FAILURE",
12-10 14:58:30.650: E/Test(14826):  "col": "Notification",
12-10 14:58:30.650: E/Test(14826):  "usr": "TestUser",
12-10 14:58:30.650: E/Test(14826):  "doc": {},
12-10 14:58:30.650: E/Test(14826):  "res": {}
12-10 14:58:30.650: E/Test(14826): }
12-10 14:58:30.660: E/Test(14826): [wl.jsonstore] {"src":"initCollection","err":-1,"msg":"PERSISTENT_STORE_FAILURE","col":"Notification","usr":"TestUser","doc":{},"res":{}}
2

There are 2 answers

1
cnandreu On BEST ANSWER

Try the following:

  • Uninstall the application (just to make sure nothing is being cached)
  • Go to the application-descriptor.xml
  • Remove the JSONStore optional feature
  • Build
  • Make sure armeabi/libdatabase_sqlite.so, x86/libdatabase_sqlcipher.so and sqlcipher.jar are removed from the native folder under your Android environment. See the picture below under Files you care about.
  • Go to application-descriptor.xml
  • Enable the JSONStore optional feature
  • Build
  • Make sure armeabi/libdatabase_sqlite.so, x86/libdatabase_sqlcipher.so and sqlcipher.jar are back. Look at the FYI section for more details.
  • Refresh the native Android project on Eclipse.
  • Run on an emulator or device.

FYI

The size and MD5 hashes on my machine (Mac OSX 10.9) for the working libraries. Size was determined with ls -al and the MD5 hash was generated with md5 [file].

sqlcipher.jar

Size: 103300 
MD5 Hash: 8d7f4d682994158096763c24e3d79fb2 

armeabi/libdatabase_sqlite.so

Size: 365644
MD5 Hash: 07c4cf69d038c3fdcc7dd0490841ea3d

x86/libdatabase_sqlcipher.so

Size: 367020
MD5 Hash: 38756d70d256f8e5982ed9789705457f

The files you care about:

Files

Still not working?

  • Create a new Worklight Project with v6.1 (won't work with other versions).
  • Create a new Hybrid Application.
  • Create an Android environments.
  • Go to the application-descriptor.xml
  • Enable JSONStore.
  • Build.
  • Confirm JSONStore works there.

Here's a quick example:

var collections = {
    customers : {
      searchFields : {
        'CUSTOMERCODE' : 'string'
      }
    }
  };

  WL.JSONStore.init(collections)

  .then(function () {
    return WL.JSONStore.get('customers').add({'CUSTOMERCODE' : '456'});
  })

  .then(function () {
    return WL.JSONStore.get('customers').findAll();
  })

  .then(function (res) {
    alert(JSON.stringify(res));
  })

  .fail(function (err) {
    alert(err.toString());
  });
});
  • Copy armeabi/libdatabase_sqlite.so, x86/libdatabase_sqlcipher.so and sqlcipher.jar from that newly created project that works in Android v4.4 to your existing project. Make sure you build, uninstall a previous version of the app and refresh the native project before you send it to the device or emulator.
0
Muaz Ishfaq On

I'm was running an out-dated version of the lib. Using 2.2.2 works on 4.4 for me. Download from here