zoukankan      html  css  js  c++  java
  • 【手把手学习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

    字节跳动(社招)内推:

    关注公众号「松宝写代码」,公众号后台回复「加群」 加入我们一起学习。

  • 相关阅读:
    模板网站
    用servlet和jsp做探索数据库
    Hibernate和jsp做数据库单表的增删改查
    拦截器
    校验器-对提交的用户名和密码进行过滤
    使用my exclipse对数据库进行操作(4)
    如何正确关闭游戏服务器
    Ehcache 入门详解
    自动重置 Language Level默认为5与 Java Complier默认为1.5
    洪均生谈初学者练习(怎样认识太级拳和怎样进行练习)
  • 原文地址:https://www.cnblogs.com/chengxs/p/14091586.html
Copyright © 2011-2022 走看看