关注「松宝写代码」,回复“加群”
加入咱们一块儿学习,每天向上html
由于最近参加2020FEHackson,有个项目须要要快速上线,把打包过程和遇到的问题作个记录。android
在本地开发中,使用flutter run命令仍是Android studio运行或者调试,flutter构建的是debug版本,也就是本地调试右上角出现debug标志。git
当本地调试OK后,准备release版本,好比发布到应用商城,或者交付用户使用。github
在
在
建立keystore,若是以前已经建立过keystore,那就跳过,若是没有建立过,继续来看。工具
建立一个keystore,执行命令:post
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中。gradle
下面是详细的执行过程
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$
在
storePassword=你输入的密码 keyPassword=你输入的密码 keyAlias=key storeFile=/Users/你电脑名称/key.jks
在
... 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位于
发现flutter打包以后体积是有点大,咱们来分析一下这个APK包的构成,咱们主要来看不混淆的状况下。
所有内容能够点击如下连接查看:
http://www.chengxinsong.cn/post/110
https://github.com/saucxs/full_stack_knowledge_list/blob/master/article/flutter/flutter_build_apk.md
字节跳动(社招)内推:
关注公众号「松宝写代码」,公众号后台回复「加群」 加入咱们一块儿学习。