Flutter:打包apk,详细图文介绍

困扰了一天,终于能正常打包apk安装了,记录下打包的流程。建议参考我这篇文章时,同时看下官网的构建说明。
官网构建并发布 Android 应用详情

1、AS创建Flutter项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、cmd执行命令
生成一个sunluyi.jks的文件,可以自行把sunluyi替换)
-alias sunluyi(别名),方便管理都用一个名字

keytool -genkey -v -keystore sunluyi.jks -keyalg RSA -keysize 2048 -validity 10000 -alias sunluyi

在这里插入图片描述
然后你会得到一个命名sunluyi.jks的文件
在这里插入图片描述

3、cmd执行命令,查看文件详情

keytool -list -v -keystore sunluyi.jks

在这里插入图片描述

4、把生成好的.jks文件放在Flutter项目android/app目录下
并在android目录下手动创建key.properties文件

在这里插入图片描述
key.properties文件内容就是第二步自己设置的口令密码和别名storeFile对应的文件路径./sunluyi.jks(app目录)

storePassword=sunluyi
keyPassword=sunluyi
keyAlias=sunluyi
storeFile=./sunluyi.jks

5、修改/android/app/build.gradle文件
下边代码中我标注了哪些是新增的内容,哪些是修改的内容

plugins {id "com.android.application"id "kotlin-android"// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.id "dev.flutter.flutter-gradle-plugin"
}// 新增内容 ↓
def localProperties = new Properties()
def localPropertiesFile = rootProject.file("local.properties")
if (localPropertiesFile.exists()) {localPropertiesFile.withReader("UTF-8") { reader ->localProperties.load(reader)}
}def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
if (flutterVersionCode == null) {flutterVersionCode = "1"
}def flutterVersionName = localProperties.getProperty("flutter.versionName")
if (flutterVersionName == null) {flutterVersionName = "1.0"
}def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}// 新增内容↑android {namespace = "com.sunluyi.app.flutter_sunluyi"compileSdk = flutter.compileSdkVersionndkVersion = flutter.ndkVersioncompileOptions {sourceCompatibility = JavaVersion.VERSION_1_8targetCompatibility = JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = JavaVersion.VERSION_1_8}defaultConfig {// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).applicationId = "com.sunluyi.app.flutter_sunluyi"// You can update the following values to match your application needs.// For more information, see: https://flutter.dev/to/review-gradle-config.minSdk = flutter.minSdkVersiontargetSdk = flutter.targetSdkVersion// 修改内容 ↓versionCode = flutterVersionCode.toInteger()versionName = flutterVersionName// 修改内容 ↑}// 新增内容 ↓signingConfigs {release {keyAlias = keystoreProperties['keyAlias']keyPassword = keystoreProperties['keyPassword']storeFile = keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : nullstorePassword = keystoreProperties['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.release// 修改内容 ↑}}
}flutter {source = "../.."
}

6、最后你可能还需要配置应用的权限
/android/app/src/main/AndroidManifest.xml目录

<manifest xmlns:android="http://schemas.android.com/apk/res/android"><applicationandroid:label="[project]"...</application>...// 这里是新增的权限<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

最后根目录执行flutter build apk打包成apk文件。

打包时有个提示警告:

Warning: SDK processing. This version only understands SDK XML versions up to 3 but an SDK XML file of version 4 was encountered. This can happen if you use versions of Android Studio and the command-line tools that were released at different times.
记录下如何解决。

1cmd执行:flutter doctor -v

下图是我解决过警告的,最开始是Platform android-35, build-tools 34.0.0
在这里插入图片描述
百度了下解决方案:
设置/Android SDK中最开始我是勾选的35,换成下方的勾选之后,再次执行
flutter doctor -v得到:Platform android-35, build-tools 34.0.0
在这里插入图片描述
重新执行flutter build apk后没有警告,完成了打包流程。
在这里插入图片描述

关于混淆

自己还不清楚哪些插件需要混淆,也不太理解混淆的意思,先不记录。
这篇文章内容我是创建的新项目进行打包测试的。
后边把自己用到的第三方插件在pubspec.yaml配置后,也是可以正常打包安装的。

我的运行环境,希望这篇文章能对你有所帮助

在这里插入图片描述

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

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

相关文章

【服务器学习专栏 1.2 -- 带外管理】

请阅读 嵌入式学习必备专栏 文章目录 Overview服务器带外管理BMC 介绍BMC 特点BMC 工作原理 Overview 从技术的角度&#xff0c;网络管理可分为带外管理&#xff08;out-of-band&#xff09;和带内管理&#xff08;in-band&#xff09;两种管理模式。 带内管理&#xff0c;是指…

南京市建邺区南苑街道一行莅临园区考察交流

2024年8月28日&#xff0c;南京市建邺区南苑街道办事处副主任董兵、南苑街道发展服务办公室一级主任科员王洪政、建邺区国资集团科创公司经理杲畅&#xff0c;在树莓集团华东区负责人田林和陈强经理的陪同下&#xff0c;莅临集团总部-国际数字影像产业园考察交流。 树莓科技&am…

docker中使用nginx

宿主机和docker中nginx做映射 宿主机中nginx 映射目录 /root/myDockerData/devnginx 在容器中相关位置分别是&#xff1a; 配置文件位置&#xff1a;/etc/nginx/ 日志位置&#xff1a;/var/log/nginx/ 项目位置&#xff1a;/usr/share/nginx/html 如下配置启动命令行&#x…

Casino Royale靶场wp

0x00 下载安装 https://download.vulnhub.com/casinoroyale/CasinoRoyale.ova 导入vmware启动 0x01 主机信息收集 0x02目录扫描 index.php 获取到一个域名 修改本地hosts 添加一行 路径&#xff1a;C:\Windows\System32\drivers\etc 192.168.2.20 casino-royale.local 点击…

智能家居体验大变革 博联 AI 方案让智能不再繁琐

1. 全球AI技术发展背景及智能家居市场趋势 人工智能&#xff08;AI&#xff09;技术的飞速发展正在推动全球各行业的数字化转型。国际电信联盟与德勤联合发布《人工智能向善影响》报告指出&#xff0c;全球94%的商界领袖认为&#xff0c;人工智能技术对于其企业在未来5年内的发…

鸿蒙开发(27)案例今日任务

案例为纯前端实现&#xff0c;总结案例。 主页面代码 import { TaskStatisties } from ../view/TaskStatisties import { TaskItem } from ../view/TaskItem import CreateTaskModel, {TaskModel} from ../viewmodel/TaskModel import { router } from kit.ArkUI// xxx.ets En…

WPF编程excel表格操作

WPF编程excel表格操作 摘要NPOI安装封装代码测试代码 摘要 Excel操作几种方式 使用开源库NPOI(常用&#xff0c;操作丰富)使用Microsoft.Office.Interop.Excel COM组件(兼容性问题)使用OpenXml(效率高)使用OleDb(过时) NPOI安装 封装代码 using System; using System.IO; u…

音视频采集推流时间戳记录方案

音视频同步更多文章 深入理解音视频pts&#xff0c;dts&#xff0c;time_base以及时间数学公式_视频pts计算-CSDN博客 ffplay音视频同步分析_ffplay 音视频同步-CSDN博客 音视频采集打时间戳设计 实时音视频数据的采集和处理场景。具体来说: 采集阶段: 在音视频数据采集过…

专业140+总分410+南京大学851信号与系统考研经验南大电子信息通信集成电路,真题,大纲。参考书。

本人本科中等211&#xff0c;离保送本校差一点&#xff0c;考研前纠结本校还是追求更高目标&#xff0c;和家人聊了自己的想法&#xff0c;感谢父母对我的支持&#xff0c;坚定报考南大的目标&#xff0c;最终专业851信号与系统140&#xff0c;总分410顺利被南京大学录取&#…

【C++】初识C++之C语言加入光荣的进化(上)

写在前面 本篇笔记作为C的开篇笔记&#xff0c;主要是讲解C关键字(C98)连带一点点(C11)的知识。掌握的C新语法新特性&#xff0c;当然C是兼容C的&#xff0c;我们学习C的那套在C中也是受用。 ps:点我跳转下集 文章目录 写在前面一、命名空间域1.1、命名空间域的定义与使用1.2…

CGAL windows 安装教程

1.下载源代码 CGAL官网下载https://github.com/CGAL/cgal/releases 2.下载boost库 BOOST官网下载https://www.boost.org/ 3.下载 GMP and MPFR 4.配置VS2022 头文件&#xff1a; 库路径 做完以上步骤&#xff0c;可以使用CGAL了&#xff01;

从0入门自主空中机器人-2-2【无人机硬件选型-PX4篇】

1. 常用资料以及官方网站 无人机飞控PX4用户使用手册&#xff08;无人机基本设置、地面站使用教程、软硬件搭建等&#xff09;&#xff1a;https://docs.px4.io/main/en/ PX4固件开源地址&#xff1a;https://github.com/PX4/PX4-Autopilot 飞控硬件、数传模块、GPS、分电板等…

GraphRAG 框架哪家强?选择最适合你智能问答系统的框架

GraphRAG 框架哪家强&#xff1f;选择最适合你智能问答系统的框架 点击进入&#xff1a;GraphRAG系列文章-Nano-GraphRAG&#xff1a;打造轻量级医疗诊断助手 点击进入&#xff1a;GraphRAG系列文章-突破传统知识管理瓶颈&#xff1a;LlamaIndex GraphRAG 让企业知识问答更智能…

Mac电脑python多版本环境安装与切换

我当前是python3.9.6环境&#xff0c;需要使用3.9.8环境&#xff0c;通过brew安装3.9.8版本&#xff0c;然后通过pyenv切换环境 步骤 1: 安装 pyenv brew install pyenv brew install pyenv-virtualenv 步骤 2: 安装 Python 3.9.8&#xff08;使用 pyenv 安装指定版本的 Pyth…

Redis--持久化策略(AOF与RDB)

持久化策略&#xff08;AOF与RDB&#xff09; 持久化Redis如何实现数据不丢失&#xff1f;RDB 快照是如何实现的呢&#xff1f;执行时机RDB原理执行快照时&#xff0c;数据能被修改吗&#xff1f; AOF持久化是怎么实现的&#xff1f;AOF原理三种写回策略AOF重写机制 RDB和AOF合…

C高级:思维导图Day2

目录 总览1 总览2 总览1 压缩与解压缩 打包与解包 软连接与硬链接 ubuntu下关机与重启指令 总览2 结束

权限获得第一步

权限获得第一步 下载打开附件 给了一串加密的密文 一般都是用MD5加密&#xff0c;每一段分别解码一下 第一段不行&#xff0c;试一下第二段 这里发现第二段可以解码出来&#xff0c;这应该就是密码了 flag{3617656}

001__VMware软件和ubuntu系统安装(镜像)

[ 基本难度系数 ]:★☆☆☆☆ 一、Vmware软件和Ubuntu系统说明&#xff1a; a、Vmware软件的说明&#xff1a; 官网&#xff1a; 历史版本&#xff1a; 如何下载&#xff1f; b、Ubuntu系统的说明&#xff1a; 4、linux系统的其他版本&#xff1a;红旗(redhat)、dibian、cent…

fiscoBcos中webase平台导出java项目

导出合约为java项目并调用 1&#xff0e; 在webase管理平台上面进行项目的导出 2.将下载好的项目解压并用idea打开&#xff0c;目录结构如下 在resources目录下的abi放的是编译过后的合约方法&#xff0c;bin.ecc放的是以编译过后的智能合约&#xff0c;conf文件夹下面放的是链…

【嵌入式C语言】指针数组结构体

指针与数组 指针与数组指针数组数组指针 多维数组数组名的保存 结构体定义结构体定义结构体变量使用typedef简化结构体声明访问结构体成员结构体内存分配字节对齐位域定义位域位域的限制示例 指针与数组 指针数组和数组指针是两个不同的概念&#xff0c;它们涉及到指针和数组的…