前提

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

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

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

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

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

导致的问题

因为项目结构的改变,很多插件也开始修改集成方式以支持7.0.0的使用,并在此基础上进行插件更新操作。

而很多针对低版本开发的项目比如Cordova-Android 6.4.0,如果无法直接升级项目版本,只能选择集成老版本的插件,得不到最新支持。

解决办法

我们已经知道了7.0.0开始结构的主要变化,而低版本和高版本的插件集成无非就是拷贝文件的路径不同罢了,核心代码使用都是同一套。

所以低版本项目想要集成只支持7.0.0的新版插件,只要导入插件后,将插件对应文件还原到低版本对应路径便可。

举例

示例插件

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

集成

我们要在低版本的项目集成此插件该怎么做:

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

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

  • 以我们最开始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。

如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例的更多相关文章

  1. cordova+Android Studio 1.0+ionic+win7(转)

    转自http://blog.csdn.net/fuyunww/article/details/42216125 目录(?)[-] 在项目目录下执行 a创建工程 b添加平台支持 c添加插件在Androi ...

  2. 如何在android studio 1.0 启动时设置代理【解决WARN - ateSettings.impl.UpdateChecker - Connection failed.】

    今天第一次用android studio,下了个比较新的1.0.1 linux版本,结果启动时老是出现以下错误: [ 6987] WARN - ateSettings.impl.UpdateCheck ...

  3. webapp应用---cordova.js 3.7.0插件安装总结

    今天是2014年的最后一天,年终总结什么的就不写了.记录一下今天的工作内容.如果不知道phoneGap,那么就不需要往下看了,phoneGap现在已经叫cordova了,叫什么不重要,重要的是它对we ...

  4. Windows8下PhoneGap 4 + Android Studio 1.0 + VS2013配置指南

    1.准备工作 安装JDK1.6+,设置环境变量 JAVA_HOME C:\Program Files\Java\jdk1.5.0_07 CLASSPATH .;%JAVA_HOME%\lib Path ...

  5. Android 开发 8.0版本启动Service的方法

    前言  google在更新Android8.0后对Service的权限越发收紧.导致目前想要启动服务必需实现服务的前台化(否则在服务启动5秒后,系统将自动报错).下面我们就来看看如何在8.0上启动服务 ...

  6. 解决android sdk 运行出现 could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:的问题

    ionic3项目,在添加android平台后,cordova run android 出现 以下问题: error: could not install *smartsocket* listener: ...

  7. 升级到 Android Studio 3.0 + Gradle 4.1 遇到的一些坑及解决方案

    问题一: Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkD ...

  8. 第三步 Cordova 3.0(及以上版本) 添加插件

    1.使用命令生成项目 例:cordova create jy110 com.example.jy110 jy110 2.使用命令添加插件(如果报错,可能是网络问题,可以多试几次,直到成功) 例:cor ...

  9. 第四步 使用 adt-eclipse 打包 Cordova (3.0及其以上版本) + sencha touch 项目

    cordova最新中文api http://cordova.apache.org/docs/zh/3.1.0/ 1.将Cordova 生成的项目导入到adt-eclipse中,如下: 项目结构如下: ...

随机推荐

  1. ubuntu17.10 安装ssh

    sudo apt-get install openssh-server sudo /etc/init.d/ssh start

  2. C#【Thread】Interlocked 轻量级锁

    什么说它是轻量级呢?因为它仅对整形数据(即int类型,long也行)进行同步. 具体使用如下表: Interlocked.Increment(ref value) 数值加一(原子性操作) Interl ...

  3. MVC DbContext

    指定数据连接,指定表名,移除表名复数化(表名后面不加s),设置字段约束,主外键关系. using MvcApplication1.Models; using System; using System. ...

  4. Java 设计模式系列(七)桥接模式

    Java 设计模式系列(七)桥接模式 桥接模式(Bridge)是一种结构型设计模式.Bridge 模式基于类的最小设计原则,通过使用封装.聚合及继承等行为让不同的类承担不同的职责.它的主要特点是把抽象 ...

  5. 如何规范移动应用交互设计?UI/UX设计师须知的11个小技巧

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 十年前,手机的使用只是为了沟通. 而近几年,情况发生了很大变化,我们很难找到不使用手机的人.手机在极 ...

  6. UI / UX设计师如何玩转用户心理学原理?

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 众所周知,心理学在APP的用户体验设计中起着非常重要的作用.通过了解我们的设计是如何被感知的,我们可 ...

  7. mongo学习- mapReduce操作事例

    源数据: { "_id" : 1.0, "name" : "abc", "age" : 43.0, "type ...

  8. JVM GC 机制与性能优化

    目录(?)[+] 1 背景介绍 与C/C++相比,JAVA并不要求我们去人为编写代码进行内存回收和垃圾清理.JAVA提供了垃圾回收器(garbage collector)来自动检测对象的作用域),可自 ...

  9. Java动态代理(二)CGLIB动态代理应用

    JDK自从1.3版本开始,就引入了动态代理,JDK的动态代理用起来非常简单,但是它有一个限制,就是使用动态代理的对象必须实现一个或多个接口 .如果想代理没有实现接口的类可以使用CGLIB包. CGLI ...

  10. Oracle E-Business Suite R12.2的新技术特点

    Oracle公司的系统研发开发与执行效率,让人不得不佩服.从2008年1月收购BEA到现在短短几年时间,就把Bea WebLogic产品融合到了Oracle公司自己的原研发产品之庞大的Oracle E ...