当前位置: 首页 > news >正文

如何在Android Studio上发布Flutter应用

发布Flutter应用到Android平台是一个多步骤的过程,涉及配置应用、生成签名密钥、配置Gradle文件、构建发布版本APK等步骤。本文将详细介绍这些步骤,帮助你顺利发布Flutter应用。

1. 准备你的应用

在发布之前,确保你的应用在开发环境中运行良好,所有功能都已测试通过。

2. 更新应用版本信息

打开 pubspec.yaml 文件,更新应用的版本信息:

version: 1.0.0+1

1.0.0 是应用的版本号,+1 是构建号。你可以根据需要进行修改。

3. 配置 build.gradle 文件

打开 android/app/build.gradle 文件,确保以下配置正确:

android {compileSdkVersion 33defaultConfig {applicationId "com.example.your_app_name"minSdkVersion 21targetSdkVersion 33versionCode 1versionName "1.0"}signingConfigs {release {keyAlias keystoreProperties['keyAlias']keyPassword keystoreProperties['keyPassword']storeFile file(keystoreProperties['storeFile'])storePassword keystoreProperties['storePassword']}}buildTypes {release {// 启用代码压缩和资源缩减minifyEnabled trueshrinkResources true// 使用混淆文件proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'signingConfig signingConfigs.release}}
}
好的,继续完成这篇文章。---## 4. 生成签名密钥为了在发布时签名你的应用,你需要生成一个签名密钥。### 生成签名密钥在终端中运行以下命令来生成签名密钥:```bash
keytool -genkey -v -keystore D:\Administrator\AndroidStudioProjects\Zhipeng_Wang_Portfolio\android\app\my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias

运行该命令后,你会被提示输入以下信息:

  • 密钥库密码(storePassword)
  • 密钥密码(keyPassword)— 可以设置为与密钥库密码相同
  • 其他关于证书的信息(例如:名字、组织、城市等)

创建 key.properties 文件

android 目录下创建一个名为 key.properties 的文件,并添加以下内容:

storePassword=your_keystore_password
keyPassword=your_key_password
keyAlias=my-key-alias
storeFile=D:\\Administrator\\AndroidStudioProjects\\Zhipeng_Wang_Portfolio\\android\\app\\my-release-key.jks

请将 your_keystore_passwordyour_key_password 替换为你在生成密钥库时设置的实际密码。

配置 build.gradle 文件

编辑 android/app/build.gradle 文件,确保正确引用 key.properties 文件中的信息:

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))android {compileSdkVersion 33defaultConfig {applicationId "com.example.your_app_name"minSdkVersion 21targetSdkVersion 33versionCode 1versionName "1.0"}signingConfigs {release {keyAlias keystoreProperties['keyAlias']keyPassword keystoreProperties['keyPassword']storeFile file(keystoreProperties['storeFile'])storePassword keystoreProperties['storePassword']}}buildTypes {release {// 启用代码压缩和资源缩减minifyEnabled trueshrinkResources true// 使用混淆文件proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'signingConfig signingConfigs.release}}
}

创建 proguard-rules.pro 文件

确保项目根目录下的 android/app 文件夹中有一个 proguard-rules.pro 文件。如果没有这个文件,可以创建一个简单的 proguard-rules.pro 文件:

创建 android/app/proguard-rules.pro 文件,内容如下:

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in D:\android-sdk\tools\proguard\proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html# Add any project specific keep options here:# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

5. 构建发布版本

在终端中运行以下命令来构建发布版本的 APK:

flutter build apk --release

构建完成后,你可以在 build/app/outputs/flutter-apk/app-release.apk 路径下找到生成的 APK 文件。

6. 发布应用

发布到 Google Play

  1. 登录 Google Play Console,创建一个新的应用或选择一个现有的应用。
  2. 按照步骤填写应用信息,并上传 app-release.apk 文件。
  3. 提交审核,审核通过后你的应用就会在 Google Play 商店中上线。

发布到其他平台

如果你打算发布到其他平台,可以将生成的 APK 文件上传到相应的平台。

7. 更新应用图标

你可以使用 flutter_launcher_icons 包来更新应用图标。以下是步骤:

安装 flutter_launcher_icons

pubspec.yaml 文件中添加 flutter_launcher_icons 依赖:

dev_dependencies:flutter_launcher_icons: ^0.9.2flutter_icons:android: trueios: trueimage_path: "assets/icon/icon.png"

确保你在 assets 文件夹下有一个图标文件,例如 assets/icon/icon.png

生成应用图标

在项目根目录运行以下命令生成图标:

flutter pub run flutter_launcher_icons:main

通过这些步骤,你可以成功地为你的Flutter应用设置新的图标,并生成不同尺寸的应用图标。

总结

通过本文的详细步骤,你可以在Android Studio上发布一个Flutter应用。关键步骤包括配置应用、生成签名密钥、配置Gradle文件、构建发布版本APK,以及更新应用图标。希望这篇文章能帮助你顺利发布你的Flutter应用。如果有任何问题或需要进一步的帮助,请随时联系我。

相关文章:

如何在Android Studio上发布Flutter应用

发布Flutter应用到Android平台是一个多步骤的过程,涉及配置应用、生成签名密钥、配置Gradle文件、构建发布版本APK等步骤。本文将详细介绍这些步骤,帮助你顺利发布Flutter应用。 1. 准备你的应用 在发布之前,确保你的应用在开发环境中运行良…...

C++ 字符串处理4-根据指定的分隔符将字符串分割为多个子串根据指定的分隔符将多个子串连接成一个字符串

1. 关键词 C 字符串处理 分割字符串 连接字符串 跨平台 2. strutil.h #pragma once#include <string> #include <vector>namespace cutl {/*** brief The type of vector strings used in this library.**/using strvec std::vector<std::string>;/*** b…...

微信小程序请求request封装

公共基础路径封装 // config.js module.exports {// 测试BASE_URL: https://cloud.chejj.cn,// 正式// BASE_URL: https://cloud.mycjj.com };请求封装 // request.js import config from ../config/baseUrl// 请求未返回时的loading const showLoading () > wx.showLoadi…...

Web前端不挂科:深入探索与实战指南

Web前端不挂科&#xff1a;深入探索与实战指南 在数字化时代的浪潮中&#xff0c;Web前端开发已成为一项炙手可热的技能。然而&#xff0c;对于许多初学者来说&#xff0c;如何避免在Web前端课程中挂科却成为了一道难题。本文将从四个方面、五个方面、六个方面和七个方面&…...

Golang | Leetcode Golang题解之第149题直线上最多的点数

题目&#xff1a; 题解&#xff1a; func maxPoints(points [][]int) (ans int) {n : len(points)if n < 2 {return n}for i, p : range points {if ans > n-i || ans > n/2 {break}cnt : map[int]int{}for _, q : range points[i1:] {x, y : p[0]-q[0], p[1]-q[1]if…...

京准电钟 NTP时间同步服务器助力水库水坝水利自动化建设

京准电钟 NTP时间同步服务器助力水库水坝水利自动化建设 京准电钟 NTP时间同步服务器助力水库水坝水利自动化建设 水库大坝监测系统主要包括渗流监测系统、流量监测系统、雨量监测系统、沉降监测系统组成。每一个监测系统由监测仪器及自动化数据采集装置&#xff08;内置通信装…...

程序员应该具备什么职业素养?

程序员应该有什么职业素养&#xff1f; 作为一个程序员&#xff0c;拥有以下职业素养是非常重要的&#xff1a; 扎实的技术功底&#xff1a;作为程序员&#xff0c;首先要具备扎实的技术基础&#xff0c;包括编程语言、算法、数据结构等方面的知识&#xff0c;能够熟练地解决问…...

linux 安装sftp及使用sftp上传和下载

一、centos7 安装sftp 1.安装 OpenSSH 服务&#xff1a; sudo yum install openssh-server2.启动 SSH 服务&#xff0c;并设置为开机启动&#xff1a; sudo systemctl start sshd sudo systemctl enable sshd3.创建一个新用户&#xff0c;用于SFTP连接&#xff08;替换your_…...

AI虚拟试穿技术:开启高保真、多场景、多样化服装组合的试穿应用

随着电子商务的快速发展,消费者对于在线购物体验的要求越来越高。特别是在服装领域,消费者渴望能够在购买前直观地了解服装的试穿效果。传统的虚拟试穿技术虽然已有一定的发展,但在不同场景下的高保真度和鲁棒性方面仍面临挑战。为此,我们研发了一种全新的AI虚拟试穿技术,…...

数栈xAI:轻量化、专业化、模块化,四大功能革新 SQL 开发体验

在这个数据如潮的时代&#xff0c;SQL 已远远超越了简单的查询语言范畴&#xff0c;它已成为数据分析和决策制定的基石&#xff0c;成为撬动企业智慧决策的关键杠杆。SQL 的编写和执行效率直接关系到数据处理的速度和分析结果的深度&#xff0c;对企业洞察市场动态、优化业务流…...

oppo手机精简包名列表

oppo广告机&#xff0c;coloros为13.0&#xff0c;测试机为oppo a1x 5g。 手机第一次开机后就全屏广告&#xff0c;被恶心了好几个月。现使用universal Android debolater进行卸载测试&#xff0c;其中&#xff1a; 不可卸载的&#xff1a; 开机广告&#xff1a;com.coloros.…...

Cisco Packet Tracer实验(二)

二、用交换机构建 LAN 构建物件如下&#xff1a; 四个PC 两个交换机 一个Multi Switch多功能拓展控制器 连线必须是这个直线&#xff01;&#xff01;&#xff01;不是虚线 最后实现效果如下&#xff1a; 全部的线是绿的&#xff0c;就表示是通的。 尝试一下&#xff0c;看PC…...

Julia 数学函数

Julia 数学函数 Julia 是一种高性能的动态编程语言,特别适合于数值计算和科学计算。在数学领域,Julia 提供了丰富的内置函数,这些函数涵盖了从基本运算到高级数学运算的各个方面。本文将详细介绍 Julia 中的数学函数,并提供一些示例,帮助读者更好地理解和使用这些函数。 …...

[next.js] svgr/webpack

nextjs如何配置svg文件&#xff0c;使其像react组件一样导入? 当前next.js 开发环境我使用了--turbo 来开启turbopack加速文件构建&#xff0c;所以之前的一些webpack loader之类的无法正常工作。通过搜索发现一般都是使用svgr/webpack来处理svg&#xff0c;打开svgr官网发现…...

vue页面和 iframe多页面无刷新方案和并行存在解决方案

面临问题 : back的后台以jsp嵌套iframe为主, 所以在前端框架要把iframe无刷新嵌套和vue页面进行并行使用,vue的keep-alive只能对虚拟dom树 vtree 进行缓存无法缓存iframe,所以要对iframe进行处理 tab标签的切换效果具体参考若依框架的tab切换,可以去若依看源码,若依源码没有实…...

Leetcode498. 对角线遍历

Every day a Leetcode 题目来源&#xff1a;498. 对角线遍历 解法1&#xff1a;模拟 根据题目要求&#xff0c;矩阵按照对角线进行遍历。设矩阵的行数为 m&#xff0c;矩阵的列数为 n&#xff0c;我们仔细观察对角线遍历的规律可以得到如下信息&#xff1a; 一共有 mn−1 条…...

flume配置----a1.sources.r1.positionFile=xxxx.json

positionFile 的作用和用途 记录读取位置&#xff1a; positionFile 记录了 Flume 读取文件的当前位置&#xff08;偏移量&#xff09;&#xff0c;确保在 Flume 重启或崩溃后&#xff0c;能够从上次读取的位置继续读取文件&#xff0c;而不是重新开始读取。这在处理大文件或长…...

Controller 自动化日志输出

Starter库 1.定义注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface TraceLog {/*** 日志类型** return*/String type() default ""; }2.定义捕获日志接口方法 public interface ITraceLogProcess {void afterThr…...

css3中有哪些新属性(特性)?

在 CSS3 中引入了许多新的属性和特性&#xff0c;以下是其中一些主要的&#xff1a; Flexbox&#xff08;弹性盒子布局&#xff09;&#xff1a;通过 display: flex 及其相关属性&#xff0c;实现灵活的布局方式&#xff0c;使得元素在容器中可以自动调整大小和位置。 Grid&am…...

SAP ABAP 之面向对象OO

文章目录 前言一、类的理解二、如何创建ABAP类 a.类的定义与构成 b.类的访问区域 c.特殊方法 d.类的继承 三、类中参数的使用 a.IMPORTING / EXPORTING b.CHANGING c.RETURNING d.EX…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...