使用 Proguard 时未生成 mapping.txt 文件

Posted

技术标签:

【中文标题】使用 Proguard 时未生成 mapping.txt 文件【英文标题】:mapping.txt file is not getting generated when using Proguard 【发布时间】:2015-11-12 09:14:19 【问题描述】:

我在使用 proguard 混淆我的应用时遇到问题。

当我在 android studio 中创建新应用程序时,我可以使用 proguard,它正在生成 mapping.txt,但是当我尝试在从 eclipse 迁移到 android 的项目上使用 proguard 时,没有生成 mapping.txt工作室。

以下是我的 proguard-rules.pro 文件

-dontobfuscate
-dontshrink
-keepdirectories
-keeppackagenames javax.mail.**
-keeppackagenames javax.activation.**
-keeppackagenames com.sun.mail.**
-keeppackagenames myjava.**
-keeppackagenames org.apache.harmony.**
-keeppackagenames mailcap.**
-keeppackagenames mimetypes.**
-keep class javamail.** *;
-keep class javax.mail.** *;
-keep class javax.activation.** *;
-keep class javax.mail.internet.** *;

-keep class com.sun.mail.dsn.** *;
-keep class com.sun.mail.handlers.** *;
-keep class com.sun.mail.smtp.** *;
-keep class com.sun.mail.util.** *;

-keep class javax.ws.rs.**  *; 

-keep class mailcap.** *;
-keep class mimetypes.** *;
-keep class myjava.awt.datatransfer.** *;
-keep class org.apache.harmony.awt.** *;
-keep class org.apache.harmony.misc.** *;

-dontwarn com.fasterxml.jackson.**
-dontwarn java.awt.**
-dontwarn java.beans.Beans
-dontwarn javax.security.**

-ignorewarnings
-printmapping build/outputs/mapping/release/mapping.txt

【问题讨论】:

请同时发布您的 proguard-rules 文件 我遇到了类似的问题。我忘记在 build.gradle 中将 minifyEnabled 更改为 true :) 【参考方案1】:

尝试从您的文件中删除以下行:

-dontobfuscate
.
.
.
-printmapping build/outputs/mapping/release/mapping.txt

第一行似乎禁用了混淆,最后一行似乎将映射文件复制到默认位置以外的位置。

【讨论】:

如果您从 proguard-rules 文件中删除 -dontobfuscate,那么如果您更改 versionCode,您的共享首选项数据将不起作用。 @AhamadullahSaikat 代码混淆与应用程序保存的数据(包括共享偏好)无关。【参考方案2】:

从整个项目中删除 -dontobfuscate ,您将在 build/outputs/mapping/.. 下生成映射文件。

【讨论】:

以上是关于使用 Proguard 时未生成 mapping.txt 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Eclipse 生成 mapping.txt?

@SerializedName 不适用于 Proguard

ProGuard 警告不允许我的应用编译发布

proguard applymapping - mapping.txt 的更改不适用于下一个构建签名的 apk

Android Studio中的proguard映射文件在哪里[重复]

在“src”上使用 javascript 变量时未加载 Google Maps iFrame