上一篇,使用material原生控件完成了人生的一个用flutter开发的APP,这两天为了理解flutter,翻了很多资料,信息量太大,烧了不少脑子,今天这篇就简单点,实战走一下安卓客户端的打包流程,看看会遇到什么问题。想查看官方资料的请移步Preparing an Android App for Release。

第一步

首先,你需要找到这几个路径下的文件,并配置其中的几个参数:

配置APP图标

进入这个路径:

  • 项目目录/android/app/src/main/res/

看到很多个以mipmap-为前缀命名的文件夹,文件夹名称的后缀是对应的APP图标像素密度:

mdpi(中)~160dpi
hdpi(高)~240dpi
xhdpi(超高)~320dpi
xxhdpi(超超高)~480dpi
xxxhdpi(超超超高)~640dpi

将对应像素密度的图片放入对应的文件夹中,图片记得用png格式,安装的APP会根据对应的屏幕像素密度使用适应尺寸的图标,但要注意,APP图标文件最好统一使用同一个名字,方便后面配置。

配置APP名称、图标和系统权限

  • 项目目录/android/app/src/main/AndroidManifest.xml

application标签内部:

android:label="myflutter"   //此属性为你的APP安装到手机上显示的名称,支持中文,所以取名的时候请浪一点~
android:icon="@mipmap/ic_test"  //此属性为APP图标用到的图片文件名称
//这里图片文件不需要输入文件格式后缀,前面说过的要使用相同文件名,因为这里并没有按像素密度分别配置对应的图片文件

uses-permission标签,此标签定义APP的系统权限,比如打开麦克风摄像头啦、获取联系人号码簿啦、是否允许上网等等等,权限有很多,具体请参考翻墙官网。在这里,默认配置了一个android:name="android.permission.INTERNET"的权限,意思是允许手机联网,因为flutter和APP交换数据需要用到这个权限。

第二步

APP注册

生成keystore

官方写的很简单,终端下输入命令即可获取:

keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

然而实际上的效果是:

然后官方note了一下,说可能会因为找不到keytool而报错,叫我们输入flutter doctor命令,从结果的Java binary at:中找到keytool.exe文件路径再执行上面的命令,然而我使用了N次flutter doctor也没找到Java binary at:

正确的打开方式是输入下面这个命令:

flutter doctor -v

然后你看到的结果是:

啊喂~那个官方文档是不是忘了更新啦。

然后我们复制上图中的路径,输入这个命令:

E:ApplicationsAndroidStudiojrebinkeytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

注意,把路径中最后的java替换成keytool

这时候会弹出一堆问询,小伙伴们按要求填写即可:

但是按要求操作的小伙伴并不能如愿以偿得到结果,由于当前的目录下没有写的权限,所以要找一个有写入权限的路径放置生成的KEY,于是上面的命令变成了:

E:ApplicationsAndroidStudiojrebinkeytool -genkey -v -keystore /E:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

注意看~/key.jks改成了/E:/key.jks,于是乎:

然后到E盘根目录下可以发现多了一个key.jks文件,记住:不要把这个jks文件共享给任何人!!不要把这个jks文件共享给任何人!!不要把这个jks文件共享给任何人!!尤其是只图方便把源码一股脑签入github的XX,如果是为公司做的APP,后果自己想~。

这时候到项目目录的android文件夹下创建一个名为key.properties的文件,并打开贴入以下代码:

storePassword=<password from previous step>    //输入上一步创建KEY时输入的 密钥库 密码
keyPassword=<password from previous step>    //输入上一步创建KEY时输入的 密钥 密码
keyAlias=key
storeFile=<E:/key.jks>    //key.jks的存放路径

这个key.properties文件也不要共享出去!!

配置key注册

进入项目目录的/android/app/build.gradle文件,在android {这一行前面,加入如下代码:

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

把如下代码:

buildTypes {release {signingConfig signingConfigs.debug}
}

替换成:

signingConfigs {release {keyAlias keystoreProperties['keyAlias']keyPassword keystoreProperties['keyPassword']storeFile file(keystoreProperties['storeFile'])storePassword keystoreProperties['storePassword']}
}
buildTypes {release {signingConfig signingConfigs.release}
}

defaultConfig中,录入APPID和版本号,版本号命名控制参考翻墙吧你少年:

defaultConfig {applicationId "com.example.myflutter"  //APPIDminSdkVersion 16  //可运行应用的最低版本的 Android 平台,由该平台的 API 级别标识符指定targetSdkVersion 27  //指定运行应用的目标 API 级别。在某些情况下,这允许应用使用在目标 API 级别中定义的清单元素或行为,而不是仅限于使用那些针对最低 API 级别定义的元素或行为。versionCode 1    //内部版本号versionName "1.0"  //对外公布的版本号testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}

第三步

编译生成apk文件

到终端中输入如下命令:

flutter build apk

耐心等待执行完毕后你会看到:

然后到图中标识的路径下,找到生成apk文件,即打包完成了,你也可以在终端输入命令安装APP:

flutter install

安装时,会把原来调试运行安装的APP卸载掉,重新安装新的APP:

然后看手机上:

O了,今天的搬运到此完毕,走过一遍流程下来发现官网文档可能没及时更新,导致我踩了几个坑,不过总体来说还比较简单,大家可以自己搞搞试试,就到这里,补瞌睡去~
flutter 中文社区(官方QQ群:338252156)

flutter笔记5:官方资料搬运-安卓客户端打包相关推荐

  1. .Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译

    原文:.Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译 apk(android package)就是我们安卓系统的安装文件,可以在模拟器和手机中直接打开安装,从项目中打包 ...

  2. FishRedux完成一个玩安卓客户端

    文章目录 FishRedux完成一个玩安卓客户端 前言 基本架子 页面预览 路由定义: 首页 view and so on 定义自己的TabController 页面保活 Adapter写法 adap ...

  3. 安卓端和服务器端通信协议,安卓客户端和服务器如何通信协议

    安卓客户端和服务器如何通信协议 内容精选 换一换 华为云ROMA Connect服务帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助 ...

  4. 安卓连接mysql客户端_安卓客户端与mysql服务器端数据交互

    1.安卓客户端的配置(上传数据) package com.dlvtc.upphp; import java.io.IOException; import java.io.UnsupportedEnco ...

  5. 封装一个类搞定90%安卓客户端与服务器端交互

    本实例封装了一个处理安卓客户端与服务器端交互的几个方法,对于中文乱码问题本实例也找到了解决方案.本例可以处理的场景如下: 1.与服务器端交互json数据. 2.Get方式与服务器端交互数据. 3.Po ...

  6. php安卓交互安全,php结合安卓客户端实现查询交互实例

    本文给大家分享的是php结合安卓客户端实现查询交互实例,java端主要分三步来实现:首先进行 http request.网络请求相关操作,第二步,使用execute方法发送HTTP GET请求,并返回 ...

  7. WebSocket安卓客户端实现详解(一)–连接建立与重连

    http://blog.csdn.net/zly921112/article/details/72973054 前言 这里特别说明下因为WebSocket服务端是公司线上项目所以这里url和具体协议我 ...

  8. 安卓选择多张图片上传_微信7.0.5更新!安卓客户端领先ios发布,新增多项实用功能...

    微信前段时间更新频繁,大大小小的更新,使得微信的UI设计整体风格都变得更加简洁起来,还新增了不少功能,非常实用.由于更新的功能比较多,很多人表示新功能还没完全摸透,但是微信可不给你更多时间,最新消息显 ...

  9. flutter笔记:使用flutter webvie

    flutter笔记:使用flutter webvie 作者: jcLee95 CSDN 主页:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001. ...

最新文章

  1. AIoT成功的关键要素
  2. ios 仿电脑qq登录界面_1、IOS开发--iPad之仿制QQ空间(登录界面搭建+登录逻辑实现)...
  3. 如何查看笔记本电脑配置参数_2020双十一(小白/学生)如何选购笔记本电脑?5000元预算哪款笔记本配置值得入手?...
  4. SpringBoot------异步任务的使用
  5. 干货 | 谈谈我是如何入门这场 AI 大赛的
  6. pdf转换为word小工具,挺好
  7. UVA - 400:Unix ls
  8. 知识图谱论文阅读(九)【转】推荐系统遇到知识图谱之MKR模型
  9. PHP 01 Apache HTTP
  10. 10人勾结苹果外包公司员工窃个人信息 涉案900万
  11. 全程软件测试之测试需求分析与计划(3)
  12. 37. customer payment(1)
  13. offer拿到手软,java分布式面试题及答案
  14. 计算机二级c语言的书籍,全国计算机二级c语言
  15. 单因素方差分析(R)
  16. java sqlite sqlite_busy_SQLite 关闭时SQLITE_BUSY
  17. 前端js获取文件名、后缀,截取文件名后缀
  18. 伴娘礼服上的年华(五)
  19. Java基础学习笔记(十)——常用API(3)
  20. PTA 7-47 打印选课学生名单

热门文章

  1. 动量投资组合构建_如何创建吸引合适类型客户的投资组合(内部排名前5位的投资组合构建商)
  2. 数据库表设计必需元素_HTML5输入,必需,模式,数据列表
  3. 关于Firefox插件
  4. Java入门教程:Java初学者容易犯的错误
  5. 人工智能学习该读哪些书籍?
  6. Delete与Top连用限制删除行
  7. Linux拷贝文件夹
  8. 3.5框架不能创建就加这一段代码
  9. ubuntu下设置Android手机驱动
  10. How to Install Ruby on Rails on CentOS 6