Настройка Proguard, чтобы не удалять неиспользуемый метод - PullRequest
2 голосов
/ 15 февраля 2012

Рассмотрим следующую структуру кода для Android:

package blah;
class A{
    class B{
        public void foo(String s){
        }
    } 
}

Как я могу сказать proguard не удалять и не запутывать foo.
foo - неиспользуемая функция в коде во время компиляции, но запускается при запускевремя из другого кода.

Я пытался:

-keep class blah.A.B;

-keepclassmembers class blah.A.B {
  public void foo(String s);
}

и т. д.но ничто не мешает Proguard удалить эту функцию.Я не хочу, чтобы proguard сменил имя на 'foo'.Proguard может изменить имя класса A или класса B, но не имя функции 'foo'.Есть предложения?

Ответы [ 2 ]

5 голосов
/ 16 февраля 2012

Почти верно.В байт-коде java символ $ разделяет имена внутренних классов и их внешних классов (чтобы избежать неоднозначностей с именами пакетов).Итак, чтобы сохранить только метод:

-keepclassmembers class blah.A$B {
  public void foo(java.lang.String);
}
0 голосов
/ 15 февраля 2012

У меня есть метод 'myClickHandler', на который есть ссылка только в XML-файле.

Этот

-keepclassmembers class * extends android.app.Activity {
    public void myClickHandler(android.view.View );
}

останавливает его удаление в моем приложении.Возможно, расширяет .. будет работать для вас

...