我试图混淆.aar,并且不想公开诸如键和程序包名称之类的常量。 我不确定这是否是使用proguard的正确方法。
ProductConstant.java
public interface ProductConstant {
String PACKAGE_ID = "com.whatever.invisibleapp";
}
只有接口IProductAPI.java
及其工厂ProductFactory.java
保留在proguard中,所有其他文件和变量值都应该被混淆?
但是,当我将此.aar包含在另一个项目中时。
我可以看到此字符串完全不变。我该如何混淆呢?
public final class a implements IProductAPI {
public a() {
}
public final String getPackageId() {
return "com.whatever.invisibleapp";
}
}
列出所有文件以供参考:
IProductAPI.java
public interface IProductAPI {
String getPackageId();
}
ProductAPIImpl.java
public class ProductAPIImpl implements IProductAPI {
@Override
public String getPackageId() {
return ProductConstant.PACKAGE_ID;
}
}
ProductFactory.java
public class ProductFactory {
public static IProductAPI createAPI() {
return new ProductAPIImpl();
}
}
proguard-rules.pro
-keep class com.miraclesong.proguarddoubt.ProductFactory { *; }
-keep class com.miraclesong.proguarddoubt.IProductAPI { *; }
app / build.gradle
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
我在这里针对此问题制作了一个示例项目: https://github.com/liaoxsong/ProguardDoubt