flutter发布android

https://flutter.cn/docs/deployment/obfuscate

flutter build apk --obfuscate --split-debug-info=run/app.android-arm64.symbols

混淆应用

keyStore 创建:

https://blog.csdn.net/qq_42351033/article/details/122279278?

flutter 操作:

https://flutter.cn/docs/deployment/android#adding-a-launcher-icon

从 app 中引用密钥库
创建一个名为 [project]/android/key.properties 的文件,它包含了密钥库位置的定义。在替换内容时请去除 < > 括号:

content_copy
storePassword=
keyPassword=
keyAlias=upload
storeFile=
storeFile 密钥路径在 macOS 上类似于 /Users//upload-keystore.jks,在 Windows 上类似于 C:\Users\\upload-keystore.jks。

请注意:

(再次)请保证这个文件的私有性,不要将它提交到公共的代码管理空间。

在 gradle 中配置签名
在以 release 模式下构建你的应用时,修改 [project]/android/app/build.gradle 文件,以通过 gradle 配置你的上传密钥。

在 android 代码块之前将你 properties 文件的密钥库信息添加进去:

以下代码已更新,可直接使用

local.properties放在android根目录。

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {localPropertiesFile.withReader('UTF-8') { reader ->localProperties.load(reader)}
}android {...}

将 key.properties 文件加载到 keystoreProperties 对象中。

找到 buildTypes 代码块:

content_copy
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
}
}
将其替换为我们的配置内容:

signingConfigs {release {keyAlias localProperties.getProperty('keyAlias')keyPassword localProperties.getProperty('keyPassword')storeFile localProperties.getProperty('storeFile') ? file(localProperties.getProperty('storeFile')) : nullstorePassword localProperties.getProperty('storePassword')}}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.debugsigningConfig signingConfigs.release}}

现在我们 app 的发布版本就会被自动签名了。

提示: You might need to run flutter clean after changing the gradle file. This prevents cached builds from affecting the signing process.

当你更改 gradle 文件后,也许需要运行一下 flutter clean。这将防止缓存的版本影响签名过程。

有关应用签名的更多信息,请查看 developer.android.com 的 为您的应用设置签名。

发布优化

启用缩减、混淆处理和优化功能,

android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
}
}

}
复制代码

根据不同CPU打包,减小包大小

flutter build apk --split-per-abi

https://blog.csdn.net/u013038616/article/details/119135165

添加 launcher icon

launcher icon 就是下面图中的这些小方块。

如果要手动设置 launcher icon 还是很麻烦的。幸运的是,这个问题被一个叫 flutter_launcher_icons 的插件解决了。所以原来那个超级麻烦的问题现在就转变为学会使用这个插件就行了。

安装 flutter_launcher_icons 插件
flutter pub add dev:flutter_launcher_icons
复制代码
注意前面的 dev: 表示作为开发期间的依赖,flutter_launcher_icons 会出现在 dev_dependencies 下面。出现在这里的好处是等发版的时候 flutter_launcher_icons 不会被包括里 apk 中。

准备一张 1024x1024 的图片。如果你手边没有合适的,17 亲手画了一张,可以 点击这里,打开原图,右键另存下载。在根目录下建一个文件夹 images,把图片命名为 icon1024.png 放入 images 文件夹中。

添加配置信息,打开 pubspec.yaml

flutter_icons:
image_path: “images/icon1024.png”
android: true
ios: true
复制代码
执行创建命令
flutter pub run flutter_launcher_icons:main
复制代码
检查生成的图片
打开 android/app/src/main/res/drawable 文件夹查看已经生成好的图片,发现所有图片都已经自动生成好了。

为 ios 生成的图片路径 在 ios/Runner/Assets.xcassets/AppIcon.appiconset

注意事项
Format: 32-bit PNG
icon 大小必须是 1024x1024
确保在 40px 大小时也能清晰可见,这是 icon 最小的尺寸。
icon 不能大于 1024KB
icon 不能是透明的。
必须是正方形,不能有圆角。
icon 的边可能会被切掉,因为 Icon 最后展示的可能不是正方形,所以一般边上需要留白。

其他参考:
Flutter Android 打包保姆式全流程 2023 版

https://www.modb.pro/db/617269

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

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

相关文章

F#奇妙游(26):计算表达式浅尝

computation expression之一问三不知 计算表达式是一个有点难理解的东西。我把帮助全部看了一遍&#xff0c;记住了个上下文敏感的计算&#xff08;contex-sensitive computation&#xff09;。但是让我讲计算表达式是什么&#xff1f;为什么&#xff1f;怎么做&#xff1f;我…

RSA加密算法

RSA原理 RSA基于一个十分简单的数论事实&#xff1a;将两个大素数相乘十分容易&#xff0c;但想要对其乘积进行因式分解却极其困难&#xff0c;因此可以将乘积公开作为加密密钥&#xff0c;即公钥&#xff0c;而两个大素数组合成私钥。公钥是可发布的供任何人使用&#xff0c;…

MonoDETR: Depth-guided Transformer for Monocular 3D Object Detection 论文解读

文章目录 1.Abstract2. Introduction3. Related workDETR base methods 4. Method4.1Feature ExtractionVisual Featuresdepth featuresforeground depth map 4. 2 Depth guided transformerVisual and depth encodersDepth-guided-decoderDepth positional encoding 4. 3 Dete…

【vue2第十一章】v-model的原理详解 与 如何使用v-model对父子组件的value绑定 和修饰符.sync

v-model的原理详解 v-model的本质就是一个语法糖&#xff0c;实际上就是 :value"msg" 与 input"msg $event.target.value" 的简写。 :value"msg" 从数据单向绑定到input框&#xff0c;当data数据中的msg内容一旦改变&#xff0c;而input框数据…

OpenCV(十八):图像直方图

目录 1.直方图统计 2.直方图均衡化 3.直方图匹配 1.直方图统计 直方图统计是一种用于分析图像或数据的统计方法&#xff0c;它通过统计每个数值或像素值的频率分布来了解数据的分布情况。 在OpenCV中&#xff0c;可以使用函数cv::calcHist()来计算图像的直方图。 calcHist(…

uni-app之android离线打包

一 AndroidStudio创建项目 1.1&#xff0c;上一节演示了uni-app云打包&#xff0c;下面演示怎样androidStudio离线打包。在AndroidStudio里面新建空项目 1.2&#xff0c;下载uni-app离线SDK&#xff0c;离线SDK主要用于App本地离线打包及扩展原生能力&#xff0c;SDK下载链接h…

电商平台api对接货源

如今&#xff0c;电商平台已经成为了人们购物的主要途径之一。 然而&#xff0c;对于电商平台来说&#xff0c;货源对接一直是一个比较棘手的问题。为了解决这个问题&#xff0c;越来越多的电商平台开始使用API来对接货源。 API&#xff0c;即应用程序接口&#xff0c;是一种允…

分支创建查看切换

1、初始化git目录&#xff0c;创建文件并将其推送到本地库 git init echo "123" > hello.txt git add hello.txt git commit -m "first commit" hello.txt$ git init Initialized empty Git repository in D:/Git/git-demo/.git/ AdministratorDESKT…

计算机视觉传统图像处理库opencv的使用

人工智能领域的图像处理分支&#xff0c;整理了计算机视觉传统图像处理库opencv的使用网址链接。 opencv使用范围&#xff0c;主要用在计算机视觉、视频分析、机器学习、医学影像处理、自动驾驶、工业检测、游戏开发上。 1&#xff09;&#xff1a;opencv效果视频 opencv10个应…

Qt QSlider样式

滑块控件QSlider&#xff0c;如果设置的垂直样式&#xff0c;其进度颜色和剩余颜色&#xff0c;刚好和横向样式的颜色相反的&#xff0c;不确定这个是否是Qt的BUG&#xff0c;Qt456都是这个现象 QSlider::groove:horizontal{ height:8px; background:#FF0000; }QSlider::add-p…

django中配置使用websocket终极解决方案

django ASGI/Channels 启动和 ASGI/daphne的区别 Django ASGI/Channels 是 Django 框架的一个扩展&#xff0c;它提供了异步服务器网关接口&#xff08;ASGI&#xff09;协议的支持&#xff0c;以便处理实时应用程序的并发连接。ASGI 是一个用于构建异步 Web 服务器和应用程序…

远程方法调用中间件Dubbo在spring项目中的使用

Dubbo是一个分布式服务框架&#xff0c;它可以帮助我们快速开发和提供高性能、高可靠性的分布式服务&#xff0c;同时提供服务治理、容错、负载均衡等功能。 使用Dubbo可以分为以下步骤&#xff1a; 引入Dubbo依赖&#xff1a;在项目的pom.xml文件中引入Dubbo的依赖。编写服务…

ipad手写笔什么牌子好?适合开学买的电容笔推荐

随着社会和经济水平的不断提高&#xff0c;对电容笔的使用日益增加。国产平替的电容笔和原装苹果的电容笔没有太大的区别&#xff0c;不管是功能还是手感都很像&#xff0c;书写上的笔锋也很流畅&#xff0c;这让我很惊讶&#xff0c;因为其的价格很便宜&#xff0c;但其的体验…

【实训项目】精点考研

1.设计摘要 如果说高考是一次能够改变命运的考试&#xff0c;那么考研应该是另外一次。为什么那么多人都要考研呢&#xff1f;从中国教育在线官方公布是考研动机调查来看&#xff0c;大家扎堆考研的原因大概集中在这6个方面&#xff1a;本科就业压力大&#xff0c;提升竞争力、…

开源照片管理服务LibrePhotos

本文是为了解决网友 赵云遇到的问题&#xff0c;顺便折腾的。虽然软件跑起来了&#xff0c;但是他遇到的问题&#xff0c;超出了老苏的认知。当然最终问题还是得到了解决&#xff0c;不过与 LibrePhotos 无关&#xff1b; 什么是 LibrePhotos ? LibrePhotos 是一个自托管的开源…

HTTP/1.1协议中的响应报文

2023年8月30日&#xff0c;周三下午 目录 概述响应报文示例详述 概述 HTTP/1.1协议的响应报文由以下几个部分组成&#xff1a; 状态行&#xff08;Status Line&#xff09;响应头部&#xff08;Response Headers&#xff09;空行&#xff08;Blank Line&#xff09;响应体&a…

后端面试话术集锦第 十二 篇:java基础部分面试话术

这是后端面试集锦第十二篇博文——java基础部分面试话术❗❗❗ 1. String类中常用的方法 split():把字符串分割成字符串数组 indexOf():从指定字符提取索引位置 trim():去除字符串两端空格 replace():替换 hashCode():返回此字符串的哈希码 subString():截取字符串 equa…

学习高级数据结构:探索平衡树与图的高级算法

文章目录 1. 平衡树&#xff1a;维护数据的平衡与高效性1.1 AVL 树&#xff1a;严格的平衡1.2 红黑树&#xff1a;近似平衡 2. 图的高级算法&#xff1a;建模复杂关系与优化2.1 最小生成树&#xff1a;寻找最优连接方式2.2 拓扑排序&#xff1a;解决依赖关系 拓展思考 &#x1…

支付参考文档

支付宝官方提供的样例代码与支付宝通信&#xff1a; 小程序文档 - 支付宝文档中心支付宝文档中心https://docs.open.alipay.com/api_1/alipay.trade.query 参考sdk示例&#xff1a; 小程序文档 - 支付宝文档中心支付宝文档中心https://docs.open.alipay.com/api_1/alipay.tra…

unity界面上Global 与Local xyz- right up forward

gloabal 如果要沿这个方向移动就比较困难 local下就不一样了