Как сохранить имена параметров аргумента конструктора класса в 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