本文主要介绍Google的开源UI框架——Flutter的简单使用教程。

1 安装前提

2 获取 Flutter SDK

Flutter_Windows_2.0.6-stable.zip

解压后将 flutter 目录拷贝到D盘或其他路径。

3 设置环境变量

在高级系统设置中选择环境变量,在 Path 中添加Flutter SDK的路径,比如D:\flutter\bin

4 运行 flutter doctor

按照提示运行:

1
flutter doctor --android-licenses

按照提示一直输入 y 即可,然后再次运行:

1
flutter doctor

提示 No issues found! 说明环境配置正确了。

5 安装依赖包

如果工程使用了依赖包,可以运行以下命令来安装:

1
flutter packages get

Flutter 启动调试工具报错,可能是调试工具没有安装并激活,可以运行以下命令:

1
flutter pub global activate devtools

当运行flutter doctor后出现Android Studio not installed时,需要指定Android Studio的安装路径,需要运行如下命令:

1
flutter config --android-studio-dir "YourAndroidStudioInstallPath"

再次运行flutter doctor

6 创建工程

(1)File->New Flutter Project->Flutter App

(2)选择Flutter SDK Path。

(3)填写工程名。

(4)填写工程路径。

7 Android构建发布

(1)检查APP Manifest

<app_dir>/android/app/src/main路径下查看AndroidManifest.xml文件,验证这些值是否正确,特别是:

Application:应用名称

User-permission:使用权限,必须包含网络访问权限。

若没有加入网络权限,则在<application上添加以下内容:

<uses-permission android:name="android.permission.INTERNET" />

(2)查看构建配置

<app_dir>/android/app/路径下查看build.gradle文件,验证这些值是否正确,特别是:

defaultConfig:

applicationId:指定始终唯一的appid

versionCode & versionName:指定应用程序版本号和版本字符串

minSdkVersion & targetSdkVersion:指定最低的API运行级别以及应用程序运行的API级别。

(3)添加启动图标

<app_dir>/android/app/src/main/res/路径下,将图标文件放入使用配置限定名命名的文件夹中,默认使用mipmap文件夹演示正确的命名约定。

AndroidManifest.xml文件中,将android:icon属性更新为引用上一步中的图标,如android:icon=”mipmap/ic_launcher”

(4)APP签名

创建keystore

在命令行窗口进入<app_dir>路径,输入以下指令,根据提示输入对应信息,生成密钥结构如下所示:

keytool -genkey -v -keystore ./key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

image-20220725133511680

引用应用程序中的keystore

<app_dir>/android/在创建一个名为key.properties的文件,其中包含对密钥库的引用:

storePassword=密钥库口令

keyPassword=key的密钥口令

keyAlias=key

storeFile=/key.jks

在gradle中配置签名

<app_dir>/android/app/路径下编辑build.gradle文件,

”android {“前加上如下内容:

1
2
3
4
5
def keystorePropertiesFile = rootProject.file("key.properties")

def keystoreProperties = new Properties()

keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

1
2
3
4
5
6
7
8
9
10
11
buildTypes {

release {

​ // TODO: Add your own signing config for the release build.

​ // Signing with the debug keys for now, so `flutter run --release` works.

​ signingConfig signingConfigs.debug

}}

替换为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
signingConfigs {

release {

​ keyAlias keystoreProperties['keyAlias']

​ keyPassword keystoreProperties['keyPassword']

​ storeFile file(keystoreProperties['storeFile'])

​ storePassword keystoreProperties['storePassword']

}}buildTypes {

release {

​ signingConfig signingConfigs.release

}}

(5)开启混淆

配置混淆

<app_dir>/android/app/路径下创建一个名为proguard-rules.pro的文件,并加入以下规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
\#Flutter Wrapper

-keep class io.flutter.app.** { *; }

-keep class io.flutter.plugin.** { *; }

-keep class io.flutter.util.** { *; }

-keep class io.flutter.view.** { *; }

-keep class io.flutter.** { *; }

-keep class io.flutter.plugins.** { *; }

开启混淆压缩

<app_dir>/app/build.gradle文件中,定位到buildTypes

release配置中将minifyEnableduseProguard设为true,并将混淆文件指向proguard-rules.pro

修改后的buildTypes如下所示:

1
2
3
4
5
6
7
8
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

(6)构建发布版apk

进入应用程序目录

cd <app_dir>

构建apk(构建好的apk位于<app_dir>/build/app/outputs/apk/app-release.apk

flutter build apk

安装apk

flutter install

构建apk结果如下所示:

image-20220725134059854