前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【手把手学习flutter】Flutter打Android包的基本配置和包体积优化策略

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

作者头像
huofo
发布2022-03-17 09:24:34
1.8K0
发布2022-03-17 09:24:34
举报
文章被收录于专栏:huofo's blog

【手把手学习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,执行命令:

代码语言:javascript
复制
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中。

下面是详细的执行过程

代码语言:javascript
复制
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的文件,其中包含对密钥库的引用:

代码语言:javascript
复制
storePassword=你输入的密码
keyPassword=你输入的密码
keyAlias=key
storeFile=/Users/你电脑名称/key.jks

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

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

代码语言:javascript
复制
...
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进行签名。

使用命令行:

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【手把手学习flutter】Flutter打Android包的基本配置和包体积优化策略
    • 前言
      • 一、背景
        • 二、前期检查工作
          • 1、检查AndroidManifest配置
          • 2、查看构建配置
          • 3、app签名
          • 4、应用中引入keystore
          • 5、在构建配置中添加签名
        • 三、打包命令
          • 四、包体积优化方法
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档