Proguard Printmapping 在 Android Studio 2.0.0(和 2.1.0)中不起作用

Posted

技术标签:

【中文标题】Proguard Printmapping 在 Android Studio 2.0.0(和 2.1.0)中不起作用【英文标题】:Proguard Printmapping not working in Android Studio 2.0.0 (and 2.1.0) 【发布时间】:2016-06-07 16:53:41 【问题描述】:

使用 gradle wrapper 2.10 和 android Gradle 构建工具 2.0.0-beta7 2.1.0

来自我的 build.gradle:

buildTypes 
        all
            minifyEnabled  true
            proguardFiles = [getDefaultProguardFile("proguard-android.txt"), 'proguard-project.pro'];
        
    

这行得通。事情被混淆了。

我的 proguard-project.pro 中也有以下行:

-printmapping my-mapping.txt

该文件中的其他所有内容都可以正常工作,但映射总是打印到错误的位置:

Printing mapping to [C:\path\to\my\project\build\outputs\mapping\debug\mapping.txt]

这个语法有变化吗?

注意:我已尝试提供直接路径。我试过提供不带连字符的名称。没有什么变化。

现在我只是为它做了一个 gradle 复制任务。

【问题讨论】:

什么意思,错地方了? @RaGe 在过去,该行会将映射文件放在项目根目录中。现在,无论该线指向何处,它总是会在构建文件夹中打印映射并且名称错误, 我不熟悉过去是什么,但是如果你想把它放在一个特定的文件夹中,你应该尝试提供一个绝对路径。至于错误的名称,也许文件名中的连字符有问题?尝试用引号括起来。 我已经做了所有这些,它没有改变。 -basedirectory 目录名怎么样(在您的 proguard.pro 文件中。为这些配置参数或此配置文件中的所有后续相对文件名指定基本目录。)? 【参考方案1】:

从 Android Studio 3.5.3 和 AGP 3.5.3 开始,-printmapping 参数受到尊重。

例如使用:

-printmapping mapping.txt

它是从默认复制而来的:

projectRoot\build\outputs\mapping\release\mapping.txt

到:

projectRoot\mapping.txt

【讨论】:

【参考方案2】:

尝试以管理员身份启动 Android Studio。

-printmapping

可能不会写入导致此问题的系统文件夹。

【讨论】:

【参考方案3】:

位于build\outputs\mapping\debug\mapping.txt 的映射文件是默认生成的,即使您没有在proguard-project.pro 中指定-printmapping my-mapping.txt。我看到名字总是mapping.txt,所以-printmapping 被新的Android Studio 版本忽略了。

我记得它曾经在 proguard-project.pro 所在的同一个项目根文件夹中生成,但我确认,它现在不会在 Android Studio 2.0 中生成,这是一个你可以在 Android Issue Tracker 提交的错误。


更新

Android 问题链接:https://code.google.com/p/android/issues/detail?id=205213

【讨论】:

似乎有人刚刚提交了它。您能否更新指向此处的链接? code.google.com/p/android/issues/detail?id=205213【参考方案4】:

也许你可以改成folwoing

android 
    buildTypes 
        release 
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'some-other-rules.txt'
            //proguardFile 'some-other-rules.txt' 
        
    

【讨论】:

这没什么区别。【参考方案5】:

面临同样的问题,但似乎

projectRoot\build\outputs\mapping\debug\mapping.txt

现在是映射文件的正确位置

【讨论】:

感觉这个方法简直坏掉了。如果它不再起作用,为什么构建会在其中包含打印映射?

以上是关于Proguard Printmapping 在 Android Studio 2.0.0(和 2.1.0)中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ProGuard惯用法

ProGuard代码混淆技术详解

ProGuard 代码混淆

proguard生成的pro怎么载入

Spring boot使用ProGuard实现代码混淆

Android 程序代码进行代码混淆