【问题标题】:how to keep private members in pro-guard rules如何让私人成员遵守亲守规则
【发布时间】:2020-05-06 09:53:13
【问题描述】:

我正在尝试使用 Proguard 来保留我的私有字段,但它不起作用。 我从 Proguard keep classmembers 那里偷走了大部分内容,因为这个问题与我要问的问题相似,并且还关注了这个链接 How to tell ProGuard to keep private fields without specifying each field

但还是不行。

我想为另一家公司创建一个库,并且仍然保留我的访问级别修饰符字段和方法。

Proguard:

-keepclassmembers class com.example.mylibrary.Bedika {
 private <fields>;
}
-keep class com.example.mylibrary.Bedika {
 *;
}

我的 AAR 库

public class Bedika {

private String stam;

public Bedika(String stam) {
 this.stam = stam;
}

public void print() {
 System.out.println(stam);
}
}

Proguard 后的输出:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.example.mylibrary;

public class Bedika {
public String stam;

public Bedika(String var1) {
 this.stam = var1;
}

public void print() {
 System.out.println(this.stam);
}
}

【问题讨论】:

    标签: java android proguard


    【解决方案1】:

    似乎是 R8 导致了这个问题,而不是 Proguard

    进入gradle.properties,并设置android.enableR8=false。下次构建时,它将使用Proguard

    R8 是 Google 对 Proguard 的回应,在最新版本的 Android Gradle 插件 (3.4.0+) 中,它默认使用 R8 的代码收缩器/混淆器。使用 Google 的版本而不是 Guardsquare 的技术有一些优点和缺点。

    欲了解更多信息,请查看documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多