mac下vue使用capacitor打包成apk发布

创建于 2026-10-14 最后更新于 2026-10-14 查看修改历史

笔记修改历史 ×
日期备注

前言

目前无损打包web为apk最佳的工具是Capacitor,这个项目开源,由Ionic团队开发和维护,这样运行在移动端时的网页文件是在本机的,不需要加个浏览器通信。直接和api互联,支持安卓和苹果移动端。编译后的默认图标也是Ionic的图标。
不过这个工具依赖太多的环境,对版本极其敏感,所以安装环境的时候得注意多验证,否则失败了又要删除缓存,Windows下需要安装谷歌的各种安卓套件,尽量保持最新的版本安装。有的需要挂代理,能在谷歌官网下载安装更稳。

编译环境准备

名称 版本 备注
java 21.0.12.1 最好直接用最新版本,其次考虑java17
node v20.20.2
npm 10.8.2

Gradle配置

名称 版本 备注
Gradle Wrapper 8.10.2 这个版本可以解决bcprov冲突问题
Android Gradle Plugin (AGP) 8.2.1
Google Services 4.4.0
compileSdkVersion 34
minSdkVersion 22
targetSdkVersion 34

编译

编译
adb连接的设备安装

./gradlew assembleDebug --no-daemon
adb install android/app/build/outputs/apk/debug/app-debug.apk

编译加--no-daemon参数是为了不让它用Gradle的守护进程,失败后自动释放文件,防止缓存删不掉的问题。

故障排除

编译错误提示:Failed to create Jar file bcprov-jdk18on-1.79.jar

错误提示为

java.util.concurrent.ExecutionException: org.gradle.api.GradleException: 
Failed to create Jar file .../bcprov-jdk18on-1.79.jar

这个是bcprov-jdk18on-1.79的class文件用的Java 21编译,Gradle 8.2.1内置的ASM字节码库读不了导致编译不通过。
所以包文件是没有损坏的。属于版本兼容性问题,升级Gradle到支持Java 21字节码的版本即可解决。

指定新的Gradle发行包

sed -i '' \
  's/gradle-8\.2\.1-all\.zip/gradle-8.10.2-all.zip/' \
  gradle/wrapper/gradle-wrapper.properties

验证修改结果

grep distributionUrl gradle/wrapper/gradle-wrapper.properties

重新构建apk

./gradlew --stop
./gradlew --version
./gradlew assembleDebug

Kotlin stdlib 重复类冲突

报错提示

Duplicate class kotlin.time.jdk8.DurationConversionsJDK8Kt found in modules 
kotlin-stdlib-1.8.22.jar and kotlin-stdlib-jdk8-1.6.21.jar

从 Kotlin 1.8 开始,kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8 的内容已合并进 kotlin-stdlib。但项目中的旧依赖(1.6.21)还单独引用了 kotlin-stdlib-jdk8,导致同一个类在两个 jar 里各有一份导致冲突。

修改build.gradle的allprojects中的配置,排除旧模块:

allprojects {
    configurations.configureEach {
        exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk7'
        exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'
    }
}
修改历史 ×
日期备注
0%