Web APP到Android 原生APP
前言:
环境:OS:Windows 11
前端框架:Sveltekit
需求/准备:
- 一个可正常构建的项目(即可正常通过执行
npm run build
构建并打包成一个build
或dist
的输出目录) nodejs
android studio
android sdk
vscode 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.ts
web项目目录配置
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进行测试或使用