mac下vue使用capacitor打包成apk发布
笔记修改历史
×
| 日期 | 备注 |
|---|
前言
目前无损打包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'
}
}