自动备份android的mapping.txt文件

本文介绍如何通过Gradle脚本自动备份Android项目的mapping.txt文件,确保使用Bugly进行异常上报时能准确定位错误位置。适用于集成Bugly的Android应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动备份android的mapping.txt文件

为什么要这样做:

  • 由于集成了腾讯的bugly,但是出现异常上报时因为需要上传mapping.txt对应表才能找到异常出错的位置,为了能够根据版本统一管理并自动操作mapping.txt文件,需要在build.gradle文件写一下脚本

  • 每次混淆打包后复制mapping.txt到指定的项目目录统一管理

前提准备:

  • 在proguard-rules.pro文件中需要加入
#混淆前后的映射
-printmapping mapping.txt
# 将.class信息中的类名重新定义为"Proguard"字符串
-renamesourcefileattribute Proguard
# 并保留源文件名为"Proguard"字符串,而非原始的类名 并保留行号
-keepattributes SourceFile,LineNumberTable

开始:

  • 以下以我在build.gradle的flavorATest(测试环境)和flavorBProduct(正式环境)为例

//exapmle

flavorDimensions "testflavor"
    publishNonDefault true
    productFlavors {

        //测试环境
        flavorATest {
          dimension "testflavor"
        }
        //正式环境
        flavorBProduct {
          dimension "testflavor"
        }

    }
  • 在build.gradle中加入
tasks.whenTaskAdded {
    task ->
        android.productFlavors.all {

          //我只需要assembleFlavorBProductRelease这个task(正式环境打包发布的情况下)才保存mapping.txt
          //规则可以自己定义,我这边定义的比较宽泛
            if (task.name.startsWith("assemble")
                    && task.name.endsWith("Release")
            ) {
                task.doLast {
                    println "\n\n=====复制mapping.txt文件出来======"
                    copyMapping(task.name
                            .replace("assemble", "")
                            .replace("Release", "")
                    )
                }
            }
        }
}
  • 复制函数+根据版本号等规则重命名文件

def copyMapping(String name) {
    copy {

        //此处是个人喜好,把assembleFlavorBProductRelease先去掉assemble和Release,否则感觉文件名太长
        //然后把FlavorBProduct然后的F改成小写

        String firstChar = "";
        try {
            firstChar = name.getAt(0);
        } catch (Exception e) {
            e.printStackTrace()
            return
        }
        name = name.replace(firstChar, firstChar.toLowerCase())
        //======================================================


        String renameName = "mapping_save_" + name + "_" + rootProject.ext.VERSION_CODE + "_" + rootProject.ext.VERSION_NAME + ".txt"

        println "\n=====文件名:" + renameName + "======\n"

        from "$buildDir" + '/outputs/mapping/' + name + '/release/'
        include "mapping.txt"
        into "mapping/"
        rename {
            renameName
        }
    }
}

结束:

  • 最终生成样例
admin-test:myAndroidProject yfjin$ tree
.
└── app
    └── mapping
        ├── mapping_save_flavorBProduct_145_1.0.7.3.txt
        └── mapping_save_flavorBProduct_146_1.0.7.4.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值