如何使用 Android R8 保留 class 构造函数参数名称
How to keep class constructor argument parameter names with Android R8
我正在编写 Android 库,所以我想保留一些 constructors/methodes 的参数名称。我正在将我的库部署为 AAR 文件。
Gradle 从 3.3.2 升级到 3.4.0 后,构造函数中的所有参数和 public 方法都重命名为类似 "var1" 的名称,在此之前一切都很好。
据我了解,主要区别在于,现在默认使用 R8 来缩小和混淆我们的代码,而不是 Proguard。所以可能我在配置中遗漏了一些东西。
假设我有 class:
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 文件中的 class 看起来像这样 ->
public class Foo {
public String bar;
public SecureElement(String var1) {
this.bar = var1;
}
}
所以我的构造函数中甚至保留了字段名,但没有保留变量名。
如何保留 method/constructor 个参数名称?
我错过了什么?
如前所述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'
}
}
或者您可以按照说明禁用 R8 here
You can disable R8 by adding one of the following lines to your project’s gradle.properties file:
# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false
我正在编写 Android 库,所以我想保留一些 constructors/methodes 的参数名称。我正在将我的库部署为 AAR 文件。
Gradle 从 3.3.2 升级到 3.4.0 后,构造函数中的所有参数和 public 方法都重命名为类似 "var1" 的名称,在此之前一切都很好。
据我了解,主要区别在于,现在默认使用 R8 来缩小和混淆我们的代码,而不是 Proguard。所以可能我在配置中遗漏了一些东西。
假设我有 class:
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 文件中的 class 看起来像这样 ->
public class Foo {
public String bar;
public SecureElement(String var1) {
this.bar = var1;
}
}
所以我的构造函数中甚至保留了字段名,但没有保留变量名。
如何保留 method/constructor 个参数名称?
我错过了什么?
如前所述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'
}
}
或者您可以按照说明禁用 R8 here
You can disable R8 by adding one of the following lines to your project’s gradle.properties file:
# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false