Proguard Printmapping not working in Android Studio 2.0.0 (and 2.1.0)
Asked Answered
W

5

28

Using gradle wrapper 2.10, and Android Gradle build tools 2.0.0-beta7 2.1.0

From my build.gradle:

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

This works. Things are obfuscated.

I have the following line in my proguard-project.pro as well:

-printmapping my-mapping.txt

Everything else in that file works fine, but the mapping keeps getting printed to the wrong place:

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

Has this syntax changed?

Note: I've tried supplying a direct path. I've tried supplying a name without a hyphen. Nothing changes.

For now I just made a gradle copy task for it.

Wives answered 25/2, 2016 at 4:35 Comment(7)
What do you mean, Wrong place?Mccann
@Mccann In the past, that line would put the mapping file in the project root. Now, regardless of where that line points, it always prints the mapping in the build folder AND with the wrong name,Wives
I'm not familiar with what it was in the past, but if you want to put it in a specific folder, you should try providing an absolute path. As for wrong name, maybe the hyphen in the file name is an issue? Try enclosing it in quotes.Mccann
I've done all of that, it doesn't change.Wives
what about -basedirectory directoryname (In your proguard.pro file. Specifies the base directory for all subsequent relative file names in these configuration arguments or this configuration file.) ?Disparagement
-printmapping in section "obfuscation options" is what you want. Provide a filespec to it and no more copy task needed..proguard.sourceforge.net/index.html..see gradle task then look for print mappingSalmagundi
@RobertRowntree the issue is that the printmapping function is not working...Wives
S
11

The mapping file at location build\outputs\mapping\debug\mapping.txt is the default one that gets generated even when you don't specify -printmapping my-mapping.txt inside proguard-project.pro. I see the name is always mapping.txt so -printmapping is being ignored with the new Android Studio version.

I remember it used to get generated at the same project root folder where proguard-project.pro is present but I confirm, it doesn't generate now with Android Studio 2.0 and is a bug that you can file at Android Issue Tracker.


UPDATE

Link to Android Issue: https://code.google.com/p/android/issues/detail?id=205213

Sheelah answered 24/3, 2016 at 6:51 Comment(1)
It would seem that someone just filed it. Could you update the link to point here? code.google.com/p/android/issues/detail?id=205213Sassafras
B
4

Faced with same problem, but it seems that

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

is correct place for mapping files now

Benempt answered 1/3, 2016 at 8:55 Comment(1)
I feel like the method is simply broken. Why would the build pass with printmapping in it if it's not meant to work anymore?Wives
M
0

Maybe you can change to follwoing

android {
    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'some-other-rules.txt'
            //proguardFile 'some-other-rules.txt' 
        }
    }
}
Methyl answered 7/3, 2016 at 17:42 Comment(1)
This made no difference.Wives
F
0

Starting from Android Studio 3.5.3 and AGP 3.5.3 the -printmapping parameter is respected.

For example using:

-printmapping mapping.txt

It is copied from the default:

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

to:

{projectRoot}\mapping.txt

Fishworm answered 10/12, 2019 at 10:43 Comment(0)
L
-1

Just try to start Android Studio as administrator.

-printmapping

may not write to system folder which cause this issue.

Lyons answered 30/3, 2016 at 3:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.