当前位置: 首页 > news >正文

Cordova打包apk

Cordova 是一个开源的移动开发框架,允许开发者使用 HTML、CSS 和 JavaScript 等 Web 技术来构建移动应用。

Cordova 将 Web 应用封装在一个本地容器中,从而能够访问设备的原生功能,如摄像头、GPS、通讯录等。这使得 Web 应用能够获得与原生应用相似的体验。

一、Cordova 的优势

  1. 跨平台性:一次编写,多平台发布。无论是 iOS、Android 还是 Windows Phone,Cordova 都能让你的应用轻松适配。

    例如,一个使用 Cordova 开发的购物应用,可以同时在苹果 App Store 和安卓的应用商店上架,大大节省了开发时间和成本。

  2. 利用现有技能:对于熟悉 Web 开发的团队或个人来说,无需学习新的编程语言,即可快速上手。

    许多前端开发者能够迅速将他们的网页开发技能应用到移动应用开发中,提高了开发效率。

  3. 活跃的社区和丰富的插件:Cordova 拥有一个庞大且活跃的社区,提供了各种各样的插件来扩展应用的功能。

    比如,有用于实现推送通知、支付功能、社交媒体集成等的插件,满足了各种应用的需求。

二、环境配置

1. 安装 Node.js 环境

安装 Node.jsnpm,不同版本cordova所需的Node.js版本不同,可详见:附件1:Cordova所需Node.js版本。小编使用的版本如下:

$ node -v
v20.9.0$ npm -v
10.1.0

2. 安装 Java环境

安装 Java ,并配置它的bin目录到PATH环境变量。不同版本cordova支持的Java版本不同,可详见:附件2:Cordova所需Java版本。小编使用的版本如下:

$ java -version
openjdk version "1.8.0_392"
OpenJDK Runtime Environment Corretto-8.392.08.1 (build 1.8.0_392-b08)
OpenJDK 64-Bit Server VM Corretto-8.392.08.1 (build 25.392-b08, mixed mode)

3. 安装 Gradle环境

安装 Gradle,并配置它的bin目录到PATH环境变量。这里的版本无所谓,任意版本均可,小编使用的版本如下:

$ gradle --version------------------------------------------------------------
Gradle 8.4
------------------------------------------------------------Build time:   2023-10-04 20:52:13 UTC
Revision:     d1d011e572c9b43aedaee503a0dfdfe925ecdc3fKotlin:       1.9.10
Groovy:       3.0.17
Ant:          Apache Ant(TM) version 1.10.13 compiled on January 4 2023
JVM:          1.8.0_392 (Amazon.com Inc. 25.392-b08)
OS:           Windows 10 10.0 amd64

4. 安装Android环境

安装 Android Studio,并下载 Android SDK,然后配置 ANDROID_HOME 环境变量

5. 安装 Cordova

安装 Cordova,不同版本cordova所需的 Node.jsJava 版本不同,请根据:附件1:Cordova所需Node.js版本 和 附件2:Cordova所需Java版本 选择合适的 cordova 版本

$ npm install -g cordova@10.0.0

提示:安装其他版本,命令格式为npm install -g cordova@{version}

三、使用方式

1. 创建 Cordova 项目

打开命令行,输入以下命令创建一个新的 Cordova 项目:

$ cordova create myApp com.example.myApp MyApp
$ cd myApp

这里,myApp 是项目名称,com.example.myApp 是应用的包名,MyApp 是应用的显示名称。

2. 添加平台支持

Cordova 支持多种移动平台,如 iOS、Android、Electron等。具体支持的平台可通过cordova platform list命令查询

$ cordova platform list
Installed platforms:android 9.1.0browser 6.0.0
Available platforms:electron ^1.1.1windows ^7.0.0

扩展:不同平台支持,详见:Platform Support - Apache Cordova

假设我们要添加 Android 平台支持,可使用如下命令:

$ cordova platform add android

提示:若要移除指定平台,可使用如下命令。

$ cordova platform remove <platform>
$ cordova platform rm <platform>

更多相关命令详见Version Management - Apache Cordova

4. 开发应用

www 目录下,你可以找到 Cordova 应用的主要代码结构。其中,index.html 是应用的入口页面,你可以在此使用 HTML、CSS 和 JavaScript 来构建你的应用界面和逻辑。

当然,我们更推荐你通过vue、angular、react等web框架开发应用后,将打包好的构件复制到www目录下

在本示例中,我们仅演示打包功能,Cordova 默认生成的应用已足够我们使用。

5. 调用设备功能

Cordova 的魅力之一在于能够调用设备的原生功能。例如,要使用摄像头拍照,可以安装相应的插件:

$ cordova plugin add cordova-plugin-camera

然后在 JavaScript 中调用相关的 API 来实现拍照功能。

在本示例中,我们并未使用到该功能,感兴趣的观众老爷们可自行体验。

6. 构建与运行

在完成开发后,我们可以构建应用并在相应的平台上运行。

在打包之前需要注意以下几点:

  • 如果之前没有使用过Java编程语言,则需要安装JDK,并且版本与cordova对应。版本可详见:附件2:Cordova所需Java版本。
  • 如果之前没有使用过Gradle,则需要安装Gradle,并配置它的bin目录到PATH环境变量。
  • 如果之前没有开发过Android项目,则需要安装Android Studio,并下载Android SDK,然后配置ANDROID_HOME环境变量。

若不确定,我们可以通过cordova requirements命令查看依赖是否满足

$ cordova requirementsRequirements check results for android:
Java JDK: installed 1.8.0
Android SDK: installed true
Android target: installed android-34,android-32,android-31,android-30,android-29,android-28,android-27
Gradle: installed D:\app\gradle\gradle-8.4\bin\gradle.BAT

依赖满足后,便可以构建应用和运行了,对于 Android 平台可使用如下命令。构建中你可能遇到各种,可参考:常见问题

cordova build android

如果过程顺利,那么会在app/build/outputs目录下生成apk文件,将其发送到手机,安装运行吧!

若你想在模拟器上运行,可使用如下命令

cordova run android

7. 调试与优化

在开发过程中,我们可以使用浏览器来调试网页部分的代码。对于设备上的调试,可以借助 Android Studio 等工具来查看日志和进行性能分析。

四、常见问题

问题一:Gradle下载慢

原因:Cordova默认并不会使用你本地的Gradle,而是通过Gradle Wrapper下载指定版本的Gradle,由于gradle服务器位于美国,国内访问下载速度极慢

解决方式:找到platforms/android/cordova/lib/builders/ProjectBuilder.js文件,该文件为cordova的项目构建器,gradle的配置也在其中。编辑该文件,更换Gradle国内镜像源,你可以使用你喜欢的镜像源,示例中我们使用腾讯镜像源,将https://services.gradle.org/distributions替换为https://mirrors.cloud.tencent.com/gradle

    prepEnv (opts) {var self = this;return check_reqs.check_gradle()....then(() => {const gradleWrapperPropertiesPath = path.join(self.root, 'gradle/wrapper/gradle-wrapper.properties');const gradleWrapperProperties = createEditor(gradleWrapperPropertiesPath);// 更改点// const distributionUrl = process.env.CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL || 'https://services.gradle.org/distributions/gradle-6.5-all.zip';const distributionUrl = process.env.CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL || 'https://mirrors.cloud.tencent.com/gradle/gradle-6.5-all.zip';gradleWrapperProperties.set('distributionUrl', distributionUrl);gradleWrapperProperties.save();events.emit('verbose', `Gradle Distribution URL: ${distributionUrl}`);})...}

问题二:Jar包下载慢

原因:gradle默认从以下两个仓库下载Jar包,这两个仓库服务器均位于美国,国内访问下载速度极慢

ext.repos = {google()jcenter()
}

解决方式:更换Gradle国内镜像仓库,你可以使用你喜欢的镜像仓库,推荐使用阿里镜像仓库。

修改以下3个文件,将对应阿里云镜像仓库添加到google()jcenter()上方,这样便可以优先从国内源下载,如果没有再去原网站下。

  • platforms/android/repositories.gradle

    ext.repos = {maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/central' }maven { url 'https://maven.aliyun.com/repository/jcenter' }google()jcenter()
    }
    
  • platforms/android/CordovaLib/cordova.gradle

    buildscript {repositories {maven { url 'https://maven.aliyun.com/repository/jcenter' }jcenter()}...
    }
    
  • platforms/android/CordovaLib/repositories.gradle

    ext.repos = {maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/central' }maven { url 'https://maven.aliyun.com/repository/jcenter' }google()jcenter()
    }
    

问题三:无法找到versioncompare:1.3.4

Could not find com.g00fy2:versioncompare:1.3.4.

原因:我们查询了maven仓库,发现com.g00fy2:versioncompare:1.3.4的确不存在,具体原因未知
在这里插入图片描述
解决方式:编辑platforms/android/CordovaLib/cordova.gradle文件,升级com.g00fy2:versioncompare版本至存在的版本,一般大版本均会向下兼容小版本,示例中我们升级1.3.4版本至1.3.7版本,实测可用。

buildscript {...dependencies {classpath 'com.g00fy2:versioncompare:1.3.7@jar'}
}

问题四:无法找到gradle-bintray-plugin:1.7.3

Could not find com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3.

原因:和问题二:Jar包下载慢,原因类似,由于网络原因,镜像仓库无法连接

解决方式:编辑platforms/android/CordovaLib/repositories.gradle文件,更换Gradle国内镜像仓库,你可以使用你喜欢的镜像仓库,推荐使用阿里镜像仓库。将对应阿里云镜像仓库添加到google()jcenter()上方,这样便可以优先从国内源下载,如果没有再去原网站下。

ext.repos = {maven { url 'https://maven.aliyun.com/repository/google' }maven { url 'https://maven.aliyun.com/repository/central' }maven { url 'https://maven.aliyun.com/repository/jcenter' }google()jcenter()
}

问题五:无法加载repositories.cfg

File C:\Users\a\.android\repositories.cfg could not be loaded.

原因:按提示进入C:\Users\a\.android\目录下,并未发现repositories.cfg文件。该文件的具体作用及缺失原因小编并未查明。但在网上找到了解决方式。

解决方式:提示缺少repositories.cfg文件,那就简单粗暴的创建一个空的repositories.cfg文件,实测发现,内容为空并未对后续打包造成任何影响。

touch /Users/a/.android/repositories.cfg

注意:请将示例中的a替换为您自己的用户名。

问题六:缺失dx.bat

Build-tool 34.0.0 is missing DX at C:\Users\a\AppData\Local\Android\Sdk\build-tools\34.0.0\dx.bat

原因:按提示进入C:\Users\a\AppData\Local\Android\Sdk\build-tools\34.0.0\目录下,并未发现dx.bat文件。小编查询了部分低与31.0.0版本的Android Sdk,发现dx.bat文件是存在的。疑似是高版本的Android SDK弃用了dx.bat文件。

解决方式:

进入提示中的目录C:\Users\a\AppData\Local\Android\Sdk\build-tools\34.0.0,复制对应路径下的d8.bat,并改名为dx.bat

C:\Users\a\AppData\Local\Android\Sdk\build-tools\34.0.0\d8.bat  => C:\Users\a\AppData\Local\Android\Sdk\build-tools\34.0.0\dx.bat

进入提示目录的lib子目录下C:\Users\a\AppData\Local\Android\Sdk\build-tools\34.0.0\lib\,复制对应路径下的d8.jar,并改名为dx.jar。(PS: 小编通过阅读dx.bat的内容发现,其默认会加载d8.jar,若你不对dx.bat进行更改,感觉这一步似乎是多余的)。

C:\Users\a\AppData\Local\Android\Sdk\build-tools\34.0.0\lib\d8.jar => C:\Users\a\AppData\Local\Android\Sdk\build-tools\34.0.0\lib\dx.jar

注意:请将示例中的a替换为您自己的用户名。

问题七:使用vue构建包打包后白屏

原因:并未查明,疑似是资源相对地址的问题。

解决方式:编辑vue项目的vite.config.ts文件,修改资源相对地址,配置如下:

export default defineConfig({base: './',...
})

提示:打包后白屏的原因很多,可能你的原因和小编并不相同,更多原因可参考:Vite - 项目打包从 0 到 1(完美解决打包后访问白屏问题)_vite打包命令

五、小结

每当我们进入一个新领域的时候,总会遇到各种各样的问题,冷静下来,仔细分析,总能找到解决方式的,加油!

附件

附件1:Cordova所需Node.js版本

Cordova CLI 版本Node.js 支持版本
12.x>=16.13.0
11.x>=12.0.0
10.x>=10.0.0
9.x>=6.0.0

更多信息,详见:Installation - Apache Cordova

附件2:Cordova所需Java版本

  • 2021年12月,cordova-android Version已更新到10.X.X版本,并且10.X.X以后版本可支持JDK11,此前版本根据Equivalent Android Version安装对应支持JDK版本,建议用JDK8

  • 2023年8月更新到cordova-android version 12,建议JDK11(官方建议)或JDK17

参考文档

Apache Cordova

Android Platform Guide - Apache Cordova

cordova与android的版本对应和安装_cordova版本

vue.js - Vue项目整合Cordova一键打包apk

2022年最优解决方案Installed Build Tools revision 31.0.0 is corrupted_build-tools31

Vite - 项目打包从 0 到 1(完美解决打包后访问白屏问题)_vite打包命令-CSDN博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 虚拟网络设备和端口概念:Bridge(桥)和Tap
  • Windows系统命令
  • 【Rust光年纪】超越并发:Rust数据流处理库全面解读
  • Unity动画模块 之 3D模型导入基础设置Animation页签
  • Java填充PDF并返回填充后PDF文件及对应base64码
  • Leetcode JAVA刷刷站(38)外观数列
  • 大白话解释TCP的三次握手和四次挥手
  • 视频号AI美女跳舞,轻松月入30000+,蓝海赛道,流量池巨大,起号猛
  • 【编程知识】如何有趣的理解变量的数据类型和数值
  • 东南大学:Wi-Fi 6搭档全光以太,打造“数智东南”信息高速路
  • 【ARM 芯片 安全与攻击 5.2.1 -- 侧信道与隐蔽信道的区别】
  • 代码随想录算法训练营第二十天(二叉树 七)
  • C语言之“ 数组 ”
  • MySQL存储过程深入指南
  • 三千元左右的卧室投影仪怎么选?当贝D6X Pro代替电视的最佳选择
  • 《深入 React 技术栈》
  • CAP 一致性协议及应用解析
  • CentOS 7 防火墙操作
  • JSDuck 与 AngularJS 融合技巧
  • MaxCompute访问TableStore(OTS) 数据
  • mysql外键的使用
  • Python利用正则抓取网页内容保存到本地
  • SQLServer之创建数据库快照
  • Transformer-XL: Unleashing the Potential of Attention Models
  • zookeeper系列(七)实战分布式命名服务
  • 给github项目添加CI badge
  • 机器学习学习笔记一
  • 警报:线上事故之CountDownLatch的威力
  • 力扣(LeetCode)965
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 手写一个CommonJS打包工具(一)
  • 微信小程序--------语音识别(前端自己也能玩)
  • 我从编程教室毕业
  • 【云吞铺子】性能抖动剖析(二)
  • 数据库巡检项
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​水经微图Web1.5.0版即将上线
  • # SpringBoot 如何让指定的Bean先加载
  • $L^p$ 调和函数恒为零
  • (9)STL算法之逆转旋转
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)fread与fwrite详解
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (HAL库版)freeRTOS移植STMF103
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (六)软件测试分工
  • (十六)一篇文章学会Java的常用API
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • **PHP二维数组遍历时同时赋值
  • .NET MVC之AOP
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET/C# 使窗口永不获得焦点
  • .Net程序帮助文档制作