Proguard 不拆除原木

问题描述 投票:0回答:2

我仅在调试环境中使用 Timber 日志登录我的 Android 应用程序,为此,我在我的应用程序类中添加了这一行:-

if (BuildConfig.DEBUG) {
    Timber.plant(new Timber.DebugTree());
}

随后,我在整个申请过程中完美地使用了它。另外,我通过将这些行添加到我的

proguard-rules.pro
文件中来混淆发布构建变体的 Timber 日志:-

-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'
}

尽管如此,在我的生产应用程序中,我还是因 Timber 日志语句之一内的 NullPointerException 而导致 Crashlytics 崩溃,首先,Timber 日志不应该出现在生产应用程序中,因为我已经把它剥离了,而且,我只在调试环境中植入了Timber日志,所以我不明白为什么它没有被剥离。

android proguard timber-android
2个回答
2
投票

我认为木材上已经使用了原木。您可以尝试在 proguard-rules.pro 上使用 Log 添加 Timber

# 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(...);
}

0
投票

我在这里回答了这个问题:https://stackoverflow.com/a/78385702/6022242

TL;博士:

Timber 生成/使用一个

Forest
伴随对象,因此必须删除该伴随对象的方法

-assumenosideeffects public class timber.log.Timber$Forest {
    public *** d(...);
    public *** v(...);
    public *** i(...);
    public *** w(...);
    public *** e(...);
    public *** wtf(...);
}

此外,如果您的项目还包含

Java
代码,请确保您还保留原始的混淆器规则,因为上面的代码适用于
Kotlin
代码。

#works for kotlin
-assumenosideeffects public class timber.log.Timber$Forest {
    public *** d(...);
    public *** v(...);
    public *** i(...);
    public *** w(...);
    public *** e(...);
    public *** wtf(...);
}

#works for java
-assumenosideeffects class timber.log.Timber {
    public static *** v(...);
    public static *** d(...);
    public static *** i(...);
    public static *** e(...);
    public static *** w(...);
}
© www.soinside.com 2019 - 2024. All rights reserved.