想要安装到手机上,必须要进行打包,因为没有苹果手机,所以只能打包Android客户端的apk。

检查 App的配置

查看默认应用程序清单文件(位于/android/app/src/main/中的AndroidManifest.xml文件),并验证这些值是否正确,特别是:

android:label 这个是打包的项目名称
android:icon 这个是打包生成的图标,可以替换或者改名字

创建 keystore

官方文档上写的是,请通过在运行以下命令来创建一个: keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

但是我们敲了以后会报错,按提示运行 flutter doctor 还是没看到症结所在。后来看了别人的踩坑文档,应该是运行:

flutter doctor -v

可以看到以下一些代码:

找到上图Java binary at: 后面的地址,然后复制到官方命令的前面位置,如下:

D:\Program Files\Android\Android Studio\jre\bin\keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize  -validity  -alias key

回车后发现还是报错,后来发现是路径上不能有空格,如果有空格的话,要加引号括起来:

D:\'Program Files'\'Android\Android Studio'\jre\bin\keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize  -validity  -alias key

注意:~/key.jks 是Key所要存储的位置,可以改为你现有的盘符路径,比如:d:\key.jks 或 e:\key.jks

D:\'Program Files'\Android\'Android Studio'\jre\bin\keytool -genkey -v -keystore e:\key.jks -keyalg RSA -keysize  -validity  -alias key

回车后会让你输入密钥库口令,这个可以随便输入,后面按提示操作就可以了。

引用应用程序中的keystore

在android目录下创建一个名为 key.properties 的文件,里面复制下面内容:

//比如你的密钥口令是123456
storePassword= //密钥口令
keyPassword= //密钥口令
keyAlias=key
storeFile=E:/key.jks //存放密钥的位置

注意: 保持文件私密; 不要将它加入公共源代码控制中

在gradle中配置签名

通过编辑android/app/build.gradle文件为应用配置签名

1、替换

找到android{...},然后在上面添加以下代码:

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

2、替换

找到buildTypes{...},然后整个替换为以下代码:

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

现在,您的应用的release版本将自动进行签名。

构建一个发布版(release)APK

现在准备工作都差不多完成,可以进行打包了。输入命令:

flutter build apk

稍等一会儿时间就会提示打包完成了,并告诉你apk存放的位置。

然后就可以进行真机安装,或者分享了。

补充打包bug:

https://www.cnblogs.com/joe235/p/11492273.html

Flutter安卓客户端打包的更多相关文章

  1. 大富豪APK安卓客户端的反编译修改和重新打包

    大富豪APK安卓客户端的反编译修改和重新打包 修改安装我们需要几个工具 DFH_3.4.X  (用于修改客户端) dnsPy        (用于修改.dll文件) 大富豪加解密.exe  ( 用于加 ...

  2. 安卓客户端a标签长按弹框提示解决办法

    昨天工作时候发现一个bug,是关于a标签的,在安卓客户端中,如果是a标签的话,长按会出现一个弹框,如图所示 是因为安卓客户端的长按触发机制,以后进行wap端开发的时候,如果用到跳转页面尽量不要用a标签 ...

  3. 【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

    NetworkComms网络通信框架序言 用c#开发安卓程序 (xamarin.android)系列之三 源码(包含客户端与服务器端所有工程文件)    数据库文件 为了方便您测试,我临时搭建了一个服 ...

  4. .net和java和谐相处之安卓客户端+.net asp.net mvc webapi 2

    作为没有花很多时间转java,把java当C#用的我,在做服务器端程序的时候,自然不想考虑java web,java需要学的框架太多了,看了一下Java Servlet,始终没有编码的冲动.经过几天的 ...

  5. XMPP(二)-基于asmack+openfire的安卓客户端(仿QQ)的介绍以及个人心得

    关于XMPP第一篇-openfire的搭建写完后,就一直在赶本篇所要介绍的这个基于asmack+openfire的安卓客户端,费了不少精力,因为有不少同学在还在焦急的等待着(自恋了呵呵),所以紧赶慢赶 ...

  6. WebSocket安卓客户端实现详解(三)–服务端主动通知

    WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...

  7. js判断安卓客户端或者是ios客户端,是否是微信浏览器

      代码: function xaizai() {  var u = navigator.userAgent, app = navigator.appVersion;  var isAndroid = ...

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

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

  9. Flutter Android 正式打包、以及升级应用 重新打包

    Flutter Android 正式打包 打开androidStudio软件 1.修改版本号. android->app->src->main->AndroidManifest ...

随机推荐

  1. gitlab-ce白名单设置杜绝并发数过大引起的封ip故障

    gitlab-ce 7.9安装手札以及上篇文章的问题解决 鸣谢 感谢ruby大神===>章鱼的一路指点,才能拨开迷雾见云天! 章鱼大人: 国内Ansible部落原创翻译之一! 资深运维! ROR ...

  2. 实例化Vue时的两种挂载方式el与$mount

    el 与mount 都是挂载. el vue官网的介绍https://cn.vuejs.org/v2/api/#el mount vue官网的介绍 https://cn.vuejs.org/v2/ap ...

  3. - The superclass "javax.servlet.http.HttpServlet" was not found on the Java

    网上有很多解决方法,如这种 下面是具体的解决方法:1.右击web工程->属性或Build Path->Java Build Path->Libraries-> Add Libr ...

  4. 执行mysql脚本文件

    一般都是连接mysql执行sql语句: 在命令行下输入 mysql -h localhost -u root -p回车,然后输入密码即可; 或直接运行mysql自带的连接工具,然后输入密码即可. 执行 ...

  5. CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths (dsu on tree) 题解

    先说一下dsu算法. 例题:子树众数问题. 给出一棵树,每个点有点权,求每个子树中出现次数最多的数的出现次数. 树的节点数为n,\(n \leq 500000\) 这个数据范围,\(O(n \sqrt ...

  6. MySQL 中索引的长度的限制

    单列索引的长度的限制 (5.6里面默认不能超过767bytes,5.7不超过3072bytes): 起因是256×3-1=767.这个3是字符最大占用空间(utf8).但是在5.5以后,开始支持4个字 ...

  7. 正则regex

    Regual expression 普通正常字符 字符匹配 . 表示任意字符 匹配次数 位置锚定 分组及引用

  8. cyk追楠神系列一(SDUT3703)

    cyk追楠神系列一 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 众所周知,cyk ...

  9. Selenium处理授权框,登录框,握手框

    在Web自动化中,常常遇到三种弹框: JavaScript警告框,如alert,confirm,prompt等,如下图: 处理方法为driver.switch_to.alert().dismiss() ...

  10. 十六、程序包管理之 rpm

    c语言程序的构建过程 1.程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接--> 可执行程序 开放源码:就是程序码,文本格式的源代码,写给人类看的程序 ...