【手把手学习flutter】Flutter打Android包的基本配置和包体积优化策略

关注「松宝写代码」,回复“加群”

加入我们一起学习,天天向上

前言

因为最近参加2020FEHackson,有个项目需要要快速上线,把打包过程和遇到的问题做个记录。

一、背景

在本地开发中,使用flutter run命令还是Android studio运行或者调试,flutter构建的是debug版本,也就是本地调试右上角出现debug标志。

当本地调试OK后,准备release版本,比如发布到应用商城,或者交付用户使用。

二、前期检查工作

1、检查AndroidManifest配置

在/android/app/src/main/中的AndroidManifest.xml文件,并验证这些属性是否正确,特别是:

  • application属性,这是应用的名称。
  • uses-permission属性,启用flutter工具和app应用进行通信,默认是开启,如果不开启,直接删除该属性这一行。

2、查看构建配置

在/android/app/build.gradle”,验证这些属性是否正确,

  • defaultConfig文件

    • applicationId:制定始终唯一的appid。
    • versionCode && versionName:app应用版本号和版本号字符串。
    • minSdkVersion && targetSdkVersion:指定最低的API级别以及应用程序设计运用的API级别。

3、app签名

创建keystore,如果之前已经创建过keystore,那就跳过,如果没有创建过,继续来看。

创建一个keystore,执行命令:

For more details, please visit https://support.apple.com/kb/HT208050.
chengxinsongdeMacBook-Pro:~ chengxinsong$ keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

生成的文件是 key.jks

默认文件地址:/Users/你电脑名称/key.jks

注意:密钥是私密文件,不要加到git中。

下面是详细的执行过程

Last login: Mon Nov  2 14:17:41 on ttys005

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
chengxinsongdeMacBook-Pro:~ chengxinsong$ keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
输入密钥库口令:
再次输入新口令:
它们不匹配。请重试
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: cheng
您的组织单位名称是什么?
[Unknown]: byte
您的组织名称是什么?
[Unknown]: byte
您所在的城市或区域名称是什么?
[Unknown]: nj
您所在的省/市/自治区名称是什么?
[Unknown]: nj
该单位的双字母国家/地区代码是什么?
[Unknown]: cn
CN=cheng, OU=byte, O=byte, L=nj, ST=nj, C=cn是否正确?
[否]: y 正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):
CN=cheng, OU=byte, O=byte, L=nj, ST=nj, C=cn
输入 <key> 的密钥口令
(如果和密钥库口令相同, 按回车):
再次输入新口令:
[正在存储/Users/chengxinsong/key.jks] Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore /Users/chengxinsong/key.jks -destkeystore /Users/chengxinsong/key.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
chengxinsongdeMacBook-Pro:~ chengxinsong$

4、应用中引入keystore

在/android下新建key.properties的文件,其中包含对密钥库的引用:

storePassword=你输入的密码
keyPassword=你输入的密码
keyAlias=key
storeFile=/Users/你电脑名称/key.jks

5、在构建配置中添加签名

在/android/app/build.gradle文件做修改:

...
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" // 新增的内容
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android {
compileSdkVersion 28 ...
... defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.flutter_tester"
minSdkVersion 18
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
} // 新增内容 这块就是从
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
// 新增内容
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.release
}
}

现在应用打包的release版本将自动进行签名。

三、打包命令

然后打包命令,构建发布版(release)APK。如果您完成了前一节中的签名步骤,则会对APK进行签名。

使用命令行:

cd <app dir> (<app dir> 为您的工程目录).
运行flutter build apk (flutter build 默认会包含 --release选项).

打包好的发布APK位于/build/app/outputs/apk/app-release.apk。

四、包体积优化方法

发现flutter打包之后体积是有点大,我们来分析一下这个APK包的构成,我们主要来看不混淆的情况下。

全部内容可以点击以下链接查看:

http://www.chengxinsong.cn/post/110

https://github.com/saucxs/full_stack_knowledge_list/blob/master/article/flutter/flutter_build_apk.md

【手把手学习flutter】Flutter打Android包的基本配置和包体积优化策略的更多相关文章

  1. 【Mac + Appium + Python3.6学习(二)】之Android自动化测试,appium-desktop配置和简易自动化测试脚本

    上一篇文章介绍安装appium测试环境,这一片研究介绍如何测试Android自动化. 上一篇地址:<[Mac + Appium学习(一)]之安装Appium环境> 这一篇参考:<Ma ...

  2. Android studio 安装与配置【Android学习入门】

    终于下定决心认真学习Android开发了. 之前在很多平台看到很多大牛们学习Android的经验和心得,纸上得来终觉浅. 这里推荐stormzhang老师总结的Android学习之路. 为了防止电脑卡 ...

  3. Flutter学习(9)——Flutter插件实现(Flutter调用Android原生

    原文地址: Flutter学习(9)--Flutter插件实现(Flutter调用Android原生) | Stars-One的杂货小窝 最近需要给一个Flutter项目加个apk完整性检测,需要去拿 ...

  4. Flutter开发进阶学习指南Flutter开发进阶学习指南

    Flutter 的起源 Flutter 的诞生其实比较有意思,Flutter 诞生于 Chrome 团队的一场内部实验, 谷歌的前端团队在把前端一些"乱七八糟"的规范去掉后,发现在 ...

  5. Android 如何在Eclipse中查看Android API源码 及 support包源码

    当我们阅读android API开发文档时候,上面的每个类,以及类的各个方法都是已经写好的方法和控件,可是我们只是在搬来使用,不知道它的原理,它是如何被实现的.android系统是开源的,所以谷歌官方 ...

  6. 【转】Android 如何在Eclipse中查看Android API源码 及 support包源码

    原文网址:http://blog.csdn.net/vipzjyno1/article/details/22954775 当我们阅读android API开发文档时候,上面的每个类,以及类的各个方法都 ...

  7. Android Sip学习(三)Android Voip实现

    Android Sip学习(三)Android Voip实现   Android Sip学习(准备知识)SIP 协议完整的呼叫流程 Android Sip学习(一)Android 2.3 APIs S ...

  8. Flutter在Windows平台下的安装配置

    目录 1. 安装 Flutter SDK2. 设置环境变量3. Flutter doctor4. 安装 Android Studio5. 启动 Android Studio, 安装 Android S ...

  9. 学习使用Delphi for android 调用Java类库

    http://blog.csdn.net/laorenshen/article/details/41148253 学习使用Delphi for android 调用Java类库 2014-11-15 ...

随机推荐

  1. ajax传值出现乱码问题

    第一种:前台传值到后台,浏览器控制台打印正常,controller接收后成了乱码. 后台controller层加上两行转换代码 name=URLDecoder.decode(name,"ut ...

  2. 带货直播源码开发采用MySQL有什么优越性

    MySQL是世界上最流行的开源关系数据库,带货直播源码使用MySQL,可实现分钟级别的数据库部署和弹性扩展,不仅经济实惠,而且稳定可靠,易于运维.云数据库 MySQL 提供备份恢复.监控.容灾.快速扩 ...

  3. ant-design-vue 快速避坑指南

    ant-design-vue是蚂蚁金服 Ant Design 官方唯一推荐的Vue版UI组件库,它其实是Ant Design的Vue实现,组件的风格与Ant Design保持同步,组件的html结构和 ...

  4. leetcode76set-matrix-zeroes

    题目描述 给定一个m*n的矩阵,如果有一个元素是0,就把该元素所在的行和列上的元素全置为0,要求使用原地算法. 拓展: 你的算法有使用额外的空间吗? 一种比较直接的算法是利用O(m,n)的空间,但是这 ...

  5. Kafka 消费者及消费者分区策略

    消费方式: consumer 采用 pull(拉)模式从 broker 中读取数据. push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的. 它的目标是尽可能以最 ...

  6. dp背包 面试题 08.11. 硬币

    https://leetcode-cn.com/problems/coin-lcci/ 硬币.给定数量不限的硬币,币值为25分.10分.5分和1分,编写代码计算n分有几种表示法.(结果可能会很大,你需 ...

  7. 测试:OGG初始化同步表,源端抽取进程scn<源端事务的start_scn时,这个变化是否会同步到目标库中?

    一.测试目标 疑问,OGG初始化同步表,源端抽取进程开始抽取的scn<源端事务的start_scn时,这个变化是否会同步到目标库中? 二.实验测试 如下进行测试! session 1 SQL&g ...

  8. 在线动态修改ulimit

    前言 系统中有些地方会进行资源的限制,其中的一个就是open file的限制,操作系统默认限制的是1024,这个值可以通过各种方式修改,本篇主要讲的是如何在线修改,生产上是不可能随便重启进程的 实践 ...

  9. 手把手教你5分钟从零开发一款简易的IDEA插件!项目经验/毕设不愁了!

    我这个人没事就喜欢推荐一些好用的 IDEA 插件给大家.这些插件极大程度上提高了我们的生产效率以及编码舒适度. 不知道大家有没有想过自己开发一款 IDEA 插件呢? 我自己想过,但是没去尝试过.刚好有 ...

  10. CSS属性(CSS盒子模型)

    1.CSS盒子模型 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=&q ...