【手把手学习flutter】Flutter打Android包的基本配置和包体积优化策略
【手把手学习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包的基本配置和包体积优化策略的更多相关文章
- 【Mac + Appium + Python3.6学习(二)】之Android自动化测试,appium-desktop配置和简易自动化测试脚本
上一篇文章介绍安装appium测试环境,这一片研究介绍如何测试Android自动化. 上一篇地址:<[Mac + Appium学习(一)]之安装Appium环境> 这一篇参考:<Ma ...
- Android studio 安装与配置【Android学习入门】
终于下定决心认真学习Android开发了. 之前在很多平台看到很多大牛们学习Android的经验和心得,纸上得来终觉浅. 这里推荐stormzhang老师总结的Android学习之路. 为了防止电脑卡 ...
- Flutter学习(9)——Flutter插件实现(Flutter调用Android原生
原文地址: Flutter学习(9)--Flutter插件实现(Flutter调用Android原生) | Stars-One的杂货小窝 最近需要给一个Flutter项目加个apk完整性检测,需要去拿 ...
- Flutter开发进阶学习指南Flutter开发进阶学习指南
Flutter 的起源 Flutter 的诞生其实比较有意思,Flutter 诞生于 Chrome 团队的一场内部实验, 谷歌的前端团队在把前端一些"乱七八糟"的规范去掉后,发现在 ...
- Android 如何在Eclipse中查看Android API源码 及 support包源码
当我们阅读android API开发文档时候,上面的每个类,以及类的各个方法都是已经写好的方法和控件,可是我们只是在搬来使用,不知道它的原理,它是如何被实现的.android系统是开源的,所以谷歌官方 ...
- 【转】Android 如何在Eclipse中查看Android API源码 及 support包源码
原文网址:http://blog.csdn.net/vipzjyno1/article/details/22954775 当我们阅读android API开发文档时候,上面的每个类,以及类的各个方法都 ...
- Android Sip学习(三)Android Voip实现
Android Sip学习(三)Android Voip实现 Android Sip学习(准备知识)SIP 协议完整的呼叫流程 Android Sip学习(一)Android 2.3 APIs S ...
- Flutter在Windows平台下的安装配置
目录 1. 安装 Flutter SDK2. 设置环境变量3. Flutter doctor4. 安装 Android Studio5. 启动 Android Studio, 安装 Android S ...
- 学习使用Delphi for android 调用Java类库
http://blog.csdn.net/laorenshen/article/details/41148253 学习使用Delphi for android 调用Java类库 2014-11-15 ...
随机推荐
- Arduino IDE搭建ESP8266开发环境,文件下载过慢解决方法 | ESP-01制作WiFi开关教程,改造宿舍灯
1. Arduino IDE配置ESP8266环境 参考:https://www.jianshu.com/p/cb0274d612b5 首先从 Arduino 官网 下载最新版本的 Arduino I ...
- Python替换字符串中的空格
这是来源剑指offer的第二题,直接调用replace函数进行空格替换即可. 当我又想试试挨个字符比较进行替换时程序报错了: 错误原因是在python中字符串是一个不可变的数据类型,如果进行替换字符可 ...
- 剑指Offer-Python(21-25)
21.栈的压入和弹出序列 新建一个栈,将数组A压入栈中,当栈顶元素等于数组B时,就将其出栈,当循环结束时,判断栈是否为空,若为空则返回true. class Solution: def IsPopOr ...
- 把数据转化为JSON格式用ajax进行前后端交互
接着在https://www.cnblogs.com/dong973711/p/10907733.html的基础上做验证. 从前端提交数据 前端页面,submit.html <!DOCTYPE ...
- python3批量修改文件后缀名
import os # 原文件后缀名 suffix_name = '.jar.src.zip' # 新文件后缀名 nwe_suffix_name = '.jar' def foo(path1): fi ...
- 中科图新成为Bentley产品培训合作伙伴!质量服务双升级
中科图新从2016年起开办ContextCapture产品培训,目前已累计培训了500多家企事业单位,涉及传统测绘单位.无人机航测.规划设计.建筑工程.水利.电力.交通.文保等十多个行业.实力过硬,口 ...
- Docker - 解决运行容器报 WARNING: IPv4 forwarding is disabled. Networking will not work. 的问题
问题背景 执行运行容器的命令 docker run -d -uroot -p 8080:8080 --name jenkins2 -v /var/jenkins_node/:/var/jenkins_ ...
- 利用Github Action和.Net 5 自动执行米游社原神每日签到福利
GenshinDailyHelper 原神的签到福利是需要单独下载APP进行才可以领取,并且每天需要打卡,虽然奖励并不是很可观,但有一些摩拉,食材和可观的经验书累计起来还是挺有吸引力的.可能本身不怎么 ...
- python之路《模块》
1.time模块 FUNCTIONS asctime(...) asctime([tuple]) -> string Convert a time tuple to a string, e.g. ...
- innodb之线程及IO相关参数介绍
引用链接:http://www.cnblogs.com/henglxm/p/4284504.html 1.IO THREAD: 负责IO的相关线程IO THREAD 1. 参数innodb_wri ...