使用proguard混淆常量(如最终字符串)

时间:2019-04-12 11:11:08

标签: android proguard

我试图混淆.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

0 个答案:

没有答案