Mam bibliotekę Android AAR. Jedna zasada bezpieczeństwa, którą chcę narzucić konsumentowi w aplikacji mojej biblioteki, polega na tym, że nie może ona używać mojej biblioteki, gdy jest ona prawdziwa lub apk jest tworzony przy użyciu . Jak mogę to sprawdzić programowo w systemie Android ?Jak sprawdzić typ kompilacji debuggable lub debug w bibliotece Androida?
Odpowiedz
istnieje obejście z refleksji w celu uzyskania (nie biblioteki) wartość BuildConfig projektu tak:
/**
* 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;
}
Aby uzyskać pole DEBUG
, na przykład, po prostu zadzwoń to z biblioteki Activity
:
boolean debug = (Boolean) getBuildConfigValue(this, "DEBUG");
Nie próbowałem tego jeszcze i nie mogę zagwarantować, że będzie działać cały czas, ale możesz iść dalej !!!
wydaje się być legit. Postaram się poinformować o wyniku. –
Przetestowałem to rozwiązanie i działa. –
cieszę się, że mogę pomóc !!! – matrix
możesz sprawdzić bibliotekę 'build.gradle', aby wykryć czy debugujesz czy nie, ale w jaki sposób zamierzasz sprawdzić' build.gradle 'konsumenta? – matrix
@KostasDrakonakis to dokładnie ten problem :) –
@FarhadFaghihi, ale jaki jest tego powód? Ważne jest to, że twoja biblioteka nie znajduje się w debugowaniu. Wszyscy rozwijają aplikację w trybie debugowania. –