Как проверить отлаживаемый или отладочный тип сборки в библиотеке Android?

У меня есть библиотека Android AAR. Одна политика безопасности, которую я хочу наложить на потребительское приложение моей библиотеки, заключается в том, что она не должна иметь возможность использовать мою библиотеку, когда debuggable true или apk создан с использованием debug buildType.

Как я могу проверить это программно в Android?

1 ответ

Решение

Существует обходной путь с отражением для получения значения 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");

Я еще не пробовал это и не могу гарантировать, что это будет работать все время, но вы можете идти вперед!

Проверьте debuggable тег в файле AndroidManifest - лучший способ:

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