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 推荐使用 <gap:plugin name="com.phonegap.plugins.example" />
但 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。为我工作。
【讨论】:
对我来说将<feature name="Plugin">
更改为 <gap:feature name="Plugin">
成功了【参考方案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() 调用未知插件的主要内容,如果未能解决你的问题,请参考以下文章