【问题标题】:PhoneGap - exec() call to unknown pluginPhoneGap - exec() 调用未知插件
【发布时间】:2013-09-19 04:29:32
【问题描述】:

我一直在尝试在我的项目中使用Phonegap Image Resizer 插件,但我无法让它工作。

错误日志返回: D/PluginManager(13992): exec() call to unknown plugin: com.webXells.imageResizer

我已将所有必要的东西移到我的项目文件夹中。这是结构:

/assets
 /js
  cordova.js
  imageresize.js
 /www
  index.html
  upload.html
/src
 /com
  /webXells
   /ImageResizer
     ImageResizerPlugin.java

我还将插件包含在 config.xml 中的 /res/xml 中:

<feature name="imageResizer">
  <param name="android-package" value="com.webXells.imageResizer.ImageResizePlugin"/>
</feature> 

upload.html 中我已经包含了这样的插件:

<script type="text/javascript" charset="utf-8" src="../js/imageresize.js"></script>

这就是我调用方法来使用它的方式:

    function onPhotoDataSuccess(imageData) {
      window.imageResizer.resizeImage(
        function(data) { 
          var smallImage = document.getElementById('smallImage');
          smallImage.style.display = 'block';
          image.src = "data:image/jpeg;base64," + imageData; 
          //image.src = imageData; 
        },
        function (error) {
          console.log("Error : \r\n" + error);
        },
        imageData,
        0.5,
        0.5,
        {
          imageDataType:ImageResizer.IMAGE_DATA_TYPE_BASE64,
          resizeType:ImageResizer.RESIZE_TYPE_FACTOR,
          format:'jpg'
        }
      );
}

所以,在imageresize.js 中,我想使用的方法如下所示。有需要可以参考以上链接:

ImageResizer.prototype.resizeImage = function(success, fail, imageData, width,
        height, options) {
    if (!options) {
        options = {}
    }
    var params = {
        data : imageData,
        width : width,
        height : height,
        format : options.format,
        imageDataType : options.imageType,
        resizeType : options.resizeType,
        quality : options.quality ? options.quality : 70
    };

    return cordova.exec(success,fail,"com.webXells.imageResizer","resizeImage",[params]);
}

在上面的代码中,我注意到 com.webXells.imageResizer 没有像 logcat 中报告的那样调用。让我感到困惑的是,我已将它包含在 config.xml 中,并将 java 文件移动到 src 文件夹中。为什么即使我已经完成了所有必要的事情,它也不能被调用?

我做了一些研究,说要在plugin.xml 中声明插件,但我在res/xml 中没有文件。所以,我把它放在config.xml 中。 Other 推荐使用 &lt;gap:plugin name="com.phonegap.plugins.example" /&gt; 但 Eclipse 发现此错误。

那么,我该如何解决这个问题?我是否正确调用了 HTML 中的方法?还是我错过了什么?

【问题讨论】:

  • 您使用的是什么版本的 Cordova?
  • 此外,在您的目录树中,文件看起来像:/src/com/webXells/ImageResizer/ImageResizerPlugin.java,但您在 config.xml 中的值是小写的“i”:value="com.webXells.imageResizer.ImageResizePlugin - 复制/粘贴错误?
  • 好的,我现在知道了。谢谢。这是一个打字错误。现在又出现了一个问题。你知道file:///android_asset/js/cordova.js: Line 982 : processMessage failed: Stack: Error: Error calling method on NPObject. 是什么意思吗?我用谷歌搜索还没有返回任何结果。
  • 嘿,不客气。我不确定该错误消息是什么意思;我以前遇到过 NPObject 错误,而且总是很难用谷歌搜索。我认为 NPObject 与本机浏览器事件有关,在我看到它之前,它正在执行诸如发送keyDown 事件之类的事情。也许您应该创建一个新问题并包含有问题的代码。

标签: javascript android cordova


【解决方案1】:

从 cordova 3.5.0-0.2.6 开始,res/xml/config.xml 在构建时被覆盖。尝试将功能标签添加到应用根目录中的 config.xml。为我工作。

【讨论】:

  • 对我来说将 &lt;feature name="Plugin"&gt; 更改为 &lt;gap:feature name="Plugin"&gt; 成功了
【解决方案2】:

您是使用“corodova add plugin xyz”之类的 CLI 添加插件还是手动将插件添加到 Eclipse 项目? 如果您手动添加插件,那么当运行“cordova run android/ios”时,res 文件夹中的 config.xml 将被覆盖,因此出现上述错误。 我找到了一个 hack/解决方案,因为我使用的是不基于 CLI 的 revmob 插件,我们必须手动添加插件。在你的项目/插件文件夹中有 android.json,你必须在其中添加功能标签,所以 config.xml通过 CLI 运行应用程序时被重写

这里是示例

"config_munge": {
 "res/xml/config.xml": {
        "/*": {
            "<feature name=\"Device\"><param name=\"android-package\" value=\"org.apache.cordova.device.Device\" /></feature>": 1,
            "<feature name=\"RevMobPlugin\"><param name=\"android-package\" value=\"com.revmob.cordova.RevMobPlugin\" /></feature>": 0
        }
    }
},

试一试

【讨论】:

    猜你喜欢
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多