How to check debuggable or debug build type in android library?

android, android-buildconfig, android-gradle-plugin, android-studio, java

Solution

There is a workaround with reflection in order to get the project's(not library's) BuildConfig value like this:

/**
 * 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;
}

To get the `DEBUG` field, for example, just call this from library `Activity`:

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

I have not tried this yet and cannot guarantee it will work all the time but you can go ahead!!!

Problem

I have an Android AAR library. One security policy I want to impose on the consumer application of my library, is that it must not be able to use my library when `debuggable` is true or the apk is created using the `debug buildType.` How can I check this programmatically in android ?

Original source