• Flutter安卓混淆的相关问题


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

    1.禁用混淆:

    flutter build apk --no-shrink
    
    • 1

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

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

    就只会打’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.** { *; }
    ......
    
    • 1
    • 2

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

     signingConfigs {
            release {
                storeFile file('test.jks')
                storePassword '123456'
                keyAlias 'test'
                keyPassword '123456'
            }
        }
    
        buildTypes {
            release {
                signingConfig signingConfigs.release
                minifyEnabled true
                shrinkResources true
                zipAlignEnabled true
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
            debug {
                signingConfig signingConfigs.release
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

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

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

    在这里插入图片描述

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

    在这里插入图片描述

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

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

    在这里插入图片描述

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

  • 相关阅读:
    2023年中国轮胎模具需求量、竞争格局及行业市场规模分析[图]
    JavaWeb、Web核心
    Reactive反应式编程及使用介绍
    Vue-Vben-Admin -- 自定义上传excel文件弹框组件
    微信小程序 | 吐血整理的日历及日程时间管理
    设计模式学习(八):桥接模式
    vue使用腾讯地图获取经纬度和逆解析获取详细地址
    一款翻译机背后的全球经济浪潮
    lv7 嵌入式开发-网络编程开发 03 TCP/IP与五层体系结构
    【Vue】基础系列(二二)Vue基础--Vue模板语法-vue数据绑定原理-插值语法-指令语法-元素的显示隐藏
  • 原文地址:https://blog.csdn.net/baiyuliang2013/article/details/133673625