Как проверить отлаживаемый или отладочный тип сборки в библиотеке 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);
}