2016-09-23 3 views
3

Родитель вопрос: Android proguard, keep inner classAndroid ProGuard, держать внутренний класс Inner класса

Моя проблема с внутренним классом внутреннего класса

Один из SDKs в моем андроида проекте есть класс A, который имеет два статических внутреннего класса. Полагают, что они были удалены после применения proguard.

public class A{ 
    .... 

    static class B{ 
    ... 
    static class D { 
     .... 
    } 

    } 

    static class C{ 
    ... 
    } 
} 

Мой ProGuard выглядит следующим образом

-keepattributes Exceptions, InnerClasses 
-keep class com.xxx.A 
-keep class com.xxx.A$* 

который предотвращает класса B, C от ProGuard. Но не повезло с классом D. Я тоже пробовал -keep class com.xxx.A$**.

+0

@TGMCians не работает –

+0

Тест '-keep класса com.xxx * $ *' –

+0

* $ * не работает, либо, Но -dontwarn com.xxx ** есть. мой строй для успеха. Я должен поработать над этим позже, я думаю. –

ответ

0

Я думаю, что вам не хватает спецификации класса, как показано в ProGuard manual.

Try замена:

-keep class com.xxx.A 

С:

-keep class com.xxx.** {*;} 

Я использую это правило со следующим файлом и он работает отлично на Android Studio 2.2.3 с инструментами сборки 25.0.1 (только в случае, если те могут повлиять на версию ProGuard используется)

A.java

package com.xxx; 

public class A { 
    .... 

    public class B { 
    .... 

    public class C { 
    .... 
    } 
    } 
} 

Как вы можете видеть, единственная реальная разница между моим файлом и вашим состоит в том, что мои внутренние классы являются общедоступными и нестатическими.

Если это не работает

Вы всегда можете использовать правило без шаблонов. Ниже будет делать трюк:.

-keep class com.xxx.A$B$D 
Смежные вопросы