如何在Cordova Android 7.0.0 如下版本集成最新插件 极光插件为例

前提

Cordova Android 7.0.0开始改变了项目安卓平台的架构。新建一个空项目分别添加Android 6.4.0 和 Android 7.0.0平台:java

cordova platform add android@6.4.0
cordova platform add android@7.0.0

生成的安卓平台结构分别为:android

能够看到Cordova从7.0.0项目结构开始和原生Android项目保持一致:git

  • 将AndroidManifest.xml,assets,res,libs资源目录整合到src目录下
  • 将src放入一个app模块,app模块由单独的gradle文件配置

致使的问题

由于项目结构的改变,不少插件也开始修改集成方式以支持7.0.0的使用,并在此基础上进行插件更新操做。
而不少针对低版本开发的项目好比Cordova-Android 6.4.0,若是没法直接升级项目版本,只能选择集成老版本的插件,得不到最新支持。github

解决办法

咱们已经知道了7.0.0开始结构的主要变化,而低版本和高版本的插件集成无非就是拷贝文件的路径不一样罢了,核心代码使用都是同一套。
因此低版本项目想要集成只支持7.0.0的新版插件,只要导入插件后,将插件对应文件还原到低版本对应路径即可。架构

举例

示例插件app

这里以jpush-phonegap-plugin为例,这是极光推送官方支持的PhoneGap/Cordova 插件,插件从 v3.4.0 开始支持 cordova-android 7.0.0。测试

集成gradle

咱们要在低版本的项目集成此插件该怎么作:ui

  1. 老版本插件符合要求,直接集成v3.4.0如下的插件版本。
  2. 须要集成最新的功能,集成最新版本,本身手动配置。

第一种就不说了,咱们直接进行第二种方式集成:spa

  • 以咱们最开始Cordova-Android 6.4.0的空项目为例,并使用官方sample做为测试依据
  • 经过 Cordova Plugins 安装
cordova plugin add jpush-phonegap-plugin --variable APP_KEY=your_jpush_appkey

  • 导入最新插件后咱们再看项目结构,多出了两个目录,这就是新插件

  • 这时若是咱们直接跑sample,没法获取到registrationID,并且原生log中抛出ClassNotFoundException错误,没法成功集成推送

  • 接下来咱们还原插件文件对应低版本路径:

    • 将android/app/src/main/java下的cn.jiguang.*拷贝到android/src/目录下
    • 将android/jniLibs下的全部文件拷贝到android/libs/目录下
    • 删除android/app和android/jniLibs目录

  • 再次编译运行成功获取registrationID,而且可以成功接收推送,完美。

总结

  • Cordova Android 7.0.0结构调整主要体如今资源文件和src目录,目录结构开始贴近原生。
  • Cordova Android 7.0.0如下版本集成最新插件只需将插件对应文件还原到低版本对应路径即可。
  • 同理,若是项目是7.0.0往上的,而插件还没针对7.0.0进行升级,又须要在项目中使用插件怎么办?是否能够根据这篇文章反其道行之呢?留给读者去验证

补充

为什么文中JniLibs文件要拷贝到libs下呢?

  • 由于Cordova Android 7.0.0如下的版本在根目录build.gradle中配置了JniLibs引用路径为libs。

相关文章
相关标签/搜索