简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

站内搜索

搜索

活动公告

11-02 12:46
10-23 09:32
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,将及时处理!
10-23 09:31
10-23 09:28
通知:签到时间调整为每日4:00(东八区)
10-23 09:26

VS Code移动端开发全攻略从环境搭建到应用上线详解跨平台开发技巧调试方法与性能优化提升开发效率与应用质量

3万

主题

349

科技点

3万

积分

大区版主

木柜子打湿

积分
31898

三倍冰淇淋无人之境【一阶】财Doro小樱(小丑装)立华奏以外的星空【二阶】⑨的冰沙

发表于 2025-9-10 12:30:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

Visual Studio Code(简称VS Code)作为一款轻量级但功能强大的代码编辑器,已经成为了许多开发者的首选工具。它不仅支持Web开发,通过丰富的扩展生态系统,还可以成为移动端开发的强大平台。本文将详细介绍如何利用VS Code进行移动端开发,从环境搭建到应用上线的全过程,并深入探讨跨平台开发技巧、调试方法与性能优化策略,帮助开发者提升开发效率与应用质量。

环境搭建

安装VS Code及必要扩展

首先,我们需要安装VS Code。可以从官方网站下载并安装适合你操作系统的版本。

安装完成后,我们需要安装一些必要的扩展来支持移动端开发:

1. React Native Tools:用于React Native开发,提供调试、代码导航等功能。
2. Flutter:用于Flutter开发,提供代码补全、调试等功能。
3. Ionic:用于Ionic框架开发,提供预览、调试等功能。
4. Cordova Tools:用于Apache Cordova开发,支持调试和模拟器管理。
5. ESLint:用于代码质量检查。
6. Prettier - Code formatter:用于代码格式化。

安装扩展的方法很简单:

1. 点击VS Code左侧活动栏的扩展图标(或按Ctrl+Shift+X)
2. 在搜索框中输入扩展名称
3. 点击”安装”按钮

配置开发环境

对于React Native开发,我们需要安装Node.js、React Native CLI和Watchman。
  1. # 安装Node.js(建议使用LTS版本)
  2. # 从https://nodejs.org/下载并安装
  3. # 安装React Native CLI
  4. npm install -g react-native-cli
  5. # macOS上安装Watchman
  6. brew install watchman
  7. # Windows上安装Chocolatey(如果尚未安装)
  8. # 然后通过Chocolatey安装Watchman
  9. choco install watchman
复制代码

对于Flutter开发,我们需要安装Flutter SDK。
  1. # macOS
  2. cd ~/development
  3. unzip ~/Downloads/flutter_macos_v1.0.0-stable.zip
  4. export PATH="$PATH:`pwd`/flutter/bin"
  5. # Windows
  6. # 从https://flutter.dev/docs/get-started/install/windows下载Flutter SDK
  7. # 解压到目标目录(例如C:\src\flutter)
  8. # 将Flutter的bin目录添加到系统PATH环境变量中
  9. # Linux
  10. cd ~/development
  11. tar xf ~/Downloads/flutter_linux_v1.0.0-stable.tar.xz
  12. export PATH="$PATH:`pwd`/flutter/bin"
复制代码

对于Ionic开发,我们需要安装Node.js、Ionic CLI和Cordova。
  1. # 安装Ionic CLI和Cordova
  2. npm install -g @ionic/cli cordova
复制代码

设置模拟器和真机调试

1. 安装Android Studio
2. 在Android Studio中,打开”Configure” > “AVD Manager”
3. 创建一个新的虚拟设备
4. 启动模拟器

在VS Code中,可以通过以下方式连接到Android模拟器:
  1. // .vscode/launch.json
  2. {
  3.   "version": "0.2.0",
  4.   "configurations": [
  5.     {
  6.       "name": "Debug Android",
  7.       "program": "${workspaceFolder}/.vscode/launchReactNative.js",
  8.       "type": "reactnative",
  9.       "request": "launch",
  10.       "platform": "android",
  11.       "sourceMaps": true,
  12.       "outDir": "${workspaceFolder}/.vscode/.react"
  13.     }
  14.   ]
  15. }
复制代码

1. 安装Xcode
2. 打开Xcode,创建一个新项目或打开现有项目
3. 选择模拟器并运行

在VS Code中,可以通过以下方式连接到iOS模拟器:
  1. // .vscode/launch.json
  2. {
  3.   "version": "0.2.0",
  4.   "configurations": [
  5.     {
  6.       "name": "Debug iOS",
  7.       "program": "${workspaceFolder}/.vscode/launchReactNative.js",
  8.       "type": "reactnative",
  9.       "request": "launch",
  10.       "platform": "ios",
  11.       "sourceMaps": true,
  12.       "outDir": "${workspaceFolder}/.vscode/.react"
  13.     }
  14.   ]
  15. }
复制代码

对于Android真机调试:

1. 在手机上启用”开发者选项”和”USB调试”
2. 使用USB线连接手机和电脑
3. 在终端中运行adb devices确认设备已连接

对于iOS真机调试:

1. 使用USB线连接iPhone和Mac
2. 在Xcode中,选择你的iPhone作为目标设备
3. 在VS Code中配置调试选项

跨平台开发框架介绍

React Native

React Native是Facebook开发的一个框架,允许开发者使用JavaScript和React来构建原生移动应用。它使用原生组件而非WebView,提供了接近原生的性能。
  1. npx react-native init MyProject
  2. cd MyProject
复制代码
  1. import React from 'react';
  2. import { View, Text, StyleSheet, Button, Alert } from 'react-native';
  3. const App = () => {
  4.   const handlePress = () => {
  5.     Alert.alert('Button Pressed', 'You pressed the button!');
  6.   };
  7.   return (
  8.     <View style={styles.container}>
  9.       <Text style={styles.title}>Hello, React Native!</Text>
  10.       <Button
  11.         title="Press Me"
  12.         onPress={handlePress}
  13.       />
  14.     </View>
  15.   );
  16. };
  17. const styles = StyleSheet.create({
  18.   container: {
  19.     flex: 1,
  20.     justifyContent: 'center',
  21.     alignItems: 'center',
  22.     backgroundColor: '#F5FCFF',
  23.   },
  24.   title: {
  25.     fontSize: 20,
  26.     textAlign: 'center',
  27.     margin: 10,
  28.   },
  29. });
  30. export default App;
复制代码

Flutter

Flutter是Google开发的UI工具包,用于构建美观、快速的原生编译应用程序,支持移动、Web和桌面平台。
  1. flutter create my_project
  2. cd my_project
复制代码
  1. import 'package:flutter/material.dart';
  2. void main() => runApp(MyApp());
  3. class MyApp extends StatelessWidget {
  4.   @override
  5.   Widget build(BuildContext context) {
  6.     return MaterialApp(
  7.       title: 'Flutter Demo',
  8.       theme: ThemeData(
  9.         primarySwatch: Colors.blue,
  10.       ),
  11.       home: MyHomePage(),
  12.     );
  13.   }
  14. }
  15. class MyHomePage extends StatelessWidget {
  16.   @override
  17.   Widget build(BuildContext context) {
  18.     return Scaffold(
  19.       appBar: AppBar(
  20.         title: Text('Flutter Demo Home Page'),
  21.       ),
  22.       body: Center(
  23.         child: Column(
  24.           mainAxisAlignment: MainAxisAlignment.center,
  25.           children: <Widget>[
  26.             Text(
  27.               'Hello, Flutter!',
  28.             ),
  29.             ElevatedButton(
  30.               onPressed: () {
  31.                 ScaffoldMessenger.of(context).showSnackBar(
  32.                   SnackBar(content: Text('Button Pressed!')),
  33.                 );
  34.               },
  35.               child: Text('Press Me'),
  36.             ),
  37.           ],
  38.         ),
  39.       ),
  40.     );
  41.   }
  42. }
复制代码

Ionic

Ionic是一个开源的移动UI工具包,用于构建高性能、高质量的移动和桌面应用,使用Web技术(HTML、CSS和JavaScript)。
  1. ionic start myApp tabs
  2. cd myApp
复制代码
  1. <ion-header>
  2.   <ion-toolbar>
  3.     <ion-title>
  4.       Ionic Demo
  5.     </ion-title>
  6.   </ion-toolbar>
  7. </ion-header>
  8. <ion-content>
  9.   <div class="ion-padding">
  10.     <h1>Hello, Ionic!</h1>
  11.     <ion-button expand="block" (click)="showAlert()">Press Me</ion-button>
  12.   </div>
  13. </ion-content>
复制代码
  1. import { Component } from '@angular/core';
  2. import { AlertController } from '@ionic/angular';
  3. @Component({
  4.   selector: 'app-home',
  5.   templateUrl: 'home.page.html',
  6.   styleUrls: ['home.page.scss'],
  7. })
  8. export class HomePage {
  9.   constructor(private alertController: AlertController) {}
  10.   async showAlert() {
  11.     const alert = await this.alertController.create({
  12.       header: 'Button Pressed',
  13.       message: 'You pressed the button!',
  14.       buttons: ['OK']
  15.     });
  16.     await alert.present();
  17.   }
  18. }
复制代码

其他框架简介

除了上述三个主流框架外,还有一些其他跨平台开发框架:

1. Xamarin:微软开发的框架,使用C#和.NET构建原生应用。
2. Unity:主要用于游戏开发,但也可以构建非游戏应用。
3. NativeScript:允许使用JavaScript、TypeScript或Angular构建原生应用。
4. Quasar Framework:基于Vue.js的框架,可以构建SPA、PWA、移动应用和桌面应用。

VS Code中的跨平台开发技巧

代码片段和智能提示

VS Code提供了强大的代码片段和智能提示功能,可以大大提高开发效率。

1. 打开命令面板(Ctrl+Shift+P或Cmd+Shift+P)
2. 输入”Preferences: Configure User Snippets”
3. 选择对应的语言(如JavaScript、TypeScript等)

以下是一个React Native组件的代码片段示例:
  1. {
  2.   "React Native Functional Component": {
  3.     "prefix": "rnfc",
  4.     "body": [
  5.       "import React from 'react';",
  6.       "import { View, Text, StyleSheet } from 'react-native';",
  7.       "",
  8.       "const $1 = () => {",
  9.       "  return (",
  10.       "    <View style={styles.container}>",
  11.       "      <Text>$2</Text>",
  12.       "    </View>",
  13.       "  );",
  14.       "};",
  15.       "",
  16.       "const styles = StyleSheet.create({",
  17.       "  container: {",
  18.       "    flex: 1,",
  19.       "    justifyContent: 'center',",
  20.       "    alignItems: 'center',",
  21.       "  },",
  22.       "});",
  23.       "",
  24.       "export default $1;"
  25.     ],
  26.     "description": "Create a React Native functional component"
  27.   }
  28. }
复制代码

在VS Code中,可以通过以下方式增强智能提示:

1. 安装相应的扩展(如React Native、Flutter等)
2. 在项目根目录创建jsconfig.json(JavaScript项目)或tsconfig.json(TypeScript项目)
  1. // jsconfig.json
  2. {
  3.   "compilerOptions": {
  4.     "target": "es6",
  5.     "module": "commonjs",
  6.     "allowSyntheticDefaultImports": true,
  7.     "baseUrl": ".",
  8.     "paths": {
  9.       "*": ["*"]
  10.     }
  11.   },
  12.   "exclude": [
  13.     "node_modules",
  14.     "build"
  15.   ]
  16. }
复制代码

调试配置

VS Code提供了强大的调试功能,可以通过配置launch.json文件来设置调试选项。
  1. {
  2.   "version": "0.2.0",
  3.   "configurations": [
  4.     {
  5.       "name": "Debug Android",
  6.       "program": "${workspaceFolder}/.vscode/launchReactNative.js",
  7.       "type": "reactnative",
  8.       "request": "launch",
  9.       "platform": "android",
  10.       "sourceMaps": true,
  11.       "outDir": "${workspaceFolder}/.vscode/.react"
  12.     },
  13.     {
  14.       "name": "Debug iOS",
  15.       "program": "${workspaceFolder}/.vscode/launchReactNative.js",
  16.       "type": "reactnative",
  17.       "request": "launch",
  18.       "platform": "ios",
  19.       "sourceMaps": true,
  20.       "outDir": "${workspaceFolder}/.vscode/.react"
  21.     },
  22.     {
  23.       "name": "Attach to packager",
  24.       "program": "${workspaceFolder}/.vscode/launchReactNative.js",
  25.       "type": "reactnative",
  26.       "request": "attach",
  27.       "sourceMaps": true,
  28.       "outDir": "${workspaceFolder}/.vscode/.react"
  29.     }
  30.   ]
  31. }
复制代码
  1. {
  2.   "version": "0.2.0",
  3.   "configurations": [
  4.     {
  5.       "name": "flutter",
  6.       "request": "launch",
  7.       "type": "dart"
  8.     },
  9.     {
  10.       "name": "flutter (profile mode)",
  11.       "request": "launch",
  12.       "type": "dart",
  13.       "flutterMode": "profile"
  14.     },
  15.     {
  16.       "name": "flutter (release mode)",
  17.       "request": "launch",
  18.       "type": "dart",
  19.       "flutterMode": "release"
  20.     }
  21.   ]
  22. }
复制代码

版本控制集成

VS Code内置了Git支持,可以方便地进行版本控制操作。

1. 初始化仓库:在命令面板中选择”Git: Initialize Repository”
2. 提交更改:在源代码管理视图中查看更改暂存更改(点击文件旁边的+号)输入提交消息点击提交按钮(或按Ctrl+Enter)
3. 在源代码管理视图中查看更改
4. 暂存更改(点击文件旁边的+号)
5. 输入提交消息
6. 点击提交按钮(或按Ctrl+Enter)
7. 分支管理:创建新分支:点击左下角的分支名称,然后选择”Create new branch”切换分支:点击左下角的分支名称,然后选择要切换的分支合并分支:在命令面板中选择”Git: Merge Branch”
8. 创建新分支:点击左下角的分支名称,然后选择”Create new branch”
9. 切换分支:点击左下角的分支名称,然后选择要切换的分支
10. 合并分支:在命令面板中选择”Git: Merge Branch”

• 在源代码管理视图中查看更改
• 暂存更改(点击文件旁边的+号)
• 输入提交消息
• 点击提交按钮(或按Ctrl+Enter)

• 创建新分支:点击左下角的分支名称,然后选择”Create new branch”
• 切换分支:点击左下角的分支名称,然后选择要切换的分支
• 合并分支:在命令面板中选择”Git: Merge Branch”

1. 安装GitHub Pull Requests and Issues扩展
2. 使用GitHub账户登录
3. 克隆GitHub仓库或推送本地仓库到GitHub

插件推荐

除了前面提到的基本扩展外,以下是一些可以提高移动端开发效率的VS Code扩展:

1. Auto Rename Tag:自动重命名配对的HTML/XML标签
2. Bracket Pair Colorizer:用不同颜色标识匹配的括号
3. Path Intellisense:自动补全文件路径
4. npm Intellisense:自动导入npm模块
5. ES7 React/Redux/GraphQL/React-Native snippets:提供React Native代码片段
6. Flutter Snippets:提供Flutter代码片段
7. Ionic Snippets:提供Ionic代码片段
8. Material Icon Theme:为文件和文件夹提供Material Design图标
9. GitLens:增强Git功能,如代码作者信息、提交历史等
10. Live Share:实时协作编码

移动应用调试方法

模拟器调试

在VS Code中调试Android应用:

1. 确保已安装并启动Android模拟器
2. 在VS Code中打开项目
3. 按F5或点击调试按钮
4. 选择”Debug Android”配置(如果已配置)
  1. // 示例:在React Native中添加调试代码
  2. import { LogBox } from 'react-native';
  3. // 忽略特定的警告
  4. LogBox.ignoreLogs(['Warning: ...']);
  5. // 添加自定义日志
  6. console.log('Debug message');
  7. console.warn('Warning message');
  8. console.error('Error message');
复制代码

在VS Code中调试iOS应用:

1. 确保已安装并启动iOS模拟器
2. 在VS Code中打开项目
3. 按F5或点击调试按钮
4. 选择”Debug iOS”配置(如果已配置)
  1. // 示例:在React Native中使用React Developer Tools
  2. import React from 'react';
  3. import { View, Text } from 'react-native';
  4. // 在应用中添加调试组件
  5. const DebugComponent = () => {
  6.   return (
  7.     <View>
  8.       <Text>Debug Information</Text>
  9.       {/* 添加调试信息 */}
  10.     </View>
  11.   );
  12. };
  13. export default DebugComponent;
复制代码

真机调试

1. 在手机上启用”开发者选项”和”USB调试”
2. 使用USB线连接手机和电脑
3. 在终端中运行adb devices确认设备已连接
4. 在VS Code中开始调试
  1. // 示例:在React Native中启用真机调试
  2. import { DevSettings } from 'react-native';
  3. // 启用真机调试
  4. DevSettings.setIsDebuggingRemotely(true);
  5. // 添加调试菜单
  6. const showDebugMenu = () => {
  7.   DevSettings.reload();
  8. };
复制代码

1. 使用USB线连接iPhone和Mac
2. 在Xcode中,选择你的iPhone作为目标设备
3. 在VS Code中配置调试选项
  1. // 示例:在React Native中启用iOS真机调试
  2. import { NativeModules } from 'react-native';
  3. const { DevMenu } = NativeModules;
  4. // 显示开发菜单
  5. DevMenu.show();
复制代码

远程调试

1. 摇动设备或按Ctrl+M(Android)/Cmd+D(iOS)打开开发菜单
2. 选择”Debug JS Remotely”
3. 在浏览器中打开http://localhost:8081/debugger-ui
4. 使用浏览器开发者工具进行调试
  1. // 示例:在React Native中使用Chrome开发者工具
  2. // 在应用中添加调试代码
  3. const fetchData = async () => {
  4.   try {
  5.     console.log('Fetching data...');
  6.     const response = await fetch('https://api.example.com/data');
  7.     const data = await response.json();
  8.     console.log('Data fetched:', data);
  9.     return data;
  10.   } catch (error) {
  11.     console.error('Error fetching data:', error);
  12.     throw error;
  13.   }
  14. };
复制代码

1. 在VS Code中打开Flutter项目
2. 按F5或点击调试按钮
3. 选择设备(真机或模拟器)
4. 使用VS Code的调试工具或Dart DevTools进行调试
  1. // 示例:在Flutter中添加调试代码
  2. import 'dart:developer' as developer;
  3. void fetchData() {
  4.   developer.log('Fetching data...', name: 'my.app.category');
  5.   // 添加调试代码
  6.   try {
  7.     // 模拟数据获取
  8.     final data = {'id': 1, 'name': 'Example'};
  9.     developer.log('Data fetched: $data', name: 'my.app.category');
  10.   } catch (e) {
  11.     developer.log('Error fetching data: $e', name: 'my.app.category', level: 1000);
  12.   }
  13. }
复制代码

常见问题解决方案

1. Metro bundler问题:# 清理缓存
npm start -- --reset-cache
# 或
react-native start --reset-cache
2. Android构建问题:# 清理Android构建
cd android
./gradlew clean
cd ..
# 重新安装依赖
npm install
3. iOS构建问题:# 清理iOS构建
cd ios
xcodebuild clean
cd ..
# 重新安装pods
cd ios
pod install
cd ..

Metro bundler问题:
  1. # 清理缓存
  2. npm start -- --reset-cache
  3. # 或
  4. react-native start --reset-cache
复制代码

Android构建问题:
  1. # 清理Android构建
  2. cd android
  3. ./gradlew clean
  4. cd ..
  5. # 重新安装依赖
  6. npm install
复制代码

iOS构建问题:
  1. # 清理iOS构建
  2. cd ios
  3. xcodebuild clean
  4. cd ..
  5. # 重新安装pods
  6. cd ios
  7. pod install
  8. cd ..
复制代码

1. 依赖问题:# 清理Flutter缓存
flutter clean
# 获取依赖
flutter pub get
2. Android构建问题:# 清理Android构建
cd android
./gradlew clean
cd ..
# 重新构建
flutter build apk
3. iOS构建问题:# 清理iOS构建
cd ios
rm -rf Pods
rm -rf .symlinks
rm -rf Flutter/Flutter.framework
rm -rf Flutter/Flutter.podspec
pod install
cd ..
# 重新构建
flutter build ios

依赖问题:
  1. # 清理Flutter缓存
  2. flutter clean
  3. # 获取依赖
  4. flutter pub get
复制代码

Android构建问题:
  1. # 清理Android构建
  2. cd android
  3. ./gradlew clean
  4. cd ..
  5. # 重新构建
  6. flutter build apk
复制代码

iOS构建问题:
  1. # 清理iOS构建
  2. cd ios
  3. rm -rf Pods
  4. rm -rf .symlinks
  5. rm -rf Flutter/Flutter.framework
  6. rm -rf Flutter/Flutter.podspec
  7. pod install
  8. cd ..
  9. # 重新构建
  10. flutter build ios
复制代码

性能优化策略

代码优化

1. 使用React.memo和useMemo:
  1. import React, { memo, useMemo } from 'react';
  2. // 使用memo避免不必要的重新渲染
  3. const ExpensiveComponent = memo(({ data }) => {
  4.   return (
  5.     <View>
  6.       {data.map(item => (
  7.         <Text key={item.id}>{item.name}</Text>
  8.       ))}
  9.     </View>
  10.   );
  11. });
  12. // 使用useMemo缓存计算结果
  13. const ParentComponent = ({ items }) => {
  14.   const processedData = useMemo(() => {
  15.     return items.map(item => ({
  16.       ...item,
  17.       processedName: item.name.toUpperCase(),
  18.     }));
  19.   }, [items]);
  20.   return <ExpensiveComponent data={processedData} />;
  21. };
复制代码

1. 使用FlatList替代ScrollView:
  1. import React from 'react';
  2. import { FlatList, Text, View } from 'react-native';
  3. const OptimizedList = ({ data }) => {
  4.   const renderItem = ({ item }) => (
  5.     <View style={{ padding: 10, borderBottomWidth: 1 }}>
  6.       <Text>{item.name}</Text>
  7.     </View>
  8.   );
  9.   return (
  10.     <FlatList
  11.       data={data}
  12.       renderItem={renderItem}
  13.       keyExtractor={item => item.id}
  14.       initialNumToRender={10}
  15.       maxToRenderPerBatch={10}
  16.       windowSize={10}
  17.     />
  18.   );
  19. };
复制代码

1. 使用const构造函数:
  1. class OptimizedWidget extends StatelessWidget {
  2.   final String title;
  3.   
  4.   const OptimizedWidget({Key? key, required this.title}) : super(key: key);
  5.   @override
  6.   Widget build(BuildContext context) {
  7.     return Text(title);
  8.   }
  9. }
复制代码

1. 使用ListView.builder替代Column:
  1. class OptimizedList extends StatelessWidget {
  2.   final List<String> items;
  3.   const OptimizedList({Key? key, required this.items}) : super(key: key);
  4.   @override
  5.   Widget build(BuildContext context) {
  6.     return ListView.builder(
  7.       itemCount: items.length,
  8.       itemBuilder: (context, index) {
  9.         return ListTile(
  10.           title: Text(items[index]),
  11.         );
  12.       },
  13.     );
  14.   }
  15. }
复制代码

资源管理

1. 图片优化:
  1. import { Image } from 'react-native';
  2. // 使用适当大小的图片
  3. const OptimizedImage = () => {
  4.   return (
  5.     <Image
  6.       source={require('./assets/image.png')}
  7.       style={{ width: 100, height: 100 }}
  8.       resizeMode="contain"
  9.     />
  10.   );
  11. };
  12. // 使用WebP格式减少图片大小
  13. const WebPImage = () => {
  14.   return (
  15.     <Image
  16.       source={require('./assets/image.webp')}
  17.       style={{ width: 100, height: 100 }}
  18.     />
  19.   );
  20. };
复制代码

1. 字体优化:
  1. import { Text } from 'react-native';
  2. // 使用系统字体
  3. const SystemFontText = () => {
  4.   return <Text style={{ fontFamily: 'System' }}>Hello, World!</Text>;
  5. };
  6. // 使用预加载的自定义字体
  7. import { useFonts } from 'expo-font';
  8. const CustomFontText = () => {
  9.   const [fontsLoaded] = useFonts({
  10.     'CustomFont': require('./assets/fonts/CustomFont.ttf'),
  11.   });
  12.   if (!fontsLoaded) {
  13.     return null;
  14.   }
  15.   return <Text style={{ fontFamily: 'CustomFont' }}>Hello, World!</Text>;
  16. };
复制代码

1. 图片优化:
  1. import 'package:flutter/material.dart';
  2. class OptimizedImage extends StatelessWidget {
  3.   @override
  4.   Widget build(BuildContext context) {
  5.     return Image.asset(
  6.       'assets/image.png',
  7.       width: 100,
  8.       height: 100,
  9.       fit: BoxFit.contain,
  10.     );
  11.   }
  12. }
  13. // 使用缓存图片
  14. class CachedImage extends StatelessWidget {
  15.   final String imageUrl;
  16.   const CachedImage({Key? key, required this.imageUrl}) : super(key: key);
  17.   @override
  18.   Widget build(BuildContext context) {
  19.     return Image.network(
  20.       imageUrl,
  21.       width: 100,
  22.       height: 100,
  23.       fit: BoxFit.cover,
  24.       cacheWidth: 100 * 2, // 缓存宽度为显示宽度的2倍
  25.       cacheHeight: 100 * 2, // 缓存高度为显示高度的2倍
  26.     );
  27.   }
  28. }
复制代码

1. 字体优化:
  1. import 'package:flutter/material.dart';
  2. class OptimizedText extends StatelessWidget {
  3.   @override
  4.   Widget build(BuildContext context) {
  5.     return Text(
  6.       'Hello, World!',
  7.       style: TextStyle(
  8.         fontFamily: 'Roboto',
  9.         package: 'material_design_icons_flutter',
  10.       ),
  11.     );
  12.   }
  13. }
  14. // 预加载字体
  15. void main() async {
  16.   WidgetsFlutterBinding.ensureInitialized();
  17.   await loadFonts();
  18.   runApp(MyApp());
  19. }
  20. Future<void> loadFonts() async {
  21.   await Future.wait([
  22.     rootBundle.load('assets/fonts/CustomFont.ttf'),
  23.   ]);
  24. }
复制代码

渲染优化

1. 避免不必要的渲染:
  1. import React, { useState, useCallback } from 'react';
  2. import { View, Text, TouchableOpacity } from 'react-native';
  3. const OptimizedComponent = () => {
  4.   const [count, setCount] = useState(0);
  5.   
  6.   // 使用useCallback避免函数重新创建
  7.   const handlePress = useCallback(() => {
  8.     setCount(c => c + 1);
  9.   }, []);
  10.   return (
  11.     <View>
  12.       <Text>Count: {count}</Text>
  13.       <TouchableOpacity onPress={handlePress}>
  14.         <Text>Increment</Text>
  15.       </TouchableOpacity>
  16.     </View>
  17.   );
  18. };
复制代码

1. 使用InteractionManager处理复杂操作:
  1. import React, { useState, useEffect } from 'react';
  2. import { InteractionManager, View, Text } from 'react-native';
  3. const ComplexComponent = () => {
  4.   const [data, setData] = useState([]);
  5.   useEffect(() => {
  6.     const handle = InteractionManager.runAfterInteractions(() => {
  7.       // 在交互完成后执行复杂操作
  8.       fetch('https://api.example.com/data')
  9.         .then(response => response.json())
  10.         .then(json => setData(json))
  11.         .catch(error => console.error(error));
  12.     });
  13.     return () => handle.cancel();
  14.   }, []);
  15.   return (
  16.     <View>
  17.       {data.map(item => (
  18.         <Text key={item.id}>{item.name}</Text>
  19.       ))}
  20.     </View>
  21.   );
  22. };
复制代码

1. 使用const构造函数减少重建:
  1. class OptimizedWidget extends StatelessWidget {
  2.   final String title;
  3.   
  4.   const OptimizedWidget({Key? key, required this.title}) : super(key: key);
  5.   @override
  6.   Widget build(BuildContext context) {
  7.     return Text(title);
  8.   }
  9. }
复制代码

1. 使用RepaintBoundary优化重绘:
  1. import 'package:flutter/material.dart';
  2. class OptimizedAnimation extends StatefulWidget {
  3.   @override
  4.   _OptimizedAnimationState createState() => _OptimizedAnimationState();
  5. }
  6. class _OptimizedAnimationState extends State<OptimizedAnimation>
  7.     with SingleTickerProviderStateMixin {
  8.   late AnimationController _controller;
  9.   late Animation<double> _animation;
  10.   @override
  11.   void initState() {
  12.     super.initState();
  13.     _controller = AnimationController(
  14.       duration: const Duration(seconds: 2),
  15.       vsync: this,
  16.     )..repeat(reverse: true);
  17.     _animation = CurvedAnimation(
  18.       parent: _controller,
  19.       curve: Curves.easeIn,
  20.     );
  21.   }
  22.   @override
  23.   void dispose() {
  24.     _controller.dispose();
  25.     super.dispose();
  26.   }
  27.   @override
  28.   Widget build(BuildContext context) {
  29.     return RepaintBoundary(
  30.       child: AnimatedBuilder(
  31.         animation: _animation,
  32.         builder: (context, child) {
  33.           return Transform.scale(
  34.             scale: _animation.value,
  35.             child: child,
  36.           );
  37.         },
  38.         child: Container(
  39.           width: 100,
  40.           height: 100,
  41.           color: Colors.blue,
  42.         ),
  43.       ),
  44.     );
  45.   }
  46. }
复制代码

内存管理

1. 避免内存泄漏:
  1. import React, { useEffect, useRef } from 'react';
  2. import { View, Text } from 'react-native';
  3. const MemoryOptimizedComponent = () => {
  4.   const intervalRef = useRef(null);
  5.   useEffect(() => {
  6.     // 设置定时器
  7.     intervalRef.current = setInterval(() => {
  8.       console.log('Interval tick');
  9.     }, 1000);
  10.     // 清理函数
  11.     return () => {
  12.       if (intervalRef.current) {
  13.         clearInterval(intervalRef.current);
  14.       }
  15.     };
  16.   }, []);
  17.   return (
  18.     <View>
  19.       <Text>Memory Optimized Component</Text>
  20.     </View>
  21.   );
  22. };
复制代码

1. 使用shouldComponentUpdate优化类组件:
  1. import React from 'react';
  2. import { View, Text } from 'react-native';
  3. class OptimizedClassComponent extends React.Component {
  4.   shouldComponentUpdate(nextProps, nextState) {
  5.     // 只有当props中的data发生变化时才重新渲染
  6.     return this.props.data !== nextProps.data;
  7.   }
  8.   render() {
  9.     return (
  10.       <View>
  11.         <Text>{this.props.data}</Text>
  12.       </View>
  13.     );
  14.   }
  15. }
复制代码

1. 避免内存泄漏:
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. class MemoryOptimizedWidget extends StatefulWidget {
  4.   @override
  5.   _MemoryOptimizedWidgetState createState() => _MemoryOptimizedWidgetState();
  6. }
  7. class _MemoryOptimizedWidgetState extends State<MemoryOptimizedWidget> {
  8.   Timer? _timer;
  9.   @override
  10.   void initState() {
  11.     super.initState();
  12.     _timer = Timer.periodic(Duration(seconds: 1), (timer) {
  13.       print('Timer tick');
  14.     });
  15.   }
  16.   @override
  17.   void dispose() {
  18.     _timer?.cancel();
  19.     super.dispose();
  20.   }
  21.   @override
  22.   Widget build(BuildContext context) {
  23.     return Text('Memory Optimized Widget');
  24.   }
  25. }
复制代码

1. 使用AutomaticKeepAliveClientMixin保持状态:
  1. import 'package:flutter/material.dart';
  2. class PersistentTab extends StatefulWidget {
  3.   @override
  4.   _PersistentTabState createState() => _PersistentTabState();
  5. }
  6. class _PersistentTabState extends State<PersistentTab>
  7.     with AutomaticKeepAliveClientMixin {
  8.   int _counter = 0;
  9.   @override
  10.   bool get wantKeepAlive => true;
  11.   void _incrementCounter() {
  12.     setState(() {
  13.       _counter++;
  14.     });
  15.   }
  16.   @override
  17.   Widget build(BuildContext context) {
  18.     super.build(context); // 必须调用
  19.     return Scaffold(
  20.       body: Center(
  21.         child: Column(
  22.           mainAxisAlignment: MainAxisAlignment.center,
  23.           children: <Widget>[
  24.             Text('Counter: $_counter'),
  25.             ElevatedButton(
  26.               onPressed: _incrementCounter,
  27.               child: Text('Increment'),
  28.             ),
  29.           ],
  30.         ),
  31.       ),
  32.     );
  33.   }
  34. }
复制代码

应用上线流程

打包和构建

1. Android APK打包:
  1. # 生成签名密钥
  2. keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
  3. # 配置gradle变量
  4. # 在android/gradle.properties中添加:
  5. MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
  6. MYAPP_RELEASE_KEY_ALIAS=my-key-alias
  7. MYAPP_RELEASE_STORE_PASSWORD=*****
  8. MYAPP_RELEASE_KEY_PASSWORD=*****
  9. # 配置签名
  10. # 在android/app/build.gradle中添加:
  11. ...
  12. android {
  13.     ...
  14.     defaultConfig { ... }
  15.     signingConfigs {
  16.         release {
  17.             if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
  18.                 storeFile file(MYAPP_RELEASE_STORE_FILE)
  19.                 storePassword MYAPP_RELEASE_STORE_PASSWORD
  20.                 keyAlias MYAPP_RELEASE_KEY_ALIAS
  21.                 keyPassword MYAPP_RELEASE_KEY_PASSWORD
  22.             }
  23.         }
  24.     }
  25.     buildTypes {
  26.         release {
  27.             ...
  28.             signingConfig signingConfigs.release
  29.         }
  30.     }
  31. }
  32. ...
  33. # 生成发布版APK
  34. cd android
  35. ./gradlew assembleRelease
复制代码

1. iOS应用打包:
  1. # 在Xcode中打开项目
  2. open ios/YourProject.xcworkspace
  3. # 配置签名
  4. # 在Xcode中选择项目 > Signing & Capabilities
  5. # 配置Team和Bundle Identifier
  6. # 构建应用
  7. # 在Xcode中选择Product > Archive
  8. # 在Organizer中点击"Distribute App"
复制代码

1. Android APK打包:
  1. # 配置应用图标
  2. # 替换android/app/src/main/res/mipmap-*/ic_launcher.png
  3. # 配置应用名称
  4. # 编辑android/app/src/main/AndroidManifest.xml中的android:label
  5. # 生成签名密钥
  6. keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
  7. # 配置签名
  8. # 在android/key.properties中添加:
  9. storePassword=<password>
  10. keyPassword=<password>
  11. keyAlias=upload
  12. storeFile=<path-to-upload-keystore.jks>
  13. # 配置build.gradle
  14. # 在android/app/build.gradle中添加:
  15. ...
  16. android {
  17.     ...
  18.     signingConfigs {
  19.         release {
  20.             keyAlias keystoreProperties['keyAlias']
  21.             keyPassword keystoreProperties['keyPassword']
  22.             storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
  23.             storePassword keystoreProperties['storePassword']
  24.         }
  25.     }
  26.     buildTypes {
  27.         release {
  28.             signingConfig signingConfigs.release
  29.         }
  30.     }
  31. }
  32. ...
  33. # 构建APK
  34. flutter build apk --release
复制代码

1. iOS应用打包:
  1. # 配置应用图标
  2. # 替换ios/Runner/Assets.xcassets/AppIcon.appiconset/中的图标文件
  3. # 配置应用名称
  4. # 编辑ios/Runner/Info.plist中的CFBundleDisplayName
  5. # 在Xcode中打开项目
  6. open ios/Runner.xcworkspace
  7. # 配置签名
  8. # 在Xcode中选择项目 > Signing & Capabilities
  9. # 配置Team和Bundle Identifier
  10. # 构建应用
  11. # 在Xcode中选择Product > Archive
  12. # 在Organizer中点击"Distribute App"
复制代码

应用商店发布

1. 创建Google Play开发者账户:访问Google Play Console支付一次性注册费(25美元)完成账户信息设置
2. 访问Google Play Console
3. 支付一次性注册费(25美元)
4. 完成账户信息设置
5. 准备应用信息:应用标题应用描述截图和视频应用图标隐私政策链接
6. 应用标题
7. 应用描述
8. 截图和视频
9. 应用图标
10. 隐私政策链接
11. 上传APK或AAB:在Google Play Console中创建应用上传构建的APK或Android App Bundle(AAB)设置内容分级定价和分发范围
12. 在Google Play Console中创建应用
13. 上传构建的APK或Android App Bundle(AAB)
14. 设置内容分级
15. 定价和分发范围
16. 发布应用:完成所有必填信息提交审核审核通过后发布应用
17. 完成所有必填信息
18. 提交审核
19. 审核通过后发布应用

创建Google Play开发者账户:

• 访问Google Play Console
• 支付一次性注册费(25美元)
• 完成账户信息设置

准备应用信息:

• 应用标题
• 应用描述
• 截图和视频
• 应用图标
• 隐私政策链接

上传APK或AAB:

• 在Google Play Console中创建应用
• 上传构建的APK或Android App Bundle(AAB)
• 设置内容分级
• 定价和分发范围

发布应用:

• 完成所有必填信息
• 提交审核
• 审核通过后发布应用

1. 加入Apple开发者计划:访问Apple Developer Program支付年费(99美元)完成账户信息设置
2. 访问Apple Developer Program
3. 支付年费(99美元)
4. 完成账户信息设置
5. 准备应用信息:应用名称应用描述截图和视频应用图标隐私政策链接
6. 应用名称
7. 应用描述
8. 截图和视频
9. 应用图标
10. 隐私政策链接
11. 使用Application Loader上传应用:在Xcode中构建应用使用Application Loader或Xcode上传IPA文件在App Store Connect中配置应用信息
12. 在Xcode中构建应用
13. 使用Application Loader或Xcode上传IPA文件
14. 在App Store Connect中配置应用信息
15. 提交审核:完成所有必填信息提交审核审核通过后发布应用
16. 完成所有必填信息
17. 提交审核
18. 审核通过后发布应用

加入Apple开发者计划:

• 访问Apple Developer Program
• 支付年费(99美元)
• 完成账户信息设置

准备应用信息:

• 应用名称
• 应用描述
• 截图和视频
• 应用图标
• 隐私政策链接

使用Application Loader上传应用:

• 在Xcode中构建应用
• 使用Application Loader或Xcode上传IPA文件
• 在App Store Connect中配置应用信息

提交审核:

• 完成所有必填信息
• 提交审核
• 审核通过后发布应用

持续集成和部署

1. 创建GitHub Actions工作流文件:
  1. # .github/workflows/android.yml
  2. name: Android CI
  3. on:
  4.   push:
  5.     branches: [ main ]
  6.   pull_request:
  7.     branches: [ main ]
  8. jobs:
  9.   build:
  10.     runs-on: ubuntu-latest
  11.     steps:
  12.     - uses: actions/checkout@v2
  13.    
  14.     - name: set up JDK 11
  15.       uses: actions/setup-java@v2
  16.       with:
  17.         java-version: '11'
  18.         distribution: 'temurin'
  19.         
  20.     - name: Setup Node.js
  21.       uses: actions/setup-node@v2
  22.       with:
  23.         node-version: '16'
  24.         
  25.     - name: Install dependencies
  26.       run: |
  27.         npm install
  28.         
  29.     - name: Build Android APK
  30.       run: |
  31.         cd android
  32.         ./gradlew assembleRelease
  33.         
  34.     - name: Upload APK
  35.       uses: actions/upload-artifact@v2
  36.       with:
  37.         name: app-release
  38.         path: android/app/build/outputs/apk/release/app-release.apk
复制代码

1. 配置自动部署到Google Play Store:
  1. # .github/workflows/deploy.yml
  2. name: Deploy to Google Play
  3. on:
  4.   push:
  5.     tags:
  6.       - 'v*'
  7. jobs:
  8.   deploy:
  9.     runs-on: ubuntu-latest
  10.     steps:
  11.     - uses: actions/checkout@v2
  12.    
  13.     - name: set up JDK 11
  14.       uses: actions/setup-java@v2
  15.       with:
  16.         java-version: '11'
  17.         distribution: 'temurin'
  18.         
  19.     - name: Setup Node.js
  20.       uses: actions/setup-node@v2
  21.       with:
  22.         node-version: '16'
  23.         
  24.     - name: Install dependencies
  25.       run: |
  26.         npm install
  27.         
  28.     - name: Build Android AAB
  29.       run: |
  30.         cd android
  31.         ./gradlew bundleRelease
  32.         
  33.     - name: Upload to Google Play
  34.       uses: r0adkll/upload-google-play@v1
  35.       with:
  36.         serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
  37.         packageName: com.example.app
  38.         releaseFile: android/app/build/outputs/bundle/release/app-release.aab
  39.         track: production
复制代码

1. 创建GitHub Actions工作流文件:
  1. # .github/workflows/android.yml
  2. name: Android CI
  3. on:
  4.   push:
  5.     branches: [ main ]
  6.   pull_request:
  7.     branches: [ main ]
  8. jobs:
  9.   build:
  10.     runs-on: ubuntu-latest
  11.     steps:
  12.     - uses: actions/checkout@v2
  13.    
  14.     - name: set up JDK 11
  15.       uses: actions/setup-java@v2
  16.       with:
  17.         java-version: '11'
  18.         distribution: 'temurin'
  19.         
  20.     - name: Setup Flutter
  21.       uses: subosito/flutter-action@v1
  22.       with:
  23.         flutter-version: '2.8.1'
  24.         
  25.     - name: Get dependencies
  26.       run: flutter pub get
  27.       
  28.     - name: Build Android APK
  29.       run: flutter build apk --release
  30.         
  31.     - name: Upload APK
  32.       uses: actions/upload-artifact@v2
  33.       with:
  34.         name: app-release
  35.         path: build/app/outputs/flutter-apk/app-release.apk
复制代码

1. 配置自动部署到Google Play Store:
  1. # .github/workflows/deploy.yml
  2. name: Deploy to Google Play
  3. on:
  4.   push:
  5.     tags:
  6.       - 'v*'
  7. jobs:
  8.   deploy:
  9.     runs-on: ubuntu-latest
  10.     steps:
  11.     - uses: actions/checkout@v2
  12.    
  13.     - name: set up JDK 11
  14.       uses: actions/setup-java@v2
  15.       with:
  16.         java-version: '11'
  17.         distribution: 'temurin'
  18.         
  19.     - name: Setup Flutter
  20.       uses: subosito/flutter-action@v1
  21.       with:
  22.         flutter-version: '2.8.1'
  23.         
  24.     - name: Get dependencies
  25.       run: flutter pub get
  26.       
  27.     - name: Build Android AAB
  28.       run: flutter build appbundle --release
  29.         
  30.     - name: Upload to Google Play
  31.       uses: r0adkll/upload-google-play@v1
  32.       with:
  33.         serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
  34.         packageName: com.example.app
  35.         releaseFile: build/app/outputs/bundle/release/app-release.aab
  36.         track: production
复制代码

开发效率提升技巧

快捷键和命令面板

1. 编辑操作:Ctrl+X:剪切行(空选择)Ctrl+C:复制行(空选择)Ctrl+Shift+K:删除行Ctrl+Enter:在下面插入行Ctrl+Shift+Enter:在上面插入行Alt+↑/↓:向上/向下移动行Shift+Alt+↑/↓:向上/向下复制行Ctrl+D:选择下一个匹配项Ctrl+U:撤消上一个光标操作
2. Ctrl+X:剪切行(空选择)
3. Ctrl+C:复制行(空选择)
4. Ctrl+Shift+K:删除行
5. Ctrl+Enter:在下面插入行
6. Ctrl+Shift+Enter:在上面插入行
7. Alt+↑/↓:向上/向下移动行
8. Shift+Alt+↑/↓:向上/向下复制行
9. Ctrl+D:选择下一个匹配项
10. Ctrl+U:撤消上一个光标操作
11. 导航操作:Ctrl+P:转到文件Ctrl+G:转到行Ctrl+Shift+O:转到符号F12:转到定义Shift+F12:转到引用Ctrl+Shift+M:显示问题面板
12. Ctrl+P:转到文件
13. Ctrl+G:转到行
14. Ctrl+Shift+O:转到符号
15. F12:转到定义
16. Shift+F12:转到引用
17. Ctrl+Shift+M:显示问题面板
18. 编辑器管理:Ctrl+\:拆分编辑器Ctrl+1/2/3:聚焦到第1/2/3个编辑器Ctrl+Shift+W:关闭编辑器Ctrl+K F:关闭文件夹
19. Ctrl+\:拆分编辑器
20. Ctrl+1/2/3:聚焦到第1/2/3个编辑器
21. Ctrl+Shift+W:关闭编辑器
22. Ctrl+K F:关闭文件夹
23. 文件管理:Ctrl+N:新文件Ctrl+O:打开文件Ctrl+S:保存Ctrl+Shift+S:另存为Ctrl+K S:保存所有
24. Ctrl+N:新文件
25. Ctrl+O:打开文件
26. Ctrl+S:保存
27. Ctrl+Shift+S:另存为
28. Ctrl+K S:保存所有
29. 调试:F9:切换断点F5:启动调试Shift+F5:停止调试F10:跳过F11:进入Shift+F11:退出
30. F9:切换断点
31. F5:启动调试
32. Shift+F5:停止调试
33. F10:跳过
34. F11:进入
35. Shift+F11:退出

编辑操作:

• Ctrl+X:剪切行(空选择)
• Ctrl+C:复制行(空选择)
• Ctrl+Shift+K:删除行
• Ctrl+Enter:在下面插入行
• Ctrl+Shift+Enter:在上面插入行
• Alt+↑/↓:向上/向下移动行
• Shift+Alt+↑/↓:向上/向下复制行
• Ctrl+D:选择下一个匹配项
• Ctrl+U:撤消上一个光标操作

导航操作:

• Ctrl+P:转到文件
• Ctrl+G:转到行
• Ctrl+Shift+O:转到符号
• F12:转到定义
• Shift+F12:转到引用
• Ctrl+Shift+M:显示问题面板

编辑器管理:

• Ctrl+\:拆分编辑器
• Ctrl+1/2/3:聚焦到第1/2/3个编辑器
• Ctrl+Shift+W:关闭编辑器
• Ctrl+K F:关闭文件夹

文件管理:

• Ctrl+N:新文件
• Ctrl+O:打开文件
• Ctrl+S:保存
• Ctrl+Shift+S:另存为
• Ctrl+K S:保存所有

调试:

• F9:切换断点
• F5:启动调试
• Shift+F5:停止调试
• F10:跳过
• F11:进入
• Shift+F11:退出

命令面板(Ctrl+Shift+P或Cmd+Shift+P)是VS Code中最强大的功能之一,可以通过它访问几乎所有命令。

1. 常用命令:View: Toggle Integrated Terminal:打开/关闭集成终端File: New File:创建新文件File: Save All:保存所有文件Editor: Format Document:格式化文档Workbench: View Zen Mode:进入禅模式Preferences: Open Settings (JSON):打开JSON设置
2. View: Toggle Integrated Terminal:打开/关闭集成终端
3. File: New File:创建新文件
4. File: Save All:保存所有文件
5. Editor: Format Document:格式化文档
6. Workbench: View Zen Mode:进入禅模式
7. Preferences: Open Settings (JSON):打开JSON设置
8. 命令面板快捷操作:>:显示并运行所有命令@:跳转到文件中的符号::跳转到文件中的行号#:在文件中搜索@::按类别分组显示符号
9. >:显示并运行所有命令
10. @:跳转到文件中的符号
11. ::跳转到文件中的行号
12. #:在文件中搜索
13. @::按类别分组显示符号

常用命令:

• View: Toggle Integrated Terminal:打开/关闭集成终端
• File: New File:创建新文件
• File: Save All:保存所有文件
• Editor: Format Document:格式化文档
• Workbench: View Zen Mode:进入禅模式
• Preferences: Open Settings (JSON):打开JSON设置

命令面板快捷操作:

• >:显示并运行所有命令
• @:跳转到文件中的符号
• ::跳转到文件中的行号
• #:在文件中搜索
• @::按类别分组显示符号

自定义配置

1. 用户设置和工作区设置:用户设置:全局设置,适用于所有项目工作区设置:项目特定设置,存储在项目.vscode文件夹中
2. 用户设置:全局设置,适用于所有项目
3. 工作区设置:项目特定设置,存储在项目.vscode文件夹中
4. 常用设置示例:

用户设置和工作区设置:

• 用户设置:全局设置,适用于所有项目
• 工作区设置:项目特定设置,存储在项目.vscode文件夹中

常用设置示例:
  1. // settings.json
  2. {
  3.   // 编辑器设置
  4.   "editor.fontSize": 14,
  5.   "editor.tabSize": 2,
  6.   "editor.insertSpaces": true,
  7.   "editor.renderWhitespace": "boundary",
  8.   "editor.wordWrap": "on",
  9.   "editor.formatOnSave": true,
  10.   "editor.codeActionsOnSave": {
  11.     "source.fixAll.eslint": true
  12.   },
  13.   
  14.   // 文件设置
  15.   "files.exclude": {
  16.     "**/.git": true,
  17.     "**/.svn": true,
  18.     "**/.hg": true,
  19.     "**/CVS": true,
  20.     "**/.DS_Store": true,
  21.     "**/node_modules": true
  22.   },
  23.   "files.watcherExclude": {
  24.     "**/.git/objects/**": true,
  25.     "**/.git/subtree-cache/**": true,
  26.     "**/node_modules/**": true
  27.   },
  28.   
  29.   // 搜索设置
  30.   "search.exclude": {
  31.     "**/node_modules": true,
  32.     "**/bower_components": true
  33.   },
  34.   
  35.   // 终端设置
  36.   "terminal.integrated.shell.linux": "/bin/bash",
  37.   "terminal.integrated.fontSize": 14,
  38.   
  39.   // React Native设置
  40.   "react-native-tools.projectRoot": "./",
  41.   "react-native-tools.logLevel": "Trace",
  42.   
  43.   // Flutter设置
  44.   "dart.debugExternalLibraries": false,
  45.   "dart.debugSdkLibraries": false,
  46.   
  47.   // ESLint设置
  48.   "eslint.validate": [
  49.     "javascript",
  50.     "javascriptreact",
  51.     "typescript",
  52.     "typescriptreact"
  53.   ],
  54.   
  55.   // Prettier设置
  56.   "prettier.singleQuote": true,
  57.   "prettier.trailingComma": "es5",
  58.   "prettier.printWidth": 100
  59. }
复制代码

1. 创建任务:在项目根目录创建.vscode文件夹在.vscode文件夹中创建tasks.json文件
2. 在项目根目录创建.vscode文件夹
3. 在.vscode文件夹中创建tasks.json文件
4. 常用任务示例:

创建任务:

• 在项目根目录创建.vscode文件夹
• 在.vscode文件夹中创建tasks.json文件

常用任务示例:
  1. // tasks.json
  2. {
  3.   "version": "2.0.0",
  4.   "tasks": [
  5.     {
  6.       "label": "Run React Native on Android",
  7.       "type": "shell",
  8.       "command": "react-native run-android",
  9.       "group": "build",
  10.       "presentation": {
  11.         "reveal": "always",
  12.         "panel": "new"
  13.       }
  14.     },
  15.     {
  16.       "label": "Run React Native on iOS",
  17.       "type": "shell",
  18.       "command": "react-native run-ios",
  19.       "group": "build",
  20.       "presentation": {
  21.         "reveal": "always",
  22.         "panel": "new"
  23.       }
  24.     },
  25.     {
  26.       "label": "Start React Native Packager",
  27.       "type": "shell",
  28.       "command": "react-native start",
  29.       "group": "build",
  30.       "presentation": {
  31.         "reveal": "always",
  32.         "panel": "new"
  33.       }
  34.     },
  35.     {
  36.       "label": "Run Flutter on Android",
  37.       "type": "shell",
  38.       "command": "flutter run -d android",
  39.       "group": "build",
  40.       "presentation": {
  41.         "reveal": "always",
  42.         "panel": "new"
  43.       }
  44.     },
  45.     {
  46.       "label": "Run Flutter on iOS",
  47.       "type": "shell",
  48.       "command": "flutter run -d ios",
  49.       "group": "build",
  50.       "presentation": {
  51.         "reveal": "always",
  52.         "panel": "new"
  53.       }
  54.     },
  55.     {
  56.       "label": "Build Flutter APK",
  57.       "type": "shell",
  58.       "command": "flutter build apk --release",
  59.       "group": "build",
  60.       "presentation": {
  61.         "reveal": "always",
  62.         "panel": "new"
  63.       }
  64.     }
  65.   ]
  66. }
复制代码

自动化工具集成

1. 安装依赖:
  1. npm install --save-dev eslint prettier eslint-config-prettier eslint-plugin-prettier
复制代码

1. 配置ESLint:
  1. // .eslintrc.json
  2. {
  3.   "extends": ["react-app", "prettier"],
  4.   "plugins": ["prettier"],
  5.   "rules": {
  6.     "prettier/prettier": "error",
  7.     "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }],
  8.     "import/prefer-default-export": "off"
  9.   }
  10. }
复制代码

1. 配置Prettier:
  1. // .prettierrc
  2. {
  3.   "singleQuote": true,
  4.   "trailingComma": "es5",
  5.   "printWidth": 100,
  6.   "tabWidth": 2,
  7.   "useTabs": false
  8. }
复制代码

1. VS Code设置:
  1. // settings.json
  2. {
  3.   "editor.formatOnSave": true,
  4.   "editor.codeActionsOnSave": {
  5.     "source.fixAll.eslint": true
  6.   },
  7.   "eslint.validate": [
  8.     "javascript",
  9.     "javascriptreact",
  10.     "typescript",
  11.     "typescriptreact"
  12.   ],
  13.   "[javascript]": {
  14.     "editor.defaultFormatter": "esbenp.prettier-vscode"
  15.   },
  16.   "[javascriptreact]": {
  17.     "editor.defaultFormatter": "esbenp.prettier-vscode"
  18.   },
  19.   "[typescript]": {
  20.     "editor.defaultFormatter": "esbenp.prettier-vscode"
  21.   },
  22.   "[typescriptreact]": {
  23.     "editor.defaultFormatter": "esbenp.prettier-vscode"
  24.   }
  25. }
复制代码

1. 安装Husky和lint-staged:
  1. npm install --save-dev husky lint-staged
复制代码

1. 配置package.json:
  1. {
  2.   "husky": {
  3.     "hooks": {
  4.       "pre-commit": "lint-staged"
  5.     }
  6.   },
  7.   "lint-staged": {
  8.     "*.{js,jsx,ts,tsx}": [
  9.       "eslint --fix",
  10.       "prettier --write",
  11.       "git add"
  12.     ]
  13.   }
  14. }
复制代码

1. 创建Dockerfile:
  1. # React Native Dockerfile
  2. FROM node:14
  3. # Install React Native CLI
  4. RUN npm install -g react-native-cli
  5. # Install Watchman (for macOS)
  6. # RUN brew install watchman
  7. # Install JDK for Android development
  8. RUN apt-get update && apt-get install -y openjdk-8-jdk
  9. # Set environment variables
  10. ENV ANDROID_HOME=/usr/local/android-sdk
  11. ENV PATH=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
  12. # Install Android SDK
  13. RUN wget -q https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -O android-sdk-tools.zip && \
  14.     unzip android-sdk-tools.zip -d ${ANDROID_HOME} && \
  15.     rm android-sdk-tools.zip
  16. # Install Android platforms and build tools
  17. RUN ${ANDROID_HOME}/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3" "platform-tools"
  18. # Set working directory
  19. WORKDIR /app
  20. # Copy package.json and package-lock.json
  21. COPY package*.json ./
  22. # Install dependencies
  23. RUN npm install
  24. # Copy the rest of the application
  25. COPY . .
  26. # Expose port for Metro bundler
  27. EXPOSE 8081
  28. # Start Metro bundler
  29. CMD ["npm", "start"]
复制代码

1. 创建docker-compose.yml:
  1. version: '3'
  2. services:
  3.   react-native:
  4.     build: .
  5.     ports:
  6.       - "8081:8081"
  7.     volumes:
  8.       - .:/app
  9.       - /app/node_modules
  10.     environment:
  11.       - REACT_NATIVE_PACKAGER_HOSTNAME=192.168.1.100 # Replace with your host IP
复制代码

1. VS Code Docker扩展配置:
  1. // .vscode/settings.json
  2. {
  3.   "docker.languageserver.formatter.ignoreMultilineInstructions": true
  4. }
复制代码

总结与展望

本文详细介绍了如何使用VS Code进行移动端开发的全过程,从环境搭建到应用上线,涵盖了跨平台开发技巧、调试方法与性能优化策略。通过合理配置VS Code,结合各种扩展和工具,可以大大提高移动应用的开发效率和质量。

随着移动应用开发技术的不断发展,VS Code作为一款轻量级但功能强大的编辑器,将继续在移动端开发领域发挥重要作用。未来,我们可以期待更多针对移动端开发的VS Code扩展和功能,以及更好的跨平台开发体验。

无论你是React Native、Flutter还是Ionic开发者,VS Code都能为你提供高效、便捷的开发环境。希望本文的内容能够帮助你更好地利用VS Code进行移动端开发,构建出高质量的移动应用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

频道订阅

频道订阅

加入社群

加入社群

联系我们|TG频道|RSS

Powered by Pixtech

© 2025 Pixtech Team.