Cordova嵌入Android项目(CordovaWebView)

首先,Cordova官方是有介绍如何将Cordova嵌入Android项目中的,链接Embedding Cordova WebView on Android。
不过这篇文章年久失修,使用的Cordova版本还是1.9,其中的用法对现在的Cordova已经完全不适用了。本文使用的Cordova版本为10.0.0androidx
最新官方文档地址:Cordova Android WebViews

文章目录

  • Cordova嵌入Android项目(CordovaWebView)
  • 准备
  • 摘要
  • 创建Cordova项目
  • 添加Cordova插件和Android平台
  • Cordova框架迁移
  • 配置Android项目(Cordova嵌入)
  • 完成嵌入
  • 参考

准备

首先你需要准备相关的工具:

  • Cordova CLI
  • Java SE JDK
  • Android Studio
  • Android SDK Platform Tools.

摘要

想要嵌入Cordova项目到Android之中,首先需要使用Cordova CLI来创建一个Cordova项目,然后再下载需要使用的Cordova plugin。

然后将Cordova项目创建的文件拷贝到需要嵌入的Android项目中。

最后修改Android项目的相关配置和代码完成嵌入。

创建Cordova项目

使用Cordova提供的命令行工具(CLI)创建Cordova项目,指令如下(指令文档:Create the App):

cordova create  hello com.example.hello HelloWorld

添加Cordova插件和Android平台

使用Cordova CLI来添加需要使用的Cordova插件(例如相机):

cordova plugin add cordova-plugin-camera

使用Cordova CLI来添加Android平台,生成的Android代码我们后面会用到:

cordova platform add android

最后使用下面的prepare命令来同步Android项目的配置

cordova prepare android

Cordova框架迁移

创建一个Android项目或者打开已有的Android项目,并且最好两个项目(Cordova/Android)使用相同的包名和项目名。

  1. 打开Cordova项目的根目录,进入CORDOVA_PROJECT_ROOT/platforms/android/CordovaLib/src/目录,复制其中的org目录,这个目录包含了Cordova的框架代码。

  2. 打开Android项目的根目录,进入STUDIO_PROJECT_ROOT/app/src/main/java/目录,然后粘贴刚刚复制的org目录。


  1. 打开Cordova项目的根目录,进入CORDOVA_PROJECT_ROOT/platforms/android/app/src/main/java/目录,复制其中的org目录,这个目录包含了我们之前添加Cordova Plugin代码。

  2. 打开Android项目的根目录,进入STUDIO_PROJECT_ROOT/app/src/main/java/目录,然后粘贴刚刚复制的org目录。


  1. 打开Cordova项目的根目录,进入CORDOVA_PROJECT_ROOT/platforms/android/app/src/main/目录,复制其中的assets目录,这个目录包含了Cordova的JavaScript库,和默认的HTML文件。

  2. 打开Android项目的根目录,进入STUDIO_PROJECT_ROOT/app/src/main/,粘贴刚刚复制的assets目录。


  1. 打开Cordova项目的根目录,进入CORDOVA_PROJECT_ROOT/platforms/android/app/src/main/res/目录,复制其中的xml目录,这个目录包含了Cordova需要使用的相关配置。

  2. 打开Android项目的根目录,进入STUDIO_PROJECT_ROOT/app/src/main/res/目录,粘贴刚刚复制的xml目录。


  1. [可选] 编辑AndroidManifest.xml,有些插件会修改此文件,并且添加相关的权限。请参照CORDOVA_PROJECT_ROOT/platforms/android/app/src/main/AndroidManifest.xml修改STUDIO_PROJECT_ROOT/app/src/main/AndroidManifest.xml

配置Android项目(Cordova嵌入)

Cordova项目都已经迁移到Android项目当中了,现在需要修改Android项目来完成Cordova的嵌入。

  1. 编辑布局文件

    此处以空白Android项目的activity_main.xml布局文件为例,插入Cordova框架提供的SystemWebView

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><org.apache.cordova.engine.SystemWebViewandroid:id="@+id/webView"android:layout_width="match_parent"android:layout_height="match_parent" /></android.support.constraint.ConstraintLayout>
    

    这样,Cordova提供的webView就被被我们添加到了自己的布局文件中。

  2. 修改Activity

    此处以空白Android项目的MainActivity为例。

    2.1 修改activity的父类

    public class MainActivity extends CordovaActivity { ... }
    

    这样我们就可以使用Cordova提供的相关方法了。

    2.2 修改onCreate方法的初始化

    onCreate中进行CordovaActivity的初始化和加载应用的根目录(URL):

    @Override
    public void onCreate(Bundle savedInstanceState)
    {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); // Set content view to main activity as done in any Android appsuper.init();loadUrl(launchUrl); // Preload launch URL found from /res/xml/config.xml -> <content src...>
    }
    

    注意onCreate方法的访问权限由protected改为了public

    2.3 重写makeWebView方法

    我们需要重写makeWebView方法来进行CordovaWebView的初始化,CordovaWebView会管理所有的事件、插件和CordovaWebViewEngine。并且将使用SystemWebViewEngine的实现类(CordovaWebViewImpl)来接管所有来自WebView的事件。

    @Override
    protected CordovaWebView makeWebView() {SystemWebView appView = findViewById(R.id.webView);return new CordovaWebViewImpl(new SystemWebViewEngine(appView));
    }
    

    2.4 添加一个空的createViews方法

    createViews会确保activity_main.xml被用来进行UI的渲染。

    @Override
    protected void createViews() { }
    

    2.5 MainActivity修改结果

    最后的修改结果应该像下面这样:

    public class MainActivity extends CordovaActivity {@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); // Set content view to main activity as done in any Android appsuper.init();loadUrl(launchUrl); // Preload launch URL found from /res/xml/config.xml -> <content src...>}@Overrideprotected CordovaWebView makeWebView() {SystemWebView appView = findViewById(R.id.webView);return new CordovaWebViewImpl(new SystemWebViewEngine(appView));}/*** Intentionally left blank so that the activity_hud and webView are used.*/@Overrideprotected void createViews() { }
    }
    

完成嵌入

至此,所有的嵌入工作已经完成了。直接运行会看到Cordova的默认页面(Device Ready)。

:如果某些插件包的代码报错,那就把对应的v4包内容使用androidx的代替即可。

参考

android-cordova-embedded

Cordova嵌入Android项目(CordovaWebView)相关推荐

  1. android cordova 教程,【WebApp】从零开始创建Cordova for android 项目

    感谢各位伟大的作者,相关参考地址见文中所列! 一.在idea中关闭项目 先从菜单 File -> Close Project 关掉此项目,然后重新启动idea,在项目列表中,将鼠标移到你想要删除 ...

  2. 如何在原生Android项目里嵌入Cordova

    背景:这段时间在维护一个Cordova混合项目,以前稍微接触过Cordova,也写过简单的纯纯的Cordova的Demo,但是没有尝试过混合原生的Cordova.在接到项目后比较了一下项目架构和Cor ...

  3. Webstorm+cordova打包vue成Android项目

    一.新建vue项目 1.打开cmd命令,输入:npm i -g npm 这个命令类似用npm自身来install自己,即升级npm 2.再输入:npm install -g vue-cli 这个命令是 ...

  4. 新建android项目导包,Cordova开发App入门(一)创建android项目

    前言Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的AP ...

  5. java安卓app开发教程_[Android教程] Cordova开发App入门(一)创建android项目

    前言 Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的A ...

  6. 关于cordova打包的android项目,禁止随手机系统改变字体大小的解决方法

    1. 我用的是最新版的cordova,在项目根目录下找到 node_modules\cordova-android\framework\src\org\apache\cordova\engine\Sy ...

  7. 用Cordova打包Vue-vux项目

    技术搭建:vue + vux 首先推荐阅读这篇文章,写的已经很详细了:https://www.jianshu.com/p/25d797b983cd 此处记录下我按照这篇文章打包的时候报的一些错误,方便 ...

  8. 我的Android进阶之旅------Android项目目录结构分析

    此文章来自"博客园"博主,仅在此借鉴,学习 1.HelloWorld项目的目录结构 1.1.src文件夹 1.2.gen文件夹 1.3.Android 2.1文件夹 1.4.ass ...

  9. Android项目目录结构分析

    此文章来自"博客园"博主,仅在此借鉴,学习 1.HelloWorld项目的目录结构 1.1.src文件夹 1.2.gen文件夹 1.3.Android 2.1文件夹 1.4.ass ...

最新文章

  1. 一些linux下的性能监测工具
  2. 如何计算_平整场地如何计算?
  3. 宁波大学计算机网络,宁波大学计算机网络TCP与UDP题目
  4. 2015 跨年博文总结
  5. mysql 转换编码
  6. python动力学建模与仿真_PyMC3中的简单动力学模型
  7. Java语法总结 - 方法
  8. mysql中位数函数_如何使用简单的SQL查询在MySQL中计算中位数
  9. Linux查看ip 地址命令(ip addr)
  10. 计算机的隐藏功能应用,关于Mac电脑的8个神奇隐藏功能,你知道几个?
  11. 4个高质量站点推荐值得收藏
  12. 华为服务器显示乱码,本地正常 服务器乱码
  13. java中定义byte数组,浅谈java的byte数组的不同写法
  14. 魔兽世界固态硬盘无法连接服务器,《魔兽世界》9.0配置更改 不再强制要求SSD...
  15. CentOS7.6搭建开源WCP知识管理系统
  16. riak mysql_Riak安装
  17. 基于动画图解常用的机器学习算法
  18. Cruzer Profile 原理分析
  19. 【转】lonekight@xmu·ACM/ICPC 回忆录
  20. 软件中常用的反义词组

热门文章

  1. 外包程序员的幸福生活
  2. jquery实现ajax异步请求
  3. 《火影忍者》中有哪些瞳术能够施展时空间忍术?
  4. 列表ListView
  5. Linux 内核同步(七):RCU机制
  6. Android中二维码的扫描与生成(zxing库)
  7. Unity 使用C#List (Clear())出现的问题
  8. 易语言反截图_[原创]反截图技术的原理及简单实现
  9. python字符 * 和 ** 的拆包(打散)功能
  10. window修改mysql端口_修改mysql端口(Windows免安装版)