Web APP到Android 原生APP
前言:
环境:OS:Windows 11
前端框架:Sveltekit
需求/准备:
- 一个可正常构建的项目(即可正常通过执行
npm run build构建并打包成一个build或dist的输出目录) nodejsandroid studioandroid sdkvscode ide(可选)
安装android studio并安装android sdk
下载android studio
安装并启动android studio
打开SDK manager
选择一个安卓版本的sdk,这里我选择Android 14
其他安装(可选)
点击”Apply”确认安装
因网络问题无法正常下载sdk等解决方案
在项目中安装capacitor
| 官方文档:[Capacitor Android Documentation | Capacitor Documentation (capacitorjs.com)](https://capacitorjs.com/docs/android) |
在项目目录下执行npm install安装项目依赖(如果已安装可忽略)
执行npm i @capacitor/core安装capacitor核心包
执行npm i -D @capacitor/cli安装capacitor command line interface (命令行接口)包
1
| npm i -D @capacitor/cli
|
执行npx cap init初始化capacitor配置,依次输入app名和项目ID,回车确认
执行npm install @capacitor/android安装@capacitor/android包
1
| npm install @capacitor/android
|
执行npx cap add android创建安卓项目,成功创建后将生成android项目目录
构建项目并同步到安卓项目中
修改svelte.config.js配置文件,禁用预压缩,目的是在vite build过程中不要生成.gz和.br压缩文件,避免在后续安卓构建过程中出现”Duplicate resources”的问题(因文件重名导致)
官方文档相关说明:Static site generation • Docs • SvelteKit
precompress
If true, precompresses files with brotli and gzip. This will generate .br and .gz files.
// svelte.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| import adapter from '@sveltejs/adapter-static';
import preprocess from 'svelte-preprocess';
/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://github.com/sveltejs/svelte-preprocess
// for more information about preprocessors
preprocess: preprocess(),
onwarn: (warning, handler) => {
if (warning.code.startsWith('a11y-')) {
return;
}
handler(warning);
},
kit: {
adapter: adapter({
// default options are shown. On some platforms
// these options are set automatically — see below
pages: 'build',
assets: 'build',
fallback: 'index.html',
precompress: false, // 禁用预压缩
strict: true,
}),
}
};
export default config;
|
执行npm run build构建web项目
修改capacitor.config.tsweb项目目录配置
1
2
3
4
5
6
7
8
9
| import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.zpekii.app',
appName: 'myapp',
webDir: 'build'// 默认为"dist",因为sveltekit构建后生成的是"build"目录,所以我需要做相应更改以正确执行后续的拷贝操作
};
export default config;
|
执行npx cap sync同步到安卓项目中,此步骤将会把构建好的web项目拷贝到安卓项目指定目录下
执行成功后可见目录”/android/app/src/main/assetss/public/“下拷贝过来的web项目
在Android Studio中执行安卓apk打包
回到Android studio,打开安卓项目,打开项目文件后会自动执行build操作
可点击下方”Build”查看build情况,若在build过程中遇到网络问题,可参照上面提供的方案尝试解决
打包成发布版本apk
Apk生成位置: /android/app/build/outputs/apk/release/*.apk
生成的发布Apk是未签名的,不可直接安装,需要进行签名
| **官方文档(需科学上网):[Sign your app | Android Studio | Android Developers](https://developer.android.com/studio/publish/app-signing#sign-apk)** |
最后,即可使用真机或安卓模拟器安装已签名的apk进行测试或使用