我试图使用Proguard来保持我的私人领域,但它不会工作.我从Proguard keep classmembers中偷了大部分,因为这个问题与我问的类似,也遵循了这个链接。如何告诉ProGuard保留私人字段而不指定每个字段?
但还是不行。
我想给另一家公司做一个库,仍然保留我的访问级别修改器字段和方法。
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);
}
}
好像是R8引起的,而不是...... Proguard
.
进入 gradle.properties
,并设置 android.enableR8=false
. 下次构建时,它将使用 Proguard
.
R8是谷歌对Proguard的回答,在最近的The Android Gradle Plugin(3.4.0+)版本中,它默认使用R8的代码shrinkerobfuscator。使用Google的版本而不是Guardsquare的技术有一些利弊。
更多信息,请看 文件