P21. Flutter客户端如何打包apk
到现在为止,我相信小伙伴都能做出一些漂亮的页面了,也有了想要安装到手机上的冲动,这时候就需要我们进行打包,本文我们就学学 Android 客户端如何打包 apk。
其实这个打包的坑还是比较多的,官方文档显然是站在大神级程序员的角度写的,所以如果你看文档,特别是前端,那基本是打不成功的。
不要怕,我这里就详细的把打包的过程和坑给大家演示一下。
配置 APP 的图标
想配置 APP 的图片,你需要找到下面的目录:
项目根目录/android/app/src/main/res/
进入之后你会看到很多 mipmap-为前缀命名的文件夹,后边的是像素密度,可以看出图标的分辨率。
- mdpi (中) ~160dpi
- hdpi (高) ~240dip
- xhdpi (超高) ~320dip
- xxhdpi (超超高) ~480dip
- xxxhdpi (超超超高) ~640dip
将对应像素密度的图片放入对应的文件夹中,图片记得用 png 格式,记得名字要统一,才能一次性进行配置。
AndroidManifest.xml 文件
这个文件主要用来配置 APP 的名称、图标和系统权限,所在的目录在:
项目根目录/android/app/src/main/AndroidManifest.xml
android:label="flutter_app" //配置 APP 的名称,支持中文 android:icon="@mipmap/ic_launcher" //APP 图标的文件名称
生成 keystore
这里的坑挺多的,小伙伴一定要注意。官方写的非常简单,只要在终端运行如下代码就可以成功,但事实是报错。
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
根本找不到这个目录,真的很坑,其实我们只是没有配置环境变量。但是为了一个包配置环境变量是不知道的。
这时候可以用下面的命令找到 keytool.exe 的位置。
flutter doctor -v
这时候你直接拷贝命令并进行输入,但这里也有个坑,就是如果文件夹中间带有空空,你需要用单引号扩上。
假设我们 keytool 路径是这样的:
D:\Program\Android\Android Studio\jre\bin\
这个时候你就需要把 Android Studio 用单引号括起来:
D:\Program\Android\'Android Studio'\jre\bin\
我本地是这样的:
D:\androidStudio\jre\bin\keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
这就可以了吗?那你就太天真了,还是会报错。
这个错误的主要问题是目录不存在和没有写权限,所以我们要更换一个有写权限的目录。我们把命令改成了下面的形式。
D:\androidStudio\jre\bin\keytool -genkey -v -keystore D:\key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
这时候你得终端会出现如下图信息,表示创建成功了。
这时你的 D 盘下面就会有一个 Jks 的文件,记住这个文件不能共享给任何人。
有了这个 key.jks 文件后,可以到项目目录下的android
文件夹下,创建一个名为 key.properties 的文件,并打开粘贴下面的代码。
storePassword= //输入上一步创建 KEY 时输入的 密钥库 密码 keyPassword= //输入上一步创建 KEY 时输入的 密钥 密码 keyAlias=key storeFile=<E:/key.jks> //key.jks 的存放路径
我的文件最后是这样的:
storePassword=123123 keyPassword=123123 keyAlias=key storeFile=D:/key.jks
这个工作中也不要分享出去哦,这个 Key 就算生成成功了。
配置 key 注册
key 生成好后,需要在 build.gradle 文件中进行配置。这个过程其实很简单,就是粘贴复制一些东西,你是不需要知道这些文件的具体用处的。
第一项:
进入项目目录的/android/app/build.gradle 文件,在android{
这一行前面,加入如下代码:
def keystorePropertiesFile = rootProject.file("key.properties") def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
把如下代码进行替换
buildTypes { release { signingConfig signingConfigs.debug } }
替换成的代码:
signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } buildTypes { release { signingConfig signingConfigs.release } }
生成 apk
直接在终端中输入:
flutter build apk
如果你的终端出现如下信息,表示你打包成功了:
上图告诉我们打包后的路径在 build\app\outputs\flutter-apk\app-release.apk 下,我们可以看看是否有这个包。
打包成功了如何安装呢?输入下面命令:
flutter install
我是在虚拟机上测试的,有真机的可以试试在手机上看一下。
码云笔记 » P21. Flutter客户端如何打包apk