第14章:发布与部署
简要说明
在本章中,我们将学习如何将Flutter应用打包并发布到应用商店。我们将涵盖生成发布版本、配置应用签名以及发布到Google Play和App Store的详细步骤。此外,我们还将通过一个完整的项目,综合运用前面所学的知识,构建一个简易的任务管理应用。
关键知识点
生成发布版本(APK、IPA)
Android APK
-
配置
build.gradle
文件:- 打开
android/app/build.gradle
文件,确保buildTypes
中的release
配置正确。
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
} - 打开
-
生成签名密钥:
- 使用
keytool
生成签名密钥。
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
- 使用
-
配置签名:
- 在
android/app/build.gradle
中配置签名。
signingConfigs {
release {
keyAlias 'key'
keyPassword 'your_key_password'
storeFile file('~/key.jks')
storePassword 'your_store_password'
}
} - 在
-
生成APK:
- 运行以下命令生成APK。
flutter build apk --release
iOS IPA
-
配置Xcode项目:
- 打开
ios/Runner.xcworkspace
,配置Signing & Capabilities
。
- 打开
-
生成IPA:
- 在Xcode中选择
Product > Archive
,然后导出IPA文件。
- 在Xcode中选择
配置应用签名
Android
- 如上所述,在
build.gradle
中配置签名。
iOS
- 在Xcode中配置
Signing & Capabilities
,确保使用正确的开发者账号和证书。
发布到Google Play和App Store
Google Play
-
创建开发者账号:
- 注册Google Play开发者账号并支付一次性费用。
-
上传APK:
- 登录Google Play Console,创建新应用并上传APK。
-
填写应用信息:
- 填写应用描述、截图、图标等信息。
-
发布应用:
- 提交应用审核,审核通过后 即可发布。
App Store
-
创建开发者账号:
- 注册Apple Developer账号并支付年费。
-
上传IPA:
- 使用Xcode或Transporter上传IPA到App Store Connect。
-
填写应用信息:
- 填写应用描述、截图、图标等信息。
-
提交审核:
- 提交应用审核,审核通过后即可发布。
项目:简易任务管理应用
项目需求分析与设计
- 需求:
- 用户可以查看任务列表。
- 用户可以添加新任务。
- 用户可以删除任务。
- 使用状态管理(如Provider)管理应用状态。
实现任务列表、添加任务、删除任务等功能
-
创建任务模型:
class Task {
String title;
bool isCompleted;
Task({required this.title, this.isCompleted = false});
} -
使用Provider管理状态:
class TaskProvider with ChangeNotifier {
List<Task> _tasks = [];
List<Task> get tasks => _tasks;
void addTask(String title) {
_tasks.add(Task(title: title));
notifyListeners();
}
void removeTask(int index) {
_tasks.removeAt(index);
notifyListeners();
}
} -
实现任务列表UI:
class TaskList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer<TaskProvider>(
builder: (context, taskProvider, child) {
return ListView.builder(
itemCount: taskProvider.tasks.length,
itemBuilder: (context, index) {
final task = taskProvider.tasks[index];
return ListTile(
title: Text(task.title),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () => taskProvider.removeTask(index),
),
);
},
);
},
);
}
} -
实现添加任务UI:
class AddTaskScreen extends StatelessWidget {
final TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Add Task'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: _controller,
decoration: InputDecoration(labelText: 'Task Title'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
if (_controller.text.isNotEmpty) {
Provider.of<TaskProvider>(context, listen: false).addTask(_controller.text);
Navigator.pop(context);
}
},
child: Text('Add Task'),
),
],
),
),
);
}
}
部署与测试
-
测试应用:
- 在模拟器或真机上测试应用功能。
-
打包发布:
- 按照前面的步骤生成APK或IPA,并发布到Google Play或App Store。
参考资源
- Flutter官方文档:https://flutter.dev/docs
- Dart语言官方文档:https://dart.dev/guides
- Flutter社区资源:https://flutterawesome.com
推荐书籍
- 《Flutter实战》
- 《Dart编程语言入门》
通过本章的学习,你应该能够将Flutter应用打包并发布到应用商店,同时通过一个完整的项目综合运用前面所学的知识。希望你能通过实践进一步巩固所学内容。