PhoneGap - exec() 调用未知插件

Posted

技术标签:

【中文标题】PhoneGap - exec() 调用未知插件【英文标题】:PhoneGap - exec() call to unknown plugin 【发布时间】: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 事件之类的事情。也许您应该创建一个新问题并包含有问题的代码。 【参考方案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
        
    
,

试一试

【讨论】:

以上是关于PhoneGap - exec() 调用未知插件的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap 2.1 cordova.exec 更新

Cordova:无法调用未定义的方法“exec”

PhoneGap 安全吗?

phonegap ios的奇怪错误

插件在android phonegap中不起作用

Phonegap 自定义插件