Flutter安卓混淆的相关问题

当你执行 build apk 后,flutter会默认进行混淆,若你的应用中引用了第三方的sdk,在debug模式下没问题,但在release下可能就会出现各种各样的问题,找不到某个类,或者某个功能无法使用,甚至直接崩溃等,此时,就需要你去处理混淆的相关问题。

1.禁用混淆:

flutter build apk --no-shrink

在使用flutter命令进行打包时,后面可以加上支持的cup架构,如:

flutter build apk --no-shrink --target-platform android-arm,android-arm64

就只会打’armeabi-v7a’, ‘arm64-v8a’,若想支持x84_64,可以添加上android-x64。

如果想把各种架构分开打包,可以添加上--split-per-abi,最终打包结果会是这样:

  • [project]/build/app/outputs/apk/release/app-armeabi-v7a-release.apk
  • [project]/build/app/outputs/apk/release/app-arm64-v8a-release.apk
  • [project]/build/app/outputs/apk/release/app-x86_64-release.apk

2.配置混淆规则:

1).在android主工程app下添加 proguard-rules.pro 文件,并配置混淆规则:

-keep class io.flutter.plugin.** { *; }
......

2).在app的build.gradle中引用proguard-rules.pro:

 signingConfigs {release {storeFile file('test.jks')storePassword '123456'keyAlias 'test'keyPassword '123456'}}buildTypes {release {signingConfig signingConfigs.releaseminifyEnabled trueshrinkResources truezipAlignEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}debug {signingConfig signingConfigs.release}}

以上两种方法,基本上可以解决打release后出现的各种问题。

但还有一种情况,可能以上两种方法都无法解决,即第三方sdk引用了drawable中的一个图片资源进行安全验证,例如阿里百川的安全图片yw_1222_baichuan.jpg。这种情况,即便你禁用混淆,在打完release包后,可能仍然会报安全验证失败(找不到安全图片资源)。

本人在最初的测试中,将release包解压后看到资源文件列表如下:

在这里插入图片描述

资源文件是被混淆了的(禁用混淆没用),但使用反编译工具查看,图片资源基本都正常:

在这里插入图片描述

这里我就黑人问号了???图片资源路径没有任何问题,但安装后为什么仍然报找不到资源?猜测,可能是打包过程中对资源进行了压缩或其它操作导致图片属性发生变化,以至于sdk无法识别!

最后的终极解决办法:通过以上两种方式打release包后,解压apk,找到混淆后的jpg格式文件(nQ.jpg,需要确认这个就是安全图片),删除之,创建drawable文件夹,将正常的yw_1222_baichuan.jpg复制进去,重新修改为apk格式。

在这里插入图片描述

若此时直接安装,会提示无签名文件,需要你手动再次签名一下,然后再安装,会发现,已可以成功运行,并验证通过!

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

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

相关文章

C文件操作

目录 文件: 什么是文件 程序文件: 数据文件 文件操作理解: 文件名 文件的打开和关闭 文件指针 文件的打开和关闭 文件的使用方式: 文件的读写: ​编辑 fputc ​编辑fgetc fputs fgets perror fprintf ​…

LLMs 蒸馏, 量化精度, 剪枝 模型优化以用于部署 Model optimizations for deployment

现在,您已经了解了如何调整和对齐大型语言模型以适应您的任务,让我们讨论一下将模型集成到应用程序中需要考虑的事项。 在这个阶段有许多重要的问题需要问。第一组问题与您的LLM在部署中的功能有关。您需要模型生成完成的速度有多快?您有多…

WebDAV之π-Disk派盘 + 咕咚云图

咕咚云图是一款强大的图床传图软件,它能够让您高效地对手机中的各种图片进行github传输,多个平台快速编码上传,支持远程删除不需要的图片,传输过程安全稳定,让您可以很好的进行玩机或者其他操作。 可帮你上传手机图片到图床上,并生成 markdown 链接,支持七牛云、阿里云…

上班第一天同事让我下载个小乌龟,我就去百度小乌龟。。。。

记得那会儿是刚毕业,去上班第一天,管我的那个上级说让我下载个小乌龟,等下把代码拉一下,我那是一脸懵逼啊,我在学校只学过git啊,然后开始磨磨蹭蹭吭吭哧哧的不知所措,之后我想也许百度能救我&am…

Python教程:方法重载

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 方法重载 方法重载在Python中起着关键作用。 方法有时接受零参数,有时接受一个或多个参数。 当我们以不同的方式调用同一个方法时,这就被称为方法…

JVM 参数

JVM 参数类型大致分为以下几类: 标准参数(-):保证在所有的 JVM 实现都支持的参数非标准参数(-X):通用的,特定于 HotSpot 虚拟机的参数,这些参数不保证在所有 JVM 实现中…

缓存雪崩、缓存穿透和缓存击穿产生的原因及解决方案

目录 什么是缓存雪崩? 缓存雪崩的解决方案 什么是缓存穿透? 缓存穿透的解决方案 什么是缓存击穿? 缓存击穿的解决方案 缓存在提高系统性能和响应速度方面起着关键作用,但在实际应用中,我们常常面临一些与缓存相…

leetCode 718.最长重复子数组 动态规划 + 优化(滚动数组)

718. 最长重复子数组 - 力扣(LeetCode) 给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1: 输入:nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 输出:3 解释&…

2023-2024年华为ICT网络赛道模拟题库

2023-2024年网络赛道模拟题库上线啦,全面覆盖网络,安全,vlan考点,都是带有解析 参赛对象及要求: 参赛对象:现有华为ICT学院及未来有意愿成为华为ICT学院的本科及高职院校在校学生。 参赛要求&#xff1a…

【Spring MVC研究】MVC如何浏览器请求(service方法)

文章目录 1. DispatcherServlet 的 service 方法1.1. processRequest 方法1.2. doService 方法 背景:平时我们学习 MVC 重点关注的时DispatcherServlet 的 doDispatcher 方法,但是在 doDispatcher 方法之前 还有请求处理的前置过程,这个过程…

electron.js入门-为生产环境构建应用程序

在本章中,我们将学习如何使用可执行文件生成生产应用程序;为此,我们将使用以下软件包: https://www.electron.build/ 需要注意的是,当您有兴趣生成应用程序的可执行文件时,必须在每个Electron.js项目中安装…

linux centos Python + Selenium+Chrome自动化测试环境搭建?

在 CentOS 系统上搭建 Python Selenium Chrome 自动化测试环境,需要执行以下步骤: 1、安装 Python CentOS 7 自带的 Python 版本较老,建议使用 EPEL 库或源码安装 Python 3。例如,使用 EPEL 库安装 Python 3: sud…