flutter 打包为安卓应用

时间:2020-10-02

创建一个密钥库

keytool -genkey -v -keystore c:\Users\USER_NAME\key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key

从 app 中引用密钥库

在项目android目录下新建key.properties文件

storePassword=上一步骤中的密码
keyPassword=上一步骤中的密码
keyAlias=key
storeFile=密钥库的位置,e.g. key.jks

密钥库的位置:需要将key.jks放到项目android目录下,即这个位置相当于项目android目录的位置

在 gradle 中配置签名

编辑android/app/build.gradle文件

在 android 代码块之前添加:

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
       keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
         ...
}

在 buildTypes 代码块之前添加:

signingConfigs {
       release {
           keyAlias keystoreProperties['keyAlias']
           keyPassword keystoreProperties['keyPassword']
           storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
           storePassword keystoreProperties['storePassword']
       }
}
buildTypes {
       release {
           signingConfig signingConfigs.release
       }
}

请注意:signingConfig signingConfigs.release

启用混淆器

在android/app/目录下新建proguard-rules.pro文件

## 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.**  { *; }
-dontwarn io.flutter.embedding.**

启用混淆以及/或压缩

在 /android/app/build.gradle 文件找到 buildTypes 的定义。在 release 配置中设置 minifiyEnabled 和 useProguard 为 true。另外我们必须再设置 Proguard 指向我们创建的proguard-rules.pro文件。

android {

    ...

    buildTypes {

        release {

            signingConfig signingConfigs.release

            minifyEnabled true
            useProguard true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }
    }
}

当你更改 gradle 文件后也许需要运行一下 flutter clean。这将防止缓存的版本影响签名过程。

构建apk

打开cmd在项目根目录下执行 flutter build apk

生成的apk文件在:build/app/outputs/apk/release/目录下。