После обновления до плагина Android Gradle 3.4.0 базовый класс больше не запутывается.
Следующие основные шаги могут воспроизвести проблему:
- В Android Studio создайтеновый пустой проект
- В
app/build.gradle
изменить minifyEnabled
на true
Создать следующий класс, ProguardTestClass.java
:
public class ProguardTestClass {
public interface ProguardTestInnerInterface {
void proguardTestCallback(String message);
}
public static void proguardTestMethod(String input, ProguardTestInnerInterface impl) {
impl.proguardTestCallback("proguardTestMethod received input=[" + input + "]");
}
}
Обратитесь к классу от MainActivity.java
:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ProguardTestClass.proguardTestMethod("MainActivity's ProguardTestClass", new ProguardTestClass.ProguardTestInnerInterface() {
@Override
public void proguardTestCallback(String message) {
Log.d(TAG, "Proguard test: " + message);
}
});
}
}
Убедитесь, что он использует плагин Android Gradle 3.4.0 в build.gradle
- Подтвердите, что он использует
gradle-5.1.1
в gradle/wrapper/gradle-wrapper.properties
- Откройте окно терминала на вкладке Терминал
- Выполнить
./gradlew clean build
- Выполнить
find . -name mapping.txt | xargs grep "ProguardTestClass -> "
Ожидаемый вывод:
com.example.proguardgradleplugin340.ProguardTestClass -> com.example.proguardgradleplugin340.a:
Фактический вывод:
app/build/outputs/mapping/release/mapping.txt
не упоминает никакого переименования ProguardTestClass
.
Чтобы увидеть, что предыдущие версии плагинов Android Gradle могли давать ожидаемый результат, повторите описанные выше шаги, но укажите предыдущие версии плагинов Android Gradle и Gradle:
Изменить на плагин Android Gradle 3.3.2 в
build.gradle
Изменить на
gradle-4.10.1
в
gradle/wrapper/gradle-wrapper.properties
Я пытался исследовать, изучая другие диагностические файлы, которые мы использовали для получения от Proguard , но они больше не выводятся (по крайней мере, по умолчанию):
find . -name seeds.txt
find . -name usage.txt
Я также проверилплагин Android Gradle 3.4.0 заметил, что он заменил Proguard на новую технологию, которая "объединяет десагеринг, сжатие, запутывание, оптимизацию и дексинг всего за один шаг" .