如何检查android库中的debuggable或debug构建类型?

时间:2017-05-02 07:49:51

标签: java android android-studio android-gradle android-buildconfig

我有一个Android AAR库。我想对我的库的消费者应用程序强加的一个安全策略是,当debuggable为true或使用debug buildType.

创建apk时,它必须无法使用我的库

如何在android中以编程方式检查?

2 个答案:

答案 0 :(得分:6)

有一个使用反射的解决方法,以便像这样得到项目(而不是库)的BuildConfig值:

/**
 * Gets a field from the project's BuildConfig. This is useful when, for example, flavors
 * are used at the project level to set custom fields.
 * @param context       Used to find the correct file
 * @param fieldName     The name of the field-to-access
 * @return              The value of the field, or {@code null} if the field is not found.
 */
public static Object getBuildConfigValue(Context context, String fieldName) {
    try {
        Class<?> clazz = Class.forName(context.getPackageName() + ".BuildConfig");
        Field field = clazz.getField(fieldName);
        return field.get(null);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
    return null;
}

要获取DEBUG字段,例如,只需从库Activity调用此字段:

boolean debug = (Boolean) getBuildConfigValue(this, "DEBUG");

我还没有尝试过,并不能保证它会一直有效,但你可以继续!

答案 1 :(得分:5)

在AndroidManifest文件上检查debuggable标签是更好的方法:

public static boolean isDebuggable(Context context) {
    return ((context.getApplicationInfo().flags 
            & ApplicationInfo.FLAG_DEBUGGABLE) != 0);
}