2009-07-22 5 views
6

Я запутываю библиотеку с помощью ProGuard, используя задачу Ant.Выявление внутренних классов при запутывании с помощью ProGuard

Веда конкретных имен классов и их имена методов, когда они имеют особую аннотацию (@ApiAll) и я с просьбой приписывать быть в InnerClasses:

<keepattribute name="InnerClasses" /> 
    <keep annotation="com.example.ApiAll"/> 
    <keepclassmembers annotation="com.example.ApiAll"> 
    <constructor access="public protected"/> 
    <field access="public protected"/> 
    <method access="public protected"/> 
    <constructor access="protected"/> 
    </keepclassmembers> 

Если я проверить вывод отображения file Я вижу, что мой внутренний класс, у которого есть аннотация, и его члены, не поддаются определению. Однако, когда я смотрю в сгенерированном файле jar, я не могу найти класс.

Я что-то упустил? Почему отображение говорит мне, что он держит этот класс, когда это не так?

ответ

20

Необходимо указать, что вы хотите сохранить внутренний класс, используя правильную нотацию. В языке прогара это означает -keep class my.outer.Class$MyInnerClass. Ключевым здесь является знак доллара ($) как разделитель между внутренним и внешним классами.

Для этого вам также необходимо указать -keepattributes InnerClasses, так что имя MyInnerClass не будет запутано. Эти два параметра вместе должны позволять вашим внутренним классам оставаться неповрежденными.

+0

Thanks Markus. Это помогло мне решить мою проблему. – Fenil

+0

Это правильный ответ для той же проблемы с yGuard – ygesher

0

Опция keepclassmembers сохраняет только указанные члены класса (и их имена).

Возможно, вам нужен более общий вариант keep, который сохраняет указанные классы и членов класса (и их имена).

Cfr. ProGuard manual > Usage > Overview of Keep Options

 Смежные вопросы

  • Нет связанных вопросов^_^