Proguard не держит класс, хотя это так говорит - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь удержать proguard от переименования / оптимизации классов, которые имеют определенные аннотации. Есть немало примеров, и это должно быть прямо, но proguard не ведет себя так, как я ожидал.

Issue

Proguard v6.2.2 запутывает классы, отмеченные @KeepClass, хотя -whyareyoukeeping показывает test.KeepMe is kept by a directive in the configuration. Я могу воспроизвести проблему с помощью простого трехфайлового проекта.

Конфигурация Proguard:

-optimizations !code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 3
-allowaccessmodification

-adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose

-keep public class test.Entry {
    public static void main(java.lang.String[]);
}

-keep @proguard.annotation.KeepClass public class * {
    *;
}

-whyareyoukeeping class test.KeepMe

Класс, который следует сохранить:

import proguard.annotation.KeepClass;

@KeepClass
public class KeepMe
{
}

Журнал Proguard:

Explaining why classes and class members are being kept...
Printing usage to [D:\Development\Projects\ProguardTest\build\usage.txt]...

test.KeepMe
  is kept by a directive in the configuration.

Removing unused program classes and class elements...
  Original number of program classes: 3
  Final number of program classes:    2

И, наконец, файлы в обработанном jar-файле:

- test
   |- Entry.class
   |- a.class (Obfuscated KeepMe class)

Если, однако, я явно перечислю класс в конфигурации proguard, используя

-keep class test.KeepMe{*;}

, proguard сообщает тот же вывод журнала, но класс не тронут (как и ожидалось)

Я что-то упустил или это ошибка в proguard?

1 Ответ

0 голосов
/ 03 мая 2020

Как оказалось, проблема была связана с ошибкой в ​​Proguard. После пробной версии последней бета-версии она работает как положено.

...