Как сохранить имена параметров аргумента конструктора класса в Android R8

Я пишу библиотеку Android, поэтому я хочу сохранить имена параметров для некоторых конструкторов / методов. Я развертываю свою библиотеку как файл AAR.

После обновления Gradle с 3.3.2 до 3.4.0 все аргументы в конструкторах и открытых методах переименовываются во что-то вроде "var1", до этого все было хорошо.

Как я понимаю, главное отличие состоит в том, что теперь по умолчанию R8 используется для минимизации и запутывания нашего кода вместо Proguard. Так что, вероятно, я что-то упустил в конфигурации.

Допустим, у меня есть класс:

public class Foo {
    public String bar;

    public Foo(String bar) {
        this.bar = bar;
    }
}

Итак, в proguard-rules.pro у меня есть:

-keepparameternames
-keepattributes MethodParameters
-keepattributes Signature

-keep class my.class.path.Foo { *; }

И я загружаю эту конфигурацию в файл модуля моего модуля:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}}

Прямо сейчас мой класс внутри моего файла AAR выглядит так ->

public class Foo {
    public String bar;

    public SecureElement(String var1) {
        this.bar = var1;
    }
}

Таким образом, даже имя поля было сохранено, но не имя переменной в моем конструкторе.

Как я могу сохранить имена аргументов метода / конструктора?

Что мне не хватает?

0 ответов

Как сказано здесь, проверьте, все ли у вас работает с R8 версии 1.5.51.

buildscript {
    repositories {
        maven {
            url 'http://storage.googleapis.com/r8-releases/raw'
        }
    }
    dependencies {
        // Must be before the Gradle Plugin for Android
        classpath 'com.android.tools:r8:1.5.51'
        classpath 'com.android.tools.build:gradle:X.Y.Z'
     }
}

Или вы можете отключить R8, как описано здесь

Вы можете отключить R8, добавив одну из следующих строк в файл gradle.properties вашего проекта:

# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false
Другие вопросы по тегам