Home » Android » java – How to check debuggable or debug build type in android library?

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

Posted by: admin June 15, 2020 Leave a comment

Questions:

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 ?

How to&Answers:

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!!!

Answer:

Check debuggable tag on AndroidManifest file is the better way:

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