Я использую журналы Древесина для ведения журнала в своем приложении Android только в среде отладки, для этой цели я добавил эту строку в свой класс приложения: -
if (BuildConfig.DEBUG) {
Timber.plant(new Timber.DebugTree());
}
Впоследствии я безупречно использовал это в своем приложении. Кроме того, я запутал журналы Timber для варианта сборки выпуска, добавив эти строки в свой файл proguard-rules.pro: -
-assumenosideeffects class timber.log.Timber* {
public static *** v(...);
public static *** d(...);
public static *** i(...);
public static *** e(...);
public static *** w(...);
}
В build.gradle моего приложения я добавил следующее:
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
Несмотря на все это в моем рабочем приложении, у меня произошел сбой в Crashlytics, вызванный NullPointerException внутри одного из операторов журнала Timber, журнал Timber, прежде всего, не должен был быть в рабочем приложении, поскольку я я его урезал, более того, Timber log я подложил только в отладочной среде, так что не понимаю, почему он не урезан.
@seyedJafari Можете ли вы объяснить, почему Timber добавлен в вариант сборки релиза, когда я специально упомянул if (BuildConfig.DEBUG)?
как я уже сказал, я не уверен, но функция удаления кода доступна только в оптимизированном proguard
Я думаю, что в Timber используется Log. Вы можете попробовать добавить Timber with Log на proguard-rules.pro
# Remove log
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int d(...);
public static int w(...);
public static int v(...);
public static int i(...);
public static int e(...);
}
-assumenosideeffects class timber.log.Timber* {
public static *** d(...);
public static *** w(...);
public static *** v(...);
public static *** i(...);
public static *** e(...);
}
насколько я помню, если вы хотите, чтобы proguard удалил код. вы должны использовать его оптимизированную версию