一、首次打包需要创建Key
1.1 在命令行输入:flutter doctor -v 找到Java binary 存放的路径

1.2 在当前D:\Development\ard\jre\bin文件夹下使用cmd命令行工具输入
keytool -genkey -v -keystore D:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
//-keystore 表示生成的签名文件的名称, 后期发布项目的是会用到该文件
//-alias 后续项目发布的时候也会用到, 可以根据自己的需要进行自定制库别名
1.3当运行命令的时候, 需要输入相关口令的密码和一些奇奇怪怪的消息比如个人信息直接回车就可以了,然后中间会问你是否确认,输入y就可以了不出意外在D盘的根目录下就会创建一个key.jks文件了, 请一定保存好密码, 后期会用到
******注意: 保持key.jks 文件的私密性, 不要将其加入到公共代码控制中, 注意在 .gitignore 中添加忽略文件
如图

二、进行一些相关的配置
2.1在你开发的项目下的android目录下创建一个key.properties文件 输入以下代码,保存一下
storePassword= 刚刚创建密钥库时的密码
keyPassword= 刚刚创建密钥的密码
keyAlias=key //库的别名
storeFile=D:/key.jks //key.jks文件路径
2.2打开flutter的/android/app/build.gradle文件,在android前加入
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

把buildTypes这个对象替换成
signingConfigs {
release {
keyAlias "创建的密钥库别名,如果不知道可以把D:/key.js文件粘贴到(上图1.1文件里面)打开命令行工具输入keytool -list -v -keystore key.jks -storepass 密钥的密码查看库名"
keyPassword "密钥的密码"
storeFile file(“密钥所在文件夹,如果是按照我上面的步骤的话是D:/key.jks”)
storePassword "密钥库的密码"
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
如图

查看密钥库别名:

2.3配置打包app的网络请求
在这个文件里,android\app\src\profile\AndroidManifest.xml.manifest 在当前目录文件添加
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
//*****在application和manifest结束标签之前添加
如图

启用混淆配置
默认情况下,Flutter不会混淆和压缩Android原生代码,当项目使用的第三方依赖库需要添加混淆配置时,需要添加Flutter相关类的禁止混淆策略。
三、 配置混淆文件
在android/app下创建proguard-rules.pro文件,并添加以下规则:
## Flutter相关类
-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.** {*;}
上面这些配置会保护Flutter引擎类库不会混淆。
四 启动混淆和压缩
编辑/android/app/build.gradle文件,在release编译类型下添加混淆和压缩配置。

添加完了这个项目之后Android应用打包
使用命令行:
cd <app dir> (<app dir> 为您的工程根目录).
运行flutter build apk (flutter build默认会包含--release选项).
打包好的发布APK位于<app dir>build/app/outputs/apk/app-release.apk

网友评论