关于Cordova 工程的一些小坑坑笔记

这篇笔记涵盖了在Cordova工程中遇到的一些问题及其解决方案,包括JNI的64位CPU兼容问题,CordovaWebView的加载进度监听,NPM更新或安装错误处理,deviceready事件延迟,channel模块的使用陷阱,以及android端settings.gradle的管理问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.JNI

 在项目中.so文件的调用不兼容64位CPU的情况,报错:java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader

解决办法是:

Android{}的范围内,添加:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//noinspection all
task copyNativeLibs(type: Copy) {
     // third party lib so
     from( new File(projectDir, 'libs' )) { include 'armeabi/*.so' }
     into new File(buildDir, 'native-libs' )
}
 
tasks.withType(JavaCompile) {
     compileTask ->
         //noinspection all
         compileTask.dependsOn copyNativeLibs
}
 
//noinspection all
tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
     pkgTask ->
         pkgTask.jniFolders = new HashSet<file>()
         pkgTask.jniFolders.add( new File(buildDir, 'native-libs' ))
}</file>

2.关于CordovaWebView监听加载进度问题

cordova有个接口onMessage 可以监听到加载过程中各种事件

public Object onMessage(String id, Object data){}

id:事件的类型,有如:onPageStarted,onPageFinished,exit,onReceivedError

data(JSON类型):是事件具体返回的参数,有如:onReceivedError事件下,data.getInt("errorCode")== -6时候表示网络加载过程中失败了。


3.关于NPM更新或安装错误办法

  1. Install latest version of node
  2. Run: npm cache clean
  3. Run: npm install cordova -g
  4. npm uninstall -g Cordova 卸载掉再install

4.提示deviceready has not fired after 5 seconds

 在config.xml配置上

<allow-navigation href="*" />
<allow-navigation href="http://*/*" />

5.cordova/channel这个模块些许小坑

channel是cordova的事件监听,类似于观察者模式。

曾经遇到一个问题:

channel.createSticky('onCordovaAppVersionReady');创建了一个事件

channel.waitForInitialization('onCordovaAppVersionReady');表示这个事件如果不完成,哥就停住,必须完成这个事件cordova才能启动完成往下走。


OK那么执行下面一段代码试试

cordova.exec(
 (success)=>{
channel.onCordovaAppVersionReady.fire();//成功了就调用fire ,告诉监听器,这事件完成了
}
, (error)=>{
channel.onCordovaAppVersionReady.fire(); //失败了也告诉下,让程序继续往下走,but 这个exec执行原生的程序如果RareloopAppVersion模块没找到会直接不抛给error回调,这时候会造成无法fire,你懂的,waitForInitialization一直收不到消息,程序就stop住了
}, "RareloopAppVersion", "getAppVersion", []);

6.android端的settings.gradle小坑

在比较老的cordova版本中会有小坑

在settings.gradle中可以看到当前主工程android 默认依赖include ":CordovaLib",如果有新需求需要再依赖一个工程,比如SockLib,这时候按照流程来导入是木有一点问题的,settings.gradle里面会include “:SockLib”

但是,当你用cordova add plugin ** 命令安装一个插件时,问题就来鸟,你会发现settings.gradle里面的include “:SockLib”木有了!!!!!!

原因是什么呢?研究发现在cordova/lib/builders/GradleBuilder.js里面会自动重置settings.gradle。

当然新版的已经修复这个问题了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值