【问题标题】:Cordova 4.0.0: exec() call to unknown pluginCordova 4.0.0:exec() 调用未知插件
【发布时间】:2014-10-29 10:30:59
【问题描述】:

我使用 Cordova 4.0.0 CLI 生成了代码。

现在我尝试为 Android (MyPlugin) 编写一个插件来从 web 视图执行本机代码。但是每次我尝试调用插件的方法时,我都会收到错误消息:

exec() 调用未知插件

我在 config.xml 中尝试了不同的映射(并且还创建了一个 plugin.xml)。但没有什么对我有用。 API 也不是很有帮助。

有人知道如何实现这一点或我的实现有什么问题吗?

这是我的代码:

com.cordovaDemo.MyPlugin.java

public class MyPlugin extends CordovaPlugin {
@Override
    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
        super.initialize(cordova, webView);

    }

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        //MyCode
        callbackContext.success(action);
        return true;
    }

index.html

<head>
...
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>

<title>Hello World</title>


<script>
    window.func = function(str,callback){
        cordova.exec(callback, function(err){alert(err)},"MyPlugin","echo", [str]);
    }
    function callPlugin(str){
        window.func(str,function(){
            alert("Done!");
        });
    }

</script>

</head>
<body>
    <div class="app">

        <div id="deviceready" class="blink">
            <a onclick="callPlugin('Test')">Click me</a>
        </div>
    </div>

</body>

config.xml

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.touristmobile.cordovaDemo" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>CordovaDemo</name>
    ...
    <content src="index.html" />
    <access origin="*" />

    <platform name="android">
    <config-file target="config.xml" parent="/*">
        <feature name="MyPlugin">
            <param name="android-package" value="com.cordovaDemo.MyPlugin"/>
        </feature>
    </config-file>
</platform>

编辑:

好的,我想现在我了解了 cordova 插件的主要思想。 cordova 插件独立于“生成的”Android Wrapper 应用程序。

就我而言,cordova Webview 应该是我现有 Android 应用程序的扩展,并且 Webview 应该从主应用程序调用函数和显示信息。简而言之:是否可以调用与我的 CordovaActivity 处于同一级别的类中的函数

【问题讨论】:

  • 如何将插件添加到项目中?您是否创建了 plugin.xml 文件并使用 plugman/cordova cli 添加插件?或者你直接修改platforms/android中的文件?
  • 我直接创建并修改了plugin.xml文件。但我现在尝试使用 plugman 生成它们

标签: java android cordova plugins cordova-4


【解决方案1】:

在您的插件中,您应该有一个 js 文件,该文件使用 require 导出模块(必须与 plugin.xml 中定义的 js-module 匹配)、java 源文件、额外资源(如果需要),最重要的是让 plugman发挥神奇作用:plugin.xml 文件描述插件的结构,您可以在其中定义要复制的文件(源文件)和 javascript 模块(js 模块)。

然后您使用cordova plugin add 指定插件源的路径以将插件添加到您的项目中。

我建议你看看一个简单的cordova插件,比如振动来研究结构并通过更改文件名、模块名来制作你自己的...,删除所有你不想支持的平台(至少这对我有用) https://git-wip-us.apache.org/repos/asf?p=cordova-plugin-vibration.git;a=tree

参考文档:

【讨论】:

  • 好的,我想现在我了解了cordova插件的主要思想。 cordova 插件独立于“生成的”Android Wrapper 应用程序。在我的情况下,cordova Webview 是我现有 Android 应用程序的扩展,Webview 应该从主应用程序调用函数和显示信息。简而言之:是否可以调用与我的 CordovaActivity 处于同一级别的类中的函数
  • 插件可以安装在任何项目中以提供本机功能。你应该有不同的java文件,但是使用cordova api,你应该能够访问webview。或者你可以在你的插件中有一个单独的活动......但也许对于你想要做的事情,插件不是你需要的。也许您宁愿破解在您的项目中继承 CordovaActivity 类的类?
  • 好的!我使用 Cordova 3.6.4 解决了它 - 嵌入式 Webview 是可能的:我遵循本指南 cordova.apache.org/docs/en/4.0.0/…
【解决方案2】:

好的!我使用 Cordova 3.6.4 解决了它

嵌入的 Webview 是可能的:我遵循了本指南: http://cordova.apache.org/docs/en/4.0.0/guide_platforms_android_webview.md.html#Android%20WebViews

【讨论】:

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