自动备份android的mapping.txt文件

自动备份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

猜你喜欢

转载自blog.csdn.net/jyfjyt/article/details/80525565
今日推荐