flutter编译release版本

1. 生成jks

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

2. 创建key.properities

flutter-project/android下创建key.properities

1
2
3
4
storePassword = 123456
keyPassword = 123456
keyAlias = key
storeFile = xxx/xxx/key.jks

3.修改build.gradle

flutter-project/android/app/build.gradle

android {}上面粘贴

1
2
3
4
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

修改buildTypes

1
2
3
4
5
6
7
8
9
buildTypes {
release {
signingConfig signingConfigs.release
debuggable false
minifyEnabled true
shrinkResources true
// proguardFile getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

修改signingConfigs

1
2
3
4
5
6
7
8
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}

4. [可选] 设置编译架构

1
2
3
4
5
6
7
8
buildTypes {
release {
signingConfig signingConfigs.release
ndk {
abiFilters 'armeabi-v7a'
}
}
}

5. 编译

1
flutter build apk 

常见问题

找不到.pro文件

1
2
Execution failed for task ':app:minifyReleaseWithProguard'.             
> java.io.IOException: Please correct the above warnings first.

将修改修改buildTypes里的注释打开,并在flutter-project/android/app/创建proguard-rules.pro

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
34
35
36
37
38
# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改

-optimizationpasses 5

# 去除编译时警告

-ignorewarnings

#不压缩输入的类文件

-dontshrink

#不优化输入的类文件

-dontoptimize


# 混合时不使用大小写混合,混合后的类名为小写

-dontusemixedcaseclassnames

# 指定不去忽略非公共库的类

-dontskipnonpubliclibraryclasses

# 这句话能够使我们的项目混淆后产生映射文件

# 包含有类名->混淆后类名的映射关系

-verbose

# 指定不去忽略非公共库的类成员

-dontskipnonpubliclibraryclassmembers

# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。

-dontpreverify