简体   繁体   English

Android 4.4上的IBM Worklight 6.1 JsonStore问题

[英]IBM Worklight 6.1 JsonStore issue on Android 4.4

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. 我已经升级到Worklight 6.1&我期待我在这里提到的IBM Worklight Android 4.4问题,JSON Store停止工作的问题将得到解决,我的应用程序现在应该正常工作。 But still facing the JSONStore initialization issue in Android 4.4. 但仍面临Android 4.4中的JSONStore初始化问题。 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":{}}

Try the following: 请尝试以下方法:

  • Uninstall the application (just to make sure nothing is being cached) 卸载应用程序(只是为了确保没有缓存任何内容)
  • Go to the application-descriptor.xml 转到application-descriptor.xml
  • Remove the JSONStore optional feature 删除JSONStore可选功能
  • Build 建立
  • Make sure armeabi/libdatabase_sqlite.so , x86/libdatabase_sqlcipher.so and sqlcipher.jar are removed from the native folder under your Android environment. 确保从Android环境下的native文件夹中删除armeabi/libdatabase_sqlite.sox86/libdatabase_sqlcipher.sosqlcipher.jar See the picture below under Files you care about . 请参阅您关注的文件下面的图片。
  • Go to application-descriptor.xml 转到application-descriptor.xml
  • Enable the JSONStore optional feature 启用JSONStore可选功能
  • Build 建立
  • Make sure armeabi/libdatabase_sqlite.so , x86/libdatabase_sqlcipher.so and sqlcipher.jar are back. 确保armeabi/libdatabase_sqlite.sox86/libdatabase_sqlcipher.sosqlcipher.jar返回。 Look at the FYI section for more details. 查看FYI部分了解更多详情。
  • Refresh the native Android project on Eclipse. 在Eclipse上刷新本机Android项目。
  • Run on an emulator or device. 在模拟器或设备上运行。

FYI FYI

The size and MD5 hashes on my machine (Mac OSX 10.9) for the working libraries. 我的机器(Mac OSX 10.9)上的工作库的大小和MD5哈希值。 Size was determined with ls -al and the MD5 hash was generated with md5 [file] . 使用ls -al确定大小,并使用md5 [file]生成MD5哈希。

sqlcipher.jar sqlcipher.jar

Size: 103300 
MD5 Hash: 8d7f4d682994158096763c24e3d79fb2 

armeabi/libdatabase_sqlite.so armeabi / libdatabase_sqlite.so

Size: 365644
MD5 Hash: 07c4cf69d038c3fdcc7dd0490841ea3d

x86/libdatabase_sqlcipher.so 86 / libdatabase_sqlcipher.so

Size: 367020
MD5 Hash: 38756d70d256f8e5982ed9789705457f

The files you care about: 你关心的文件:

档

Still not working? 还是行不通?

  • Create a new Worklight Project with v6.1 (won't work with other versions). 使用v6.1创建一个新的Worklight项目(不适用于其他版本)。
  • Create a new Hybrid Application. 创建新的混合应用程序。
  • Create an Android environments. 创建Android环境。
  • Go to the application-descriptor.xml 转到application-descriptor.xml
  • Enable JSONStore. 启用JSONStore。
  • Build. 建立。
  • Confirm JSONStore works there. 确认JSONStore在那里工作。

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. armeabi/libdatabase_sqlite.sox86/libdatabase_sqlcipher.sosqlcipher.jar从Android sqlcipher.jar中新创建的项目复制到现有项目。 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. 在将其发送到设备或模拟器之前,请确保构建,卸载以前版本的应用程序并刷新本机项目。

I'm was running an out-dated version of the lib. 我正在运行一个过时的lib版本。 Using 2.2.2 works on 4.4 for me. 使用2.2.2对我来说是4.4。 Download from here 这里下载

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM