flutter笔记5:官方资料搬运-安卓客户端打包
上一篇,使用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:\Applications\AndroidStudio\jre\bin\keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
注意,把路径中最后的java替换成keytool。
这时候会弹出一堆问询,小伙伴们按要求填写即可:
但是按要求操作的小伙伴并不能如愿以偿得到结果,由于当前的目录下没有写的权限,所以要找一个有写入权限的路径放置生成的KEY,于是上面的命令变成了:
E:\Applications\AndroidStudio\jre\bin\keytool -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" //APPID
minSdkVersion 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)
大家好,我是鱼丸,一个从事医疗IT近8年的普通从业者,想写点东西,作为自己多年行业工作成果的总结,希望能够帮助到新入行的小伙伴们,更轻快的了解HIS、了解HRP和行业相关的一些基础信息,帮助大家对HIS系统有一个较为全面的认识和了解,这是我的第一次写作,请大家多多包涵和指教。 HIS系统,全名Hospital Information System,具体解释请百度吧,这里就不复制粘贴了。从需求出发,我将简单介绍用户角色、场景用例和流程,让没有接触过HIS系统的小伙伴了解其背景和应用环境。本篇作为全系列的第一篇,来就从医院的职工开始,主要分析使用HIS系统(精致的那种,而非全套,由于个性化需...
燃烧的鱼丸新手菜鸟一枚,想从产品转入技术坑,目标:移动端APP开发。最近听技术达人 飞狐 说flutter beta发布了,支持跨平台APP开发,各种强大易上手,于是乎零基础入坑~话说想提高英文水平的同学,请移步flutter官网,从知道flutter到现在刚好24小时,在这里分享一点学习中遇到的小坑, 按官方套路安装: 1.下载flutter SDK: git clone https://github.com/flutter/flutter.git 什么? 不会git?请自行百度git安装教程,或者打开这里,直接下载sdk压缩包: 直接执行这个命令下载超慢,而且不停掉线,舍不得买代理翻墙的童鞋,...
燃烧的鱼丸因为,年初写的文章《刷遍朋友圈的2018年度计划 |努力实现100+个目标,我就是想要开挂的人生!》,没有想到会成为10万+的爆文,罗列的目标有些多,有些人质疑,我觉得这都是正常的,保持自己的节奏,做好自己就好! 但是我按照目标管理的方法进行整理,我提到了一点就是每个月会进行复盘,1月复盘已经进行,高质量的完成了不少小目标,而且一些小目标是超额完成的,比如一个月简书增粉1万+,喜欢2万+,一个月写出2篇10万+,详见:《1月再见,2月你好!自律的人生从走好每一步开始!》。 2月是农历春节,考虑到假期的因素,我制定了新的目标,比如说偏重家人目标的实现,结果又是超额完成,现在复盘如下,希望带...
晓多我出生在一个很普通的家庭,父母都是地道的农民,他们希望我通过读书出人头地,改变命运。 然而,我却让他们非常失望了。因一些特殊情况,我没有读完高中,便从此离开了校园,踏入社会,从此学历成了我最大的短板。 没有学历,我在社会上碰了不少壁。加上没有技能,我只能做着底层的工作:进过工厂、做过服务员······ 因为工资太少,生活拮据到难以想象的地步。 我曾经每天早上只吃一块钱的包子,宁愿多走三站路都不愿多花1元钱转公交车,每天中午大多是吃盒饭和凉皮米线,晚上则是麻辣烫或炒饭,一天生活费不足十元······ 深夜走在偌大的城市里,心灵没有栖息之处,我像是流浪他乡的游子,孤独无助,如同坠入万丈深渊。...
一河漪沫一辈子很长,谢谢我们还没有走散。 2018年3月15日 星期四 多云 文/杨小蟹 1 今天,我在高铁上写完这篇文章,耳机里一直单曲循环孟凡明的《只只》: 是时候和你决定即便匆忙去远行在山野间追风去看遍世界黄昏与黎明 特别特别喜欢这首歌,每句歌词都能唱到我心里。 民谣和旅行,在我心里都一样重要,缺少哪一样都会是人生一大缺憾。 一年仅此一次的旅行,我不想错过,不想虚度光阴,即便是独自一人,也要让生命流动起来。 我们还年轻,不怕失败,不怕迷茫,不怕孤单,每一次启程,都是一次更好的开始。 去见一些人,讲一些故事。 你听吗?留下来吧。 2 故事,得先说港姐。 原本计划十月休假的他,知道我三月底休假...
杨小蟹用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
服务器https配置 配置https操作说明文档 1、查看服务器环境配置(tomcat和apache合并使用) 2、先链接服务器ssh -t root@ip 3、服务器Apache路径 :/opt/gitlab-8.13.3-0/apache2 tomcat路径:/home...
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
>node的版本要求大于6 >npm install -g cordova ionic ## Build Setup # 安装依赖: npm install或cnpm install # 如果npm安装依赖报错,改cnpm(淘宝镜像)安装 # 启动项目: ionic ser...
考了两年,走过很多弯路,有学弟学妹来问经验,所以就写一份文字版的吧。 【英语】 英语是刷人的科目,很多人专业课、政治均过档但因为英语不过线所以成为炮灰,我第一年就是英语差两分过线。所以英语这块,一定要慎重,要多下功夫,不管你基础怎么样好,切不可掉以轻心。 1.单词。 单词是...
大家好,我是优弹素志茵vx:swiyll,优弹素明确规定不在淘宝、京东、咸鱼等任何第三方平台售卖的,优弹素盒子上面也是有明确标示的。既然朋友你看到了这篇文章,说明你朋友圈已经有正规代理在售卖优弹素了哦。 看到朋友在代理,找朋友购买谁再放心不过的事情了。吃进肚子里的东西,在优...
这几天,一个16岁的00后又被刷屏了。起因是一个脱口秀节目,16岁的喻言以一个00后ceo的身份首个亮相,说她有个市值1250万的公司广州诺亚科技有限公司,她是这家公司的ceo。但是随后几句话,让成年人直接给跪了: 当我拿几十万上百万的投资和奖金的时候,很多成年人还在…… ...
雨淅淅,花儿在沐浴,草也在沐浴,我在想和你表达,倚在窗前,思考,该怎么告诉你?我想和你好。 抚平你心中的伤口,那一段早已是回忆,在漫长的人生路上,一刻也不要注定谁是陪你到老的那个人,因为还没到尽头,随时可以离去,在某处望着,担心着,牵挂着,即是不见面,我也是心满意足了...
其实生活很简单,一个人一生没多少时间 时间总是过得很快,在我们没做好准备的时候悄悄溜走,前面围绕学校,后面围绕家庭。偶尔想疯狂,还得看情况,并不能随心所欲。经常会为了自己的选择,决定而后悔,但大多都于事无补,只能一直向前,头破血流也要坚持…… so保持乐观的心态,不需要想那...
app name 好评
这坑也太多了!
配置后之后不能build,o(╥﹏╥)o
提示: Oops; flutter has exited unexpectedly.
将 配置key注册-替换成 跳过就可以了,不知道有什么问题