在 proguard public 静态字段将被删除之后

after proguard public static field will remove

package com.hope.carwallpapers.extra;

import java.lang.reflect.Field;

/**
 * Created by croma on 21-08-2016.
 */
public class StringLensFlare {
    public final static String O_1 = "{\"I\":\"p(1)\",\"ow\":768,\"oh\":491,\"data\":[{\"image\":\"two\",\"fw\":389,\"fh\":235,\"fx\":162,\"fy\":187},{\"image\":\"one\",\"fw\":389,\"fh\":235,\"fx\":461,\"fy\":187}]}";
    public final static String O_2 = "{\"I\":\"p(2)\",\"ow\":768,\"oh\":512,\"data\":[{\"image\":\"two\",\"fw\":757,\"fh\":450,\"fx\":11,\"fy\":0},{\"image\":\"two\",\"fw\":381,\"fh\":227,\"fx\":0,\"fy\":99}]}";

public static String getDeclare(int i) {

    try {
        StringLensFlare stringLensFlare = new StringLensFlare();
        Field f = stringLensFlare.getClass().getDeclaredField("O_" + i);
        f.setAccessible(true);
        return f.get(stringLensFlare).toString();

    } catch (Exception e) {

    }
    return "";
}
};;

这是我的 public 在我已经添加了混淆器之后删除的静态文件

proguard.txt file as-keepclasseswithmembernames class * {
    native <methods>;
} 

您正在通过反射访问 public 静态字段,因此您必须指示 ProGuard 保留它:

-keep class StringLensFlare {
    static java.lang.String O_*;
}

你提到的另一条规则对这种情况几乎没有用,而且完全不相关。