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. 【特征工程】特征分箱
  2. 【pmcaff】看看人家的办公室 天天加班都愿意
  3. 四大开源无人机项目,极客要Get了
  4. html怎么做出相框的效果,PS滤镜制作漂亮的实木相框效果
  5. IntelliJ IDEA添加jar包
  6. python操作excel模板_Python Excel模板读写,维护公式和格式
  7. matplotlib color 参数
  8. 把网页放到云服务器上,怎么把网页放到云服务器上
  9. matlab repmat_利用MATLAB实现KNN
  10. Petal Search is currently only available
  11. myeclipse jsp和java字体设置
  12. 地球会随着人口增加而变重吗
  13. 从Word Embedding到Bert模型——自然语言处理预训练技术发展史
  14. 如何通过pk8和pem生成jks
  15. 信息系统项目管理师---第八章 项目质量管理
  16. 栈和队列的顺序和链式存储结构
  17. 戴尔微型计算机怎么换硬盘,教你如何给DELL台式电脑换硬盘
  18. 博通Brocade漏洞影响多家大厂的存储解决方案
  19. 清北毕业生5年来去向大数据:北大偏爱银行,清华更倾向国网,华为堪称最大黑洞-1
  20. ScrollView和HorizontalScrollView滚动条的简单使用

热门文章

  1. 信息安全学习(不断更新),希望可以坚持下去。
  2. java获取项目在磁盘路径
  3. ZYNQ之FPGA学习----Verilog HDL语法(2)
  4. 获取当前scn号scn1_Oracle 系统改变号SCN详解
  5. 改变CLM陆面模式结果文件的输出变量、特征值及频率
  6. 运用Ramdisk创建内存虚拟硬盘
  7. ppp = 2.4.4 is needed by pptpd-1.3.4-2.rhel5.x86_64的解决办法及原因
  8. Android开发之评论回复功能
  9. 手机便签上怎么设置保险到期续保提醒呢?
  10. 追逐自己的梦想----------辅助制作第二课:人物气功加点分析