AndroidStudio中Flutter打包APK

1、生成签名文件

在打包之前我们需要一个签名文件,证明文件的唯一性。

keytool -genkey -v -keystore F:\APP\sign.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sign

F:\APP\sign.jks为签名问价存放目录,sign 为密钥名。

后面都有用,请牢记。

在控制台输入上方指令后,会依次让你输入密钥库口令、姓氏、组织机构等等,下方是我的截图:

查看证书SHA1:

keytool -list -v -keystore F:\APP\sign.jks -alias sign -storepass 123456 -keypass 123456

其中 sign、storepass、keypass 分别为: 别名、密钥库密码、 sign文件密码

2、Android Studio 配置

2.1、导入sign.jks

在Flutter工程中/android/app/key/sign.jks创建该目录。
要在app目录下创建key文件夹,然后把sign.jks拖进来。

如图所示:

2.2、创建key.properites

在Flutter工程中/android/key.properites创建该文件。
里面内容如下:

storePassword=123456
keyPassword=123456
keyAlias=sign
storeFile=key/sign.jks 

2.3、配置/android/app/build.gradle文件

需要修改 app 包下的 build.gradle 文件,增加如下配置:

android {signingConfigs {release {keyAlias 'sign'keyPassword 'android'storeFile file('key/sign.jks')storePassword 'android'}}buildTypes {release {signingConfig signingConfigs.release}}
}

完整的代码:

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {localPropertiesFile.withReader('UTF-8') { reader ->localProperties.load(reader)}
}def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {flutterVersionCode = '1'
}def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {flutterVersionName = '1.0'
}apply plugin: 'com.android.application'
apply from"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"android {compileSdkVersion 28lintOptions {disable 'InvalidPackage'}defaultConfig {applicationId "sscai.club.flutter_shop"minSdkVersion 16targetSdkVersion 28versionCode flutterVersionCode.toInteger()versionName flutterVersionNametestInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}/*针对打包新加的*/signingConfigs {release {keyAlias 'sign'keyPassword '123456'storeFile file('key/sign.jks')storePassword '123456'}}/*针对打包新加的*/buildTypes {release {signingConfig signingConfigs.release}}
}flutter {source '../..'
}dependencies {testImplementation 'junit:junit:4.12'androidTestImplementation 'com.android.support.test:runner:1.0.2'androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

项目目录:

3、打包APK

在当前项目目录的终端中执行:flutter build apk

或者直接在 Android Studio 的 Terinal 执行命令:

生成的目录:当前项目\build\app\outputs\apk\release\xx.apk

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces #471

C(分段) 题意: 分析: 我们分别考虑p2和p>3的情况  当p2的时候,个数明显是[L,R]内完全平方数的个数 当p>3的时候,我们注意到这样的数字个数是1e6级别的,且a最多也不超过1e6 我们可以对于每个a去枚举对应的p&…

Thinkpad Access Connections实现快速的在各种网络间进行切换

Thinkpad Access Connections快速的在各种网络间进行切换因为工作的原因要经常在多个无线或有线之间切换,每次要切换到不同的固定IP地址的网络更是一种折磨,换一次就要从新输入一次IP地址,Windows下有没有像Linux的NetworkManage那样的网络管…

TextView does not support text selection. Selection cancelled. 。TextViews复制文本失效解决方法

解决方法 前人种下了种子—— android:descendantFocusability"blocksDescendants" 去掉这个属性即可

15-Flutter移动电商实战-商品推荐区域制作

1、推荐商品类的编写 这个类接收一个List参数,就是推荐商品的列表,这个列表是可以左右滚动的。 /*商品推荐*/class Recommend extends StatelessWidget { final List recommendList; Recommend({Key key, this.recommendList}) : super(key: key);} 2…

Python无法导入Cython的.pyx文件

在import 相应包之前, 添加: import pyximport pyximport.install() 即可. 转载于:https://www.cnblogs.com/ZhengPeng7/p/8706657.html

gradle sync failed——Android studio 突然就无法自动下载gradle了

不知道按到了什么鬼,或者新安装了Android studio 无法使用 正常gradle文件位置是不需要修改的 android studio会自动配置 出现这个错误,就需要收到补全gradle文件路径配置即可 1、查看项目gradle版本 2、补全即可——加上后面这段对应项目里的版本的文件…

16-Flutter移动电商实战-切换后页面状态的保持AutomaticKeepAliveClientMixin

底栏切换每次都重新请求是一件非常恶心的事,flutter 中提供了AutomaticKeepAliveClientMixin 帮我们完成页面状态保存效果。 1、AutomaticKeepAliveClientMixin AutomaticKeepAliveClientMixin 这个 Mixin 是 Flutter 为了保持页面设置的。哪个页面需要保持页面状态…

js ejs for语句的第二种遍历用法

var A {a:1,b:2,c:3,d:"hello world"};for(var k in A) {console.log(k,A[k]);var h new EJS({element:ejs_render_id}).render(render);}return;转载于:https://www.cnblogs.com/pansidong/p/8708245.html

Android 串口开发——粘包解决方法,定时查询心跳数据,解析心跳数据。——持续更新中

粘包解决方法 方法1 getXOR——是校验方法 /*** 最小数据包的长度(除开数据的N个字节)* 帧头 保留字节 协议控制字 地址字段 命令长度 命令码 命令数据 校验和* 2字节 3字节 1字节 2或8字节 2字节 2字节 0-1100字…

17-Flutter移动电商实战-首页_楼层区域的编写

1、楼层标题组件 该组件非常简单,只接收一个图片地址,然后显示即可: class FloorTitle extends StatelessWidget {final String picture_address;FloorTitle({this.picture_address});overrideWidget build(BuildContext context) {return …

webdriver高级应用- 无人工干预地自动下载某个文件

在网页上下载文件时,通常需要人为设定下载文件并选择保持路径,这样就无法实现完全自动的下载过程。下面实现基于firefox浏览器的全自动化文件下载操作: #encodingutf-8 from selenium import webdriver import unittest, timeclass TestDemo(…

Android 使用mqtt实例,包括接收服务器推送以及上传数据到服务器

1、最方便的方法,使用dlc的module连接mqtt 步骤、1——导入dlc依赖和module //dlc_mqttmodule implementation project(:garbagerecyclebox)//dlc公库 implementation(com.github.DlcAndroidTeam123456:DlcCommonLibrary:1.0.31-simple) {exclude group: me.yokeyw…

18-Flutter移动电商实战-首页_火爆专区商品接口制作

1、获取接口的方法 在service/service_method.dart里制作方法。我们先不接收参数,先把接口调通。 Future getHomePageBeloConten() async{try{print(开始获取下拉列表数据.................);Response response;Dio dio new Dio();dio.options.contentTypeConten…

IIS Server Farms入门

概念了解 IIS Server Farms,实际上应该叫“Microsoft Web Farm Framework (WFF)”,依赖于“Web Platform Installer”才能安装,依赖于WebDeploy组件。可参见 Web Farm Framework Setting up a Server Farm with the Web Farm Framework 2.0 f…

flutter中的异步机制Future

饿补一下Flutter中Http请求的异步操作。 Dart是一个单线程语言,可以理解成物理线路中的串联,当其遇到有延迟的运算(比如IO操作、延时执行)时,线程中按顺序执行的运算就会阻塞,用户就会感觉到卡顿&#xff0…