暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

cordova插件开发

小宇想买乌龟 2018-09-17
394

    做了快一年的cordova混合开发,最近终于有空来了解cordova插件了。毫无疑问,cordova插件家族是很丰富的。github上一搜索就是一大堆,虽说不要重复造轮子,但是有些东西你总得去了解它运行的原理。所以今天我们来试着开发一个最基础的基于Android的Toast插件

    前期准备:一个Android项目,一个cordova项目。这里,本人选择了自己喜欢的几个工具用于编辑cordova插件,分别是:WebStrom、Eclipse、GapDebug。

    插件实现原理:这里百度了一张图片。可以简单的了解一下。其实就是前台js发送一个消息,后台调用原生代码实现原生功能,如打开摄像头,打开本地文件等




    既然要开发原生插件,那么毫无疑问,咱们的原生代码得没问题才行。这就好比地基都没有,房子咋造?空中楼阁么。。。。哈哈哈,扯远了

    一.新建Android项目

    首先,新建一个Android项目,可以选用Eclipse,或android studio。根据个人喜好自己确定。因为习惯于Eclipse。这里就直接用eclipse建个项目了。项目名称叫TestToast


    点击next,一直点到最后一步,新建一个Empty Activity。


    

    完成后直接找到src目录下,打开MainActivity。编辑一下我们自己的Android项目。然后编写代码。这里因为只要演示一下,我就只写了一个简单的toast了。编写完成后运行,确定没问题就可以进行下一步了。接下来要写一个自定义ToastDemo.java类实现。这里需要引用cordovaLib这个外部依赖包,我们先赖创建一个cordova项目,这样才能拿到这个lib包

    二.创建cordova项目

    1.打开windows控制台,新建一个cordova项目。并添加Android平台



    2.完成之后找到项目目录下platforms\android。可以看到下面有一个CordovaLib文件夹,打开之后你会发现其实它就是一个Android项目。将该项目导入Eclipse,然后再在我们原来的TestToast项目里面添加依赖该项目。TestToast项目右键->properties->Android->add。完成后如下所示


    3.添加完成后在src目录下新建一个TestDemo.java类,继承CordovaPlugin。注意,我们写的所有插件都要继承CordovaPlugin。然后重写execute方法。在方法里面写要操作的原生代码。




    

对于自定义插件类,额外补充以下两点:

  • 关于args值取用方式

a)  如果js传入的如果是对象数组,即[{“key”:”value”,”key”:”value”}],则如下取用:

JSONArray jsonarr = new JSONArray(args.getString(0)); 

JSONObject json = jsonarr.getJSONObject(0);

String str = json.get("key");


b)  如果js传入的如果是普通数组,即["a",10,true,…],则如下取用:

args.getString(0) 

args.getInt(1) 

args.getBoolean(2)

  • 关于该方法的参数介绍

a)  action    要执行的方法

b)  args  传入参数。

c)  callbackContext  当执行完成时要返回参数时候使用该方法
到这里,我们的java代码基本上已经准备就绪,下面就来写js接口


三.原生插件接入cordova

    1.安装plugman:npm install -g plugman

    2.plugman安装完成后就可以创建插件了

        plugman create --name <pluginName> --plugin_id <pluginID> --plugin_version <version> [--path <directory>] [--variable NAME=VALUE]

参数:
pluginName: 插件名字
pluginID: 插件id, egg : coolPlugin
version: 版本, egg : 0.0.1
directory:一个绝对或相对路径的目录,该目录将创建插件项目
variable NAME=VALUE: 额外的描述,如作者信息和相关描述
egg : plugman create --name CoolPlugin --plugin_id coolPlugin --plugin_version 0.0.1

执行命令:plugman create --name toast --plugin_id hld.taost --plugin_version 1.0.0

添加成功后在该目录下面可看到一个toast的文件夹,打开后可看到如下文件




目录结构大致如下

    这里有必要解释一下这几个目录的意思

    a)  src 用于存放各个平台的本地代码,我的只有Android平台的,所以只有一个android文件夹。

    b)  www 用于存放js文件,js文件主要做接口用

    c)  plugin.xml 文件是插件的配置文件,至关重要。

    

插件魔板生成成功后,我们开始配置cordova插件内容。前期我们已经新建了一个cordova项目,用webstrom打开,然后复制刚刚创建的插件到这个目录下。第一步,将之前在Android工程中写的MyToast.java文件复制到插件的android目录下。由于这里只用到了一个Toast。其他包括布局啊,什么的都用不到,所以就只有一个.java文件,如果有用到布局啊,外部jar包之类的话,还需要将其统统都拷贝到android目录下。

复制完成后打开webstrom。可以看到如下目录结构。toast文件夹就是刚刚新建的文件夹。

重要时刻来了,之前就是这里配置错误,弄了很久终于解决了。

1)配置toast.js

var exec = require('cordova/exec');

exports.toast = function(args,success,error){
exec(success,error,'MyToast','toast',[args]);
}

第一行是固定格式,照着写就行了。第二行中的toast为前台调用时候的方法名。解释一下exec();方法

success:成功后执行的方法

error:失败后执行的方法

MyToast:这个参数不太清楚。不过最好配置的和原生类名一致。

toast:还记得写原生JAVA代码是传入的那个action的值么,没错,就是它!贴一张图

args:传入参数

toast.js里面大概就这么几个内容。接下来就是plugin.xml了,其实cordova插件的核心就是这个plugin.xml了。

这个配置我也不太清楚,都是照着模板来的。根据经验,其中有一个name节点。不知道是否对应着刚刚toast里面的那个exec方法里面的第三个参数MyToast。有兴趣可以验证一样。

platform:需要配置一个name,也就是对于哪个平台,我们都知道cordova厉害之处就在于跨平台。所以这里我们写android,因为我们的插件就只支持Android嘛。

config-file:固定格式

feature:这里面的Name应该可以随意取的吧,不清楚。最好配置的和最上面的name一致。

source-file:这里其实就是把插件里面的文件复制到对应的Android原生工程里面的那个路径,哪个文件夹去。因为这里就只有一个java文件,所以写上就好了。src路径写上插件的路径。target-dir:这里写刚刚MyToast.java的包名。

所有东西都配置完成后,就可以添加插件到cordova项目中了。


四.插件集成到cordova项目中

进入控制台,执行命令cordova plugin add toast。注意:执行的目录必须要是在一个cordova项目的目录下,且当前目录下有toast插件。这样才能添加成功

完成之后我们在首页调用,调用的方法如下:

<script>
   function myFunction() {
       cordova.plugins.MyToast.toast({message:'原生toast'},function () {
},function(){
});
   }
</script>

有人可能会问,为什么是cordova.plugins.MyToast.toast。而不是其他的方式。如果刚刚你细心一点的话,就会发现。cordova.plugins.MyToast这串字符,其实也就是刚刚的plugin.xml里面配置的

<clobbers target="cordova.plugins.MyToast" />。这里想改成其他的也可以。

添加完成之后打包就可以了使用了。可以看到。弹出了我们原生的toast




    其实,cordova真正厉害之处就在于插件了,基本上只要原生能做到的,它都能做到。而且网上的插件一大堆。想要什么直接搜素一下就拿到了。下面放上该项目的地址。插件在项目路径下的toast文件夹里面


项目github地址:https://github.com/luofuxian/Androidtoast


文章转载自小宇想买乌龟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论