Cordova嵌入Android项目(CordovaWebView)
Cordova嵌入Android项目(CordovaWebView)
首先,Cordova官方是有介绍如何将Cordova嵌入Android项目中的,链接Embedding Cordova WebView on Android。
不过这篇文章年久失修,使用的Cordova版本还是1.9
,其中的用法对现在的Cordova已经完全不适用了。本文使用的Cordova版本为10.0.0
和androidx
。
最新官方文档地址: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)使用相同的包名和项目名。
打开Cordova项目的根目录,进入
CORDOVA_PROJECT_ROOT/platforms/android/CordovaLib/src/
目录,复制其中的org
目录,这个目录包含了Cordova
的框架代码。打开Android项目的根目录,进入
STUDIO_PROJECT_ROOT/app/src/main/java/
目录,然后粘贴刚刚复制的org
目录。
打开Cordova项目的根目录,进入
CORDOVA_PROJECT_ROOT/platforms/android/app/src/main/java/
目录,复制其中的org
目录,这个目录包含了我们之前添加Cordova Plugin
代码。打开Android项目的根目录,进入
STUDIO_PROJECT_ROOT/app/src/main/java/
目录,然后粘贴刚刚复制的org
目录。
打开Cordova项目的根目录,进入
CORDOVA_PROJECT_ROOT/platforms/android/app/src/main/
目录,复制其中的assets
目录,这个目录包含了Cordova的JavaScript
库,和默认的HTML文件。打开Android项目的根目录,进入
STUDIO_PROJECT_ROOT/app/src/main/
,粘贴刚刚复制的assets
目录。
打开Cordova项目的根目录,进入
CORDOVA_PROJECT_ROOT/platforms/android/app/src/main/res/
目录,复制其中的xml
目录,这个目录包含了Cordova需要使用的相关配置。打开Android项目的根目录,进入
STUDIO_PROJECT_ROOT/app/src/main/res/
目录,粘贴刚刚复制的xml
目录。
- [可选] 编辑
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的嵌入。
编辑布局文件
此处以空白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就被被我们添加到了自己的布局文件中。
修改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)相关推荐
- android cordova 教程,【WebApp】从零开始创建Cordova for android 项目
感谢各位伟大的作者,相关参考地址见文中所列! 一.在idea中关闭项目 先从菜单 File -> Close Project 关掉此项目,然后重新启动idea,在项目列表中,将鼠标移到你想要删除 ...
- 如何在原生Android项目里嵌入Cordova
背景:这段时间在维护一个Cordova混合项目,以前稍微接触过Cordova,也写过简单的纯纯的Cordova的Demo,但是没有尝试过混合原生的Cordova.在接到项目后比较了一下项目架构和Cor ...
- Webstorm+cordova打包vue成Android项目
一.新建vue项目 1.打开cmd命令,输入:npm i -g npm 这个命令类似用npm自身来install自己,即升级npm 2.再输入:npm install -g vue-cli 这个命令是 ...
- 新建android项目导包,Cordova开发App入门(一)创建android项目
前言Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的AP ...
- java安卓app开发教程_[Android教程] Cordova开发App入门(一)创建android项目
前言 Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的A ...
- 关于cordova打包的android项目,禁止随手机系统改变字体大小的解决方法
1. 我用的是最新版的cordova,在项目根目录下找到 node_modules\cordova-android\framework\src\org\apache\cordova\engine\Sy ...
- 用Cordova打包Vue-vux项目
技术搭建:vue + vux 首先推荐阅读这篇文章,写的已经很详细了:https://www.jianshu.com/p/25d797b983cd 此处记录下我按照这篇文章打包的时候报的一些错误,方便 ...
- 我的Android进阶之旅------Android项目目录结构分析
此文章来自"博客园"博主,仅在此借鉴,学习 1.HelloWorld项目的目录结构 1.1.src文件夹 1.2.gen文件夹 1.3.Android 2.1文件夹 1.4.ass ...
- Android项目目录结构分析
此文章来自"博客园"博主,仅在此借鉴,学习 1.HelloWorld项目的目录结构 1.1.src文件夹 1.2.gen文件夹 1.3.Android 2.1文件夹 1.4.ass ...
最新文章
- 【特征工程】特征分箱
- 【pmcaff】看看人家的办公室 天天加班都愿意
- 四大开源无人机项目,极客要Get了
- html怎么做出相框的效果,PS滤镜制作漂亮的实木相框效果
- IntelliJ IDEA添加jar包
- python操作excel模板_Python Excel模板读写,维护公式和格式
- matplotlib color 参数
- 把网页放到云服务器上,怎么把网页放到云服务器上
- matlab repmat_利用MATLAB实现KNN
- Petal Search is currently only available
- myeclipse jsp和java字体设置
- 地球会随着人口增加而变重吗
- 从Word Embedding到Bert模型——自然语言处理预训练技术发展史
- 如何通过pk8和pem生成jks
- 信息系统项目管理师---第八章 项目质量管理
- 栈和队列的顺序和链式存储结构
- 戴尔微型计算机怎么换硬盘,教你如何给DELL台式电脑换硬盘
- 博通Brocade漏洞影响多家大厂的存储解决方案
- 清北毕业生5年来去向大数据:北大偏爱银行,清华更倾向国网,华为堪称最大黑洞-1
- ScrollView和HorizontalScrollView滚动条的简单使用
热门文章
- 信息安全学习(不断更新),希望可以坚持下去。
- java获取项目在磁盘路径
- ZYNQ之FPGA学习----Verilog HDL语法(2)
- 获取当前scn号scn1_Oracle 系统改变号SCN详解
- 改变CLM陆面模式结果文件的输出变量、特征值及频率
- 运用Ramdisk创建内存虚拟硬盘
- ppp = 2.4.4 is needed by pptpd-1.3.4-2.rhel5.x86_64的解决办法及原因
- Android开发之评论回复功能
- 手机便签上怎么设置保险到期续保提醒呢?
- 追逐自己的梦想----------辅助制作第二课:人物气功加点分析