Android 4.4上的IBM Worklight 6.1 JsonStore问题 [英] IBM Worklight 6.1 JsonStore issue on Android 4.4

查看:182
本文介绍了Android 4.4上的IBM Worklight 6.1 JsonStore问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已升级到Worklight 6.1&我期待我在这里提到的问题 IBM Worklight Android 4.4问题,JSON Store停止工作将得到解决并且我的应用程序现在应该工作正常。但仍面临Android 4.4中的JSONStore初始化问题。请检查下面的日志。

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":{}}


推荐答案

请尝试以下操作:


  • 卸载应用程序(只是为了确保没有任何内容)缓存)

  • 转到application-descriptor.xml

  • 删除JSONStore可选功能

  • Build

  • 确保 armeabi / libdatabase_sqlite.so x86 / libdatabase_sqlcipher.so sqlcipher.jar 将从Android环境下的 native 文件夹中删除。请参阅下面的您关注的文件下的图片。

  • 转到application-descriptor.xml

  • 启用JSONStore可选功能

  • 构建

  • 确保 armeabi / libdatabase_sqlite.so x86 / libdatabase_sqlcipher.so sqlcipher.jar 又回来了。请查看 FYI 部分了解更多详情。

  • 刷新Eclipse上的原生Android项目。

  • 在模拟器上运行或者设备。

  • 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

我的机器上的大小和MD5哈希值(Mac OSX 10.9)用于工作库。大小是用 ls -al 确定的,MD5哈希是用 md5 [file] 生成的。

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

您关注的文件:

仍然无效?


  • 使用v6.1创建一个新的Worklight项目(赢了不能与其他版本一起使用。)

  • 创建一个新的混合应用程序。

  • 创建一个Android环境。

  • 转到application-descriptor.xml

  • 启用JSONStore。

  • 构建。

  • 确认JSONStore在那里工作。

  • 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.

以下是一个简单示例:

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());
  });
});




  • 复制 armeabi / libdatabase_sqlite.so x86 / libdatabase_sqlcipher.so sqlcipher.jar 来自Android中新创建的项目v4.4到你现有的项目。在将其发送到设备或模拟器之前,请确保构建,卸载以前版本的应用程序并刷新本机项目。

    • 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.
    • 这篇关于Android 4.4上的IBM Worklight 6.1 JsonStore问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆