Proguard - PersistenceException: construtor não corresponde à classe

estou usandoretrofit2.0 no meu aplicativo comsimpleframework.xml biblioteca.

O problema é que, quando eu executo o aplicativo sem proguard, ele funciona bem; no entanto, quando executo o proguard, recebo o seguinte erro nos logs.

E/ERROR: java.lang.RuntimeException: org.simpleframework.xml.core.PersistenceException: Constructor not matched for class A

A classe A não possui construtor / padrão que deve funcionar. Ainda adicionei umConstrutor sem argumento. Mas isso não corrigiu o problema.

ClasseA

@Root(name = "data",strict = false)
public class A {
    @Element(name = "baseurl",required = false)
    private String baseURl;
    @Element(name = "country_code")
    private String country_code;

    //  Setters and getters
}

Como você pode ver, não há construtor (adicionar o construtor vazio padrão mantém o problema). Então padrãoConstrutor sem argumento deve funcionar tão bem. No entanto, tentei com o seguinte construtor e isso remove o erro.

public A(@ELement(name = "baseurl") String baseUrl,
         @Element(name = "country_code") String country_code) {    // Add all the elements from the xml in the constructor i.e. if a new element is added a new constructor would have to be written.
    baseURl = baseUrl;
    this.country_code = country_code;
}

Mas tenho muitos arquivos para alterar, se quiser fazê-lo dessa maneira. Além de um construtor que exige todos os valores mapeados, não deve ser necessário. Eu tenho algumas classes que hospedam mais de 50 variáveis de membro (simplifiquei a classe de exemplo para incluir apenas duas variáveis de membro). Essa classe contém cerca de 30 e o código seria muito longo para ser postado aqui.

O problema é que tenho muitas classes trabalhando na suposição do construtor No Argument para cada classe.

Simplesmente adicionar construtores para todos não é viável.

Minhasproguard-rules.pro (apenas com regras relevantes de ofuscação de lib).

#-keepattributes *Annotation*

-dontwarn retrofit2.**
-keep class retrofit2.** { *; }

-dontwarn com.bea.xml.stream.**
-dontwarn org.simpleframework.xml.stream.**
-keep class org.simpleframework.xml.**{ *; }
-keepclassmembers,allowobfuscation class * {
    @org.simpleframework.xml.* <fields>;
    @org.simpleframework.xml.* <init>(...);
}

Pode valer a pena notar que antes deste erro eu estava recebendo

E/ERROR: java.lang.RuntimeException: org.simpleframework.xml.core.ElementException: Element 'version' does not have a match in class A at line 1

Resolvido isso adicionando o argumento 'name' em@Element Anotação. Portanto, uma das razões pelas quais reluto em alterar todos os arquivos é o surgimento de outro erro.

EDIT 1: Então, após 2 dias de busca por uma solução, desisti e finalmente adicionei construtores a todas as classes. O problema é que a biblioteca chama construtor apenas para os recursos disponíveis.xml-tags. Diga para a classe A acima, se apenasCódigo do país estava disponível no xml

<xml>
    <data>
        <country_code>PK</country_code>
    </data>
</xml>

Então eu precisaria de um construtor com apenas um argumento de country_code para fazê-lo funcionar

public A(@Element(name = "country_code") String country_code) {
    this.country_code = country_code;
}

O que torna a solução encontrada inutilizável.

EDIT 2: Encontrei uma solução alternativa! Manter as classes POJO nas regras proguard corrige esse erro. Mas prefiro não manter essas aulas.

E, portanto, estou mantendo essa pergunta em aberto, pelo menos por enquanto ou até que alguém possa me dizer por que devo manter esses arquivos.

questionAnswers(2)

yourAnswerToTheQuestion