想要安装到手机上,必须要进行打包,因为没有苹果手机,所以只能打包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. python_并发编程——进程池

    1.进程池 from multiprocessing import Pool def func(n): for i in range(10): print(n+1) if __name__ == '_ ...

  2. PhpStudy升级MySQL版本到5.7

    1:备份当前数据库数据. 最好是导成 SQL 文件 2:备份 PhpStudy 下的 MySQL 文件夹.以防升级失败.还可以使用旧版本的数据库 3:下载MySQL5.7.解压.然后放在 PhpStu ...

  3. Python3基础学习-while循环实例- 猜数字游戏

    需求: 猜数字游戏, 要求如下: 给个数字, 比如是66. 让用户一直猜,直到猜对退出. 中间输入q或Q也能退出 如果猜大了,提示用户猜小一点; 如果猜小了,提示用户猜大一点; likely = 66 ...

  4. vue.js 常用指令用法

    v-if v-if指令可以完全根据表达式的值在DOM中生成或移除一个元素. 如果v-if表达式赋值为false,那么对应的元素就会从DOM中移除: 否则,对应元素的一个克隆将被重新插入DOM中,代码如 ...

  5. gcc的作用

    把代码编译成二进制文件 预处理----头文件,宏定义展开,条件编译 干掉注释代码 编译成汇编代码 生成目标代码.o (还不能执行) 链接(动态库)生成可执行程序 xxx.out 运行前,内存已经存在分 ...

  6. 201812-4 数据中心(kruskal)

    考场上的时候被题目完全蒙住了,当时状态也不好,前几次考试每次考试当天就头晕感冒流鼻涕 好的,以上都是借口,自己没有好好复习才是真的... 题目: 好的,以上题目简述就是:给你一个无向连通图,求它的最小 ...

  7. SIGAI机器学习第八集 数据降维1

    讲授数据降维原理,PCA的核心思想,计算投影矩阵,投影算法的完整流程,非线性降维技术,流行学习的概念,局部线性嵌入,拉普拉斯特征映射,局部保持投影,等距映射,实际应用 大纲: 数据降维问题PCA的思想 ...

  8. P4047 [JSOI2010]部落划分 并查集

    思路:并查集+生成树 提交:2次(虽然样例都没过但感觉是对的$QwQ$(判边少了一条)) 题解: 把所有点之间连边,然后$sort$一遍,从小往大加边,直到连第$n-k+1$条边(相当于是破话$k$个 ...

  9. jQuery.each(object, [callback])

    jQuery.each(object, [callback]) 概述 通用遍历方法,可用于遍历对象和数组.大理石平台检定规程 不同于遍历 jQuery 对象的 $().each() 方法,此方法可用于 ...

  10. Web service stop after running serveral hours

    Error Message: 1. Error:Web service call "Test" execution failed 2. Error:<CENTER>&l ...