如何使用Android R8保留类构造函数自变量参数名称

时间:2019-05-09 10:39:53

标签: android android-gradle proguard 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 { *; }

然后在我的模块gradle文件中加载该配置:

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;
    }
}

因此,即使保留了字段名,但在我的构造函数中也没有保留变量名。

如何保留方法/构造函数参数名称?

我想念什么?

1 个答案:

答案 0 :(得分:0)

here所述,请检查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'
     }
}

或者您可以按照here

禁用R8
  

您可以通过在项目的gradle.properties文件中添加以下行之一来禁用R8:

# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false