как сохранить частных членов в правилах защиты - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь использовать Proguard для сохранения личных полей, но это не сработает. Я украл большую часть этого из Proguard keep classmembers, потому что этот вопрос аналогичен тому, что я задаю, а также перешел по этой ссылке Как указать ProGuard сохранять частные поля без указания каждого поля

Но это все равно не работает.

Я хочу создать библиотеку для другой компании и по-прежнему сохранять поля и методы модификаторов уровня доступа.

Proguard:

-keepclassmembers class com.example.mylibrary.Bedika {
 private <fields>;
}
-keep class com.example.mylibrary.Bedika {
 *;
}

Моя библиотека AAR

public class Bedika {

private String stam;

public Bedika(String stam) {
 this.stam = stam;
}

public void print() {
 System.out.println(stam);
}
}

вывод после Proguard:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.example.mylibrary;

public class Bedika {
public String stam;

public Bedika(String var1) {
 this.stam = var1;
}

public void print() {
 System.out.println(this.stam);
}
}

1 Ответ

1 голос
/ 06 мая 2020

Похоже, что эту проблему вызывает R8, а не Proguard.

Go в gradle.properties и установите android.enableR8=false. При следующей сборке он будет использовать Proguard.

R8 - это ответ Google на Proguard, а в последних версиях плагина Android Gradle (3.4.0+) по умолчанию используется сжатие / обфускатор кода R8. У использования версии Google вместо технологии Guardsquare есть свои плюсы и минусы.

Дополнительную информацию см. В документации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...