最近使用cordova
开发混合APP
,不过有些功能只使用H5
实现不了,因此需要用原生代码开发,然后包装成cordova
插件。
目前来看cordova
插件设计还是很有问题的,开发很不方便,总不能用记事本开发吧,依赖等信息都没有。
比较好的开发方式是导入到一个已经存在的cordova
项目中,在项目中开发,这里开发的android
平台插件。
创建插件
安装plugman
首先需要安装plugman
,plugman
是cordova
提供的插件开发工具,比较方便创建插件,添加插件平台等。
npm install -g plugman
创建插件
使用plugman
创建一个插件cordova-plugin-jpush-custom
# 创建插件
plugman create --name JPushCustomPlugin --plugin_id cordova-plugin-jpush-custom --plugin_version 1.0.0
# 添加Android平台
cd JPushCustomPlugin
plugman platform add --platform_name android
# 创建package.json,填写基本信息就可以
plugman createpackagejson .
项目创建完毕。
开发插件
基本的项目结构已经有了,格式化plugin.xml
,修改包名和映射,方便后面导入到cordova
项目中
修改plugin.xml
修改plugin.xml
<?xml version='1.0' encoding='utf-8'?>
<plugin id="cordova-plugin-jpush-custom" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android">
<name>JPushCustomPlugin</name>
<js-module name="JPushCustomPlugin" src="www/JPushCustomPlugin.js">
<clobbers target="cordova.plugins.JPushCustomPlugin"/>
</js-module>
<platform name="android">
<config-file parent="/*" target="res/xml/config.xml">
<feature name="JPushCustomPlugin">
<param name="android-package" value="com.xxxxx.app.plugin.custom.JPushCustomPlugin"/>
</feature>
</config-file>
<config-file parent="/*" target="AndroidManifest.xml"></config-file>
<source-file src="src/android/JPushCustomPlugin.java"
target-dir="src/com/xxxxx/app/plugin/custom"/>
</platform>
</plugin>
主要修改下图的两个地方。
然后插件JPushCustomPlugin.java
的包名也要改掉
定义JS对象
默认情况下对应的插件可以在页面上使用window.cordova.plugins.JPushCustomPlugin
访问到
<js-module name="JPushCustomPlugin" src="www/JPushCustomPlugin.js">
<clobbers target="cordova.plugins.JPushCustomPlugin"/>
</js-module>
可以修改clobbers
的target
值来定义插件对象的位置,如可以定义为<clobbers target="JPushCustomPlugin"/>
,然后就可以使用window.JPushCustomPlugin
访问了。
如果有多个js
文件就需要多个<js-module>
,多个Java
文件就需要多个<source-file>
。
添加到cordova项目
cd
到自己的cordova
项目中,再根据相对路径以链接方式添加刚刚创建的插件
# cd到自己的cordova项目
# 安装到cordova项目中(根据实际路径)
cordova plugin add ./plugin_custom/JPushCustomPlugin/ --link
然后再在Android Studio中打开自己的cordova项目,参考新建Cordova项目:https://fugary.com/?p=251
生成的代码默认已经提供了一个叫做coolMethod的方法,可以直接使用这个方法做测试,修改index.js
测试。
index.js
的位置是src/main/assets/www/js/index.js
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
// Cordova is now initialized. Have fun!
console.log('Running cordova-' + cordova.platformId + '@' + cordova.version);
document.getElementById('deviceready').classList.add('ready');
cordova.plugins.JPushCustomPlugin.coolMethod('测试消息', function(msg){
console.info(msg);
});
}
在模拟器中运行,然后再在chrome://inspect
中查看,用法可以参考:https://fugary.com/?p=322
可以看到测试成功了,可以开发自己的方法了。
常见问题
记录下遇到的几个问题
安装插件link错误
报错信息如下,提示是文件创建链接失败
Installing "cordova-plugin-jpush-custom" for android
Error during processing of action! Attempting to revert...
Failed to install 'cordova-plugin-jpush-custom': Error: Uh oh!
EPERM: operation not permitted, symlink '..\..\..\..\..\..\..\..\..\..\..\
......
一般都是权限问题,cordova
这里是因为android
平台引起,需要重新添加一次android
平台
cordova platform rm android
cordova platform add android
Android Studio编译问题
如果Android Studio中出现一片红,没有认出相关的Class
,可以清理下缓存:
Cannot resolve symbol 'CordovaPlugin'
Cannot resolve symbol 'CallbackContext'