【问题标题】:IBM Worklight 6.1 JsonStore issue on Android 4.4Android 4.4 上的 IBM Worklight 6.1 JsonStore 问题
【发布时间】:2013-12-27 18:26:54
【问题描述】:

我已升级到 Worklight 6.1,我期待我在此处提到的问题 IBM Worklight Android 4.4 issue, JSON Store stopped working 将得到解决,并且我的应用程序现在应该可以正常工作了。但仍然面临 Android 4.4 中的 JSONStore 初始化问题。请检查以下日志。

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

【问题讨论】:

    标签: ibm-mobilefirst jsonstore


    【解决方案1】:

    尝试以下方法:

    • 卸载应用程序(只是为了确保没有缓存任何内容)
    • 转到 application-descriptor.xml
    • 删除 JSONStore 可选功能
    • 构建
    • 确保从您的 Android 环境下的 native 文件夹中删除 armeabi/libdatabase_sqlite.sox86/libdatabase_sqlcipher.sosqlcipher.jar。请参阅您关心的文件下的图片。
    • 转到 application-descriptor.xml
    • 启用 JSONStore 可选功能
    • 构建
    • 确保armeabi/libdatabase_sqlite.sox86/libdatabase_sqlcipher.sosqlcipher.jar 回来了。查看仅供参考部分了解更多详情。
    • 在 Eclipse 上刷新原生 Android 项目。
    • 在模拟器或设备上运行。

    仅供参考

    我的机器 (Mac OSX 10.9) 上工作库的大小和 MD5 哈希值。大小由ls -al 确定,MD5 哈希由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 在那里工作。

    这是一个简单的例子:

    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.sox86/libdatabase_sqlcipher.sosqlcipher.jar 从在 Android v4.4 中工作的新创建项目复制到现有项目。确保在将应用程序发送到设备或模拟器之前构建、卸载应用程序的早期版本并刷新本机项目。

    【讨论】:

    • 我刚刚尝试过这种方法,但没有成功。同样的例外即将到来。
    【解决方案2】:

    我正在运行一个过时版本的库。使用 2.2.2 对我来说适用于 4.4。 从here下载

    【讨论】:

      猜你喜欢
      • 2014-05-11
      • 2014-10-19
      • 2014-05-22
      • 2014-01-18
      • 2013-12-12
      • 2013-08-13
      • 2014-08-10
      • 2014-09-08
      • 2014-03-10
      相关资源
      最近更新 更多