Flutter 如何发布安卓应用?

android:hardwareAccelerated=“true”

android:windowSoftInputMode=“adjustResize”>

<meta-data

android:name=“flutterEmbedding”

android:value=“2” />

Flutter生成的文件建议是大部分内容可以保留不动,但是可以根据需要进行修改。

具体可能要修改的内容如下:

替换应用图标

安卓提供了如下尺寸的图标配置文件,在Flutter项目下的android/app/src/main/res对应尺寸目录下可以应用图标文件。

替换启动页

应用启动页图片在Flutter项目下的android/app/src/main/drawable下的launch_background.xml配置文件中,默认是一个白色底,xml问卷如下所示:

<?xml vers​ ion="1.0" encoding="utf-8"?>

注释掉的部分可以用来设置启动页图片,需要注意部分机型的尺寸未必和启动页图片一致,因此可以设置启动页的背景色与启动页图片边缘一致。

<?xml version="1.0" encoding="utf-8"?>

<bitmap

android:gravity=“center”

android:src=“@mipmap/launch_image” />

设置访问权限

在android/app/src下的AndroidManifest.xml(注意不是src/profile文件夹下的AndroidManifest.xml文件)文件中设置应用权限,如访问网络,相册,摄像头等。开发环境是在android/src/debug的AndroidManifest.xml中设置。下面是一个示例的文件:

<manifest xmlns:android=“http://schemas.android.com/apk/res/android”

package=“com.example.animation_demo”>

<application

android:name=“io.flutter.app.FlutterApplication”

android:label=“动画演示”

android:icon=“@mipmap/ic_launcher”>

<activity

android:name=“.MainActivity”

android:launchMode=“singleTop”

android:theme=“@style/LaunchTheme”

android:configChanges=“orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode”

android:hardwareAccelerated=“true”

android:windowSoftInputMode=“adjustResize”>

<meta-data

android:name=“flutterEmbedding”

android:value=“2” />

配置版本发布参数

在android/app/build.gradle文件检查配置是否正确:

1.applicaitonId:应用唯一AppId,如com.lios.helloworld

2.versionCode:应用程序版本号

3.versionName:版本号字符串

4.minSdkVersion:指定最低的API级别

5.targetSdkVersion:指定应用程序设计运行的API级别

如下所示:

android {

compileSdkVersion 28

sourceSets {

main.java.srcDirs += ‘src/main/kotlin’

}

lintOptions {

disable ‘InvalidPackage’

}

defaultConfig {

// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).

applicationId “com.example.animation_demo”

minSdkVersion 16

targetSdkVersion 28

versionCode flutterVersionCode.toInteger()

versionName flutterVersionName

testInstrumentationRunner “androidx.test.runner.AndroidJUnitRunner”

}

buildTypes {

release {

// TODO: Add your own signing config for the release build.

// Signing with the debug keys for now, so flutter run --release works.

signingConfig signingConfigs.debug

}

}

}

这里面可以看到versionCode和versionName是从flutterVersionCode和flutterVersionName中引入的,其中这两个变量在build.gradle上面有定义。先从local.properties中读取,若没有再在该文件中定义,因此可以在localProperties中设置或在build.gradle中设置(优先取local.properties中的值)。

def flutterVersionCode = localProperties.getProperty(‘flutter.versionCode’)

if (flutterVersionCode == null) {

flutterVersionCode = ‘1’

}

def flutterVersionName = localProperties.getProperty(‘flutter.versionName’)

if (flutterVersionName == null) {

flutterVersionName = ‘1.0’

}

生成应用签名

创建keystore,如果之前创建过了,在key.properties中引入即可。

#其中/key.jks是将keystore文件key.jks存储在/目录下

keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

按提示输入密码和组织信息即可。

输入密钥库口令:

再次输入新口令:

您的名字与姓氏是什么?

您的组织单位名称是什么?

您的组织名称是什么?

您所在的城市或区域名称是什么?

您所在的省/市/自治区名称是什么?

该单位的双字母国家/地区代码是什么?

CN=lag, OU=island-coder, O=RD, L=Coder, ST=Island, C=CN是否正确?

正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):

CN=lag, OU=island-coder, O=RD, L=Coder, ST=Island, C=CN

[正在存储/Users/lag/key.jks]

在android目录下创建一个key.properties文件,用于引用密钥库信息:

storePassword={密钥库密码} #

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取
/Users/lag/key.jks]

在android目录下创建一个key.properties文件,用于引用密钥库信息:

storePassword={密钥库密码} #

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

[外链图片转存中…(img-ZtwOtSxc-1719088485071)]一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

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

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

相关文章

Highcharts 饼图

Highcharts 饼图 介绍 Highcharts 是一个流行的 JavaScript 图表库,广泛用于网页和应用程序中创建交互式图表。其中,饼图(Pie Chart)是 Highcharts 提供的一种基础图表类型,用于展示数据在整体中的占比关系。饼图通过将数据集分割成不同的扇形区域来表示不同类别的数据,…

STM32读写备份寄存器和实时时钟

文章目录 1. 硬件电路 2. RTC操作注意事项 操作步骤 3. 代码实现 3.1 读写备份寄存器 3.1.1 main.c 3.2 实时时钟 3.2.1 MyRTC.c 3.2.2 MyRTC.h 3.2.3 main.c 1. 硬件电路 对于BKP备份寄存器和RTC实时时钟的详细解析可以看下面这篇文章&#xff1a; STM32单片机BKP备…

Linux查看公网IP的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

洛谷:P1909 [NOIP2016 普及组] 买铅笔

1. 题目链接 https://www.luogu.com.cn/problem/P1909 P1909 [NOIP2016 普及组] 买铅笔 2. 题目描述 题目描述&#xff1a;小P老师去买笔&#xff0c;商店有3种包装的笔&#xff0c;不拆开单独卖。小P决定只买一种包装的笔&#xff0c;问&#xff1a;在每种包装都足量的情况下…

字节大牛耗时八个月又一力作,Android性能调优秘籍:设计思想与代码质量优化+程序性能优化+开发效率优化(全网疯传)

第一章、设计思想与代码质量优化 一、六大原则 二、设计模式 三、数据结构 四、算法 第二章、 程序性能优化 一、启动速度与执行效率优化 二、 布局检测与优化 三、 内存优化 四、耗电优化 五、网络传输与数据存储优化 六、APK 大小优化 第三章、 开发效率优化 一、…

双叒叕-一个-Android-MVVM-组件化架构框架?

LifecycleViewModelLiveDataViewBindingAndroid KTXOkHttp:网络请求Retrofit:网络请求MMKV:腾讯基于 mmap 内存映射的 key-value 本地存储组件Glide:快速高效的Android图片加载库ARoute:阿里用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦BaseR…

【学习笔记】CSS

CSS 1、 基础篇 1.1、选择器 1.2、长度单位 1.3、CSS2 常用属性 1.4、盒模型 1.5、浮动 1.6、定位 position2、 CSS3 2.1、新增长度单位 2.2、新增颜色表示 2.3、新增选择器 2.4、新增盒子属性 2.5、新增背景属性 …

STM32单片机BKP备份寄存器和RTC实时时钟详解

文章目录 1. Unix时间戳 2. UTC/GMT 3. 时间戳转换 4. BKP简介 5. BKP基本结构 6. RTC简介 7. RTC框架图 8. RTC基本结构 9. 代码示例 1. Unix时间戳 实时时钟&#xff0c;本质上是一个定时器&#xff0c;专门用来产生年月日时分秒。 Unix 时间戳&#xff08;Unix T…

CausalMMM:基于因果结构学习的营销组合建模

1. 摘要 在线广告中&#xff0c;营销组合建模&#xff08;Marketing Mix Modeling&#xff0c;MMM&#xff09; 被用于预测广告商家的总商品交易量&#xff08;GMV&#xff09;&#xff0c;并帮助决策者调整各种广告渠道的预算分配。传统的基于回归技术的MMM方法在复杂营销场景…

Windows10中端口被占用处理方法

前言 在Windows 10中&#xff0c;查看端口被占用情况的方法主要依赖于命令行工具netstat。以下是详细步骤&#xff0c;以及必要的解释和归纳&#xff1a; 打开命令提示符 方法1&#xff1a;使用快捷键Win R&#xff0c;打开“运行”对话框&#xff0c;输入cmd&#xff0c;然…

大疆炸机后MOV修复方法(DJI Inspire 3)

dji大疆可以说是无人机中的华为&#xff0c;产品线之广性能之高让高傲的美国人侧面&#xff0c;质量和性价比才是王道。另外产品线的细分也是制胜法宝&#xff0c;无论是手持、农用机、特殊无人机还是影视级产品DJI都有涉及&#xff0c;给人的感觉就是在无人机细分方面它已经无…

Java中的实例变量和类变量

在面向对象编程中&#xff0c;实例变量和类变量&#xff08;也称为静态变量&#xff09;是两种重要的成员变量类型。它们各自具有不同的特性和用途。以下是关于这两种变量的详细介绍&#xff1a; 实例变量&#xff08;Instance Variables&#xff09; 定义&#xff1a;实例变量…

kafka 集群 Controller 节点和 zookeeper 集群 leader 节点有何区别联系?

kafka 集群 Controller 节点和 zookeeper 集群 leader 节点有何区别联系? Kafka 集群中的 Controller 节点和 ZooKeeper 集群中的 Leader 节点在角色和功能上有明显的区 别,但它们之间也有一定的联系。以下是它们的详细区别和联系: Kafka 集群中的 Controller 节点 角色和…

kafka(五)spring-kafka(1)集成方法

一、集成 1、pom依赖 <!--kafka--><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId></dependency><dependency><groupId>org.springframework.kafka</groupId><artif…

java泛型学习

没有java泛型会存在的问题 假设我们有一个方法&#xff0c;希望通过传递不同类型的参数&#xff0c;输出不同类型的对象值。正常情况下我们可能会写不同的方法来实现&#xff0c;但是这样会导致类不断增加&#xff0c;并且类方法很相似&#xff0c;不能够复用。进而导致类爆炸…

cuda 与 opencl 的概念对应关系 备忘

OpenCL&#xff08;Open Computing Language&#xff09;和 CUDA&#xff08;Compute Unified Device Architecture&#xff09;都是用于并行编程的框架&#xff0c;允许开发者利用 GPU&#xff08;以及其他处理器&#xff09;进行高性能计算。尽管它们的目标相似&#xff0c;但…

基于顺序存储的环形队列算法库构建

学习贺利坚老师基于数组的环形队列 数据结构之自建算法库——顺序环形队列_下空队列q中依次入队列数据元素abc-CSDN博客文章浏览阅读5.2k次&#xff0c;点赞6次&#xff0c;收藏6次。本文针对数据结构基础系列网络课程(3)&#xff1a;栈和队列中第9课时环形队列的存储及基本操…

华为---理解OSPF Route-ID(五)

9.5 理解OSPF Route-ID 9.5.1 原理概述 一些动态路由协议要求使用Router-ID作为路由器的身份标示&#xff0c;如果在启动这些路由协议时没有指定Router-ID,则默认使用路由器全局下的路由管理Router-ID。 Router-ID选举规则为&#xff0c;如果通过Router-ID命令配置了Router-…

在Ubuntu 18.04上安装Anaconda

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 Anaconda 是一个为数据科学和机器学习工作流设计的开源软件包管理器、环境管理器和 Python 和 R 编程语言的发行版。 本教程将指…

QT 用GDAL库读写shp文件

地理信息系统离不开shp文件&#xff0c;自己写程序调用gdal库解析shp文件&#xff0c;看看shp文件里的内容。 一、GDALAllRegister()注册所有驱动 二、GDALOpenEx()打开shp文件 三、调用GDALDataset->GetLayerCount()获取图层数量 四、调用GDALDataset->GetLayer(?)…