l 介绍
本文将细致讲解cordova插件的创建、编写、配置、发布,涉及aar+jar+so、静态资源、四大组件等。
l 环境准备
1.node
2.ionic
3.cordova
4.plugman
plugman是用于安装和卸载用于Apache Cordova项目的插件的命令行工具, 安装plugman
$ npm install -g plugman
复制代码
- 1
- 2
5.AndroidStudio
l 一切都要从一个简单cordova插件开始
l 创建ionic项目
用于测试cordova的插件
ionic start CordovaProject blank
复制代码
- 1
- 2
此时cordovaProject下会生成如下结构
在添加platforms和plugins之后,可以在此目录下打包
CordovaProject$ cordova build android
复制代码
- 1
- 2
l 创建插件
创建一个最简单的Toast插件
plugins$ plugman create --name ThsToast --plugin_id cordova-plugin-ths-toast --plugin_version 1.0.0
复制代码
- 1
- 2
创建插件的完整模版:为了方便在插件开发过程中进行测试,将插件创建在 cordovaPluginProject 项目目录下的 plugins 文件夹下
plugman platform add 创建ThsToast插件的平台基础代码
进入具体的插件目录下,创建插件安卓和iOS平台基础代码
cordova-plugin-ths-toast$ plugman platform add --platform_name android
cordova-plugin-ths-toast$ plugman platform add --platform_name ios
复制代码
- 1
- 2
- 3
添加之后将在cordova-plugin-ths-toast目录下产生android和ios两个目录, 生成的java文件内容如图所示
重命名ThsToast插件目录名称(可选)
接着手动将ThsToast目录重命名为和上述plugin_id一样的值:cordova-plugin-ths-toast,命名方式和cordova插件命名规范保持一致,ths是公司的统一标识,通常是英文字符串
重命名ThsToast插件目录下android目录java代码中的package包名和api方法名
需要将默认的包名改为[反向域值].cordova.[插件name],要注意的是,plugin.xml中配置的java文件target-dir输出目录需要和这里包名目录匹配,如 plugin.xml
<source-file src="src/android/ThsToast.java" target-dir="src/org/apache/cordova/thstoast" />
复制代码
- 1
- 2
注意:起名不要和安卓原生方法冲突了,比如这里ThsToast如果改成Toast,就会和android.widget.Toast中的Toast类重名,主要是区分是系统的还是公司的插件
l 插件配置
ThsToast插件目录下的plugin.xml配置js调用方法名和资源文件输出路径
添加完平台后,cordova-plugin-ths-toast 目录下的 plugin.xml 文件将添加如下内容 修改 plugin.xml 文件内容如下
<?xml version='1.0' encoding='utf-8'?>
<plugin id="cordova-plugin-ths-toast" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
<name>Toast</name>
<js-module name="ThsToast" src="www/ThsToast.js">
<!-- target修改, 通过window.ThsToast.show或ThsToast.show即可调用api -->
<clobbers target="ThsToast" />
</js-module>
<span class="hljs-tag"><<span class="hljs-name">platform</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"android"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">config-file</span> <span class="hljs-attr">parent</span>=<span class="hljs-string">"/*"</span> <span class="hljs-attr">target</span>=<span class="hljs-string">"res/xml/config.xml"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">feature</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"ThsToast"</span>></span>
<span class="hljs-comment"><!-- param value修改,[包名].[文件名] --></span>
<span class="hljs-tag"><<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"android-package"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"cn.com.ths.thstoast.ThsToast"</span> /></span>
<span class="hljs-tag"></<span class="hljs-name">feature</span>></span>
<span class="hljs-tag"></<span class="hljs-name">config-file</span>></span>
<span class="hljs-tag"><<span class="hljs-name">config-file</span> <span class="hljs-attr">parent</span>=<span class="hljs-string">"/*"</span> <span class="hljs-attr">target</span>=<span class="hljs-string">"AndroidManifest.xml"</span> /></span>
<span class="hljs-comment"><!-- target-dir修改,最终打包出的java文件完整目录路径 --></span>
<span class="hljs-tag"><<span class="hljs-name">source-file</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"src/android/ThsToast.java"</span> <span class="hljs-attr">target-dir</span>=<span class="hljs-string">"src/cn/com/ths/thstoast"</span> /></span>
<span class="hljs-tag"></<span class="hljs-name">platform</span>></span>
<span class="hljs-tag"><<span class="hljs-name">platform</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"ios"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">config-file</span> <span class="hljs-attr">parent</span>=<span class="hljs-string">"/*"</span> <span class="hljs-attr">target</span>=<span class="hljs-string">"config.xml"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">feature</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"ThsToast"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">param</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"ios-package"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"ThsToast"</span> /></span>
<span class="hljs-tag"></<span class="hljs-name">feature</span>></span>
<span class="hljs-tag"></<span class="hljs-name">config-file</span>></span>
<span class="hljs-tag"><<span class="hljs-name">source-file</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"src/ios/ThsToast.m"</span> /></span>
<span class="hljs-tag"></<span class="hljs-name">platform</span>></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8