Cordova的Android插件开发

最近使用cordova开发混合APP,不过有些功能只使用H5实现不了,因此需要用原生代码开发,然后包装成cordova插件。

目前来看cordova插件设计还是很有问题的,开发很不方便,总不能用记事本开发吧,依赖等信息都没有。

比较好的开发方式是导入到一个已经存在的cordova项目中,在项目中开发,这里开发的android平台插件。

创建插件

安装plugman

首先需要安装plugmanplugmancordova提供的插件开发工具,比较方便创建插件,添加插件平台等。

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>

主要修改下图的两个地方。

image-20220406164214711

然后插件JPushCustomPlugin.java的包名也要改掉

image-20220406175732910

定义JS对象

默认情况下对应的插件可以在页面上使用window.cordova.plugins.JPushCustomPlugin访问到

<js-module name="JPushCustomPlugin" src="www/JPushCustomPlugin.js">
    <clobbers target="cordova.plugins.JPushCustomPlugin"/>
</js-module>

可以修改clobberstarget值来定义插件对象的位置,如可以定义为<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

image-20220407094949978

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

image-20220407094555771

可以看到测试成功了,可以开发自己的方法了。

常见问题

记录下遇到的几个问题

安装插件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,可以清理下缓存:

image-20220406182341351

Cannot resolve symbol 'CordovaPlugin'
Cannot resolve symbol 'CallbackContext'
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇