Удаление логов посредством Proguard

В классе ActorDetailsActivity в методе onCreate у меня есть следующий блок кода:

    Log.d(TAG, "onCreate method was invoked")

В app/build.gradle файле я имею следующие buildTypes:

buildTypes {
        debugProguardTest {
            initWith debug
            useProguard true
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            matchingFallbacks = ['debug']
        }
        release {
            useProguard true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

И сам файл proguard-rules.pro выглядит следующим образом:

-printusage ./removed-usaged.txt
-printseeds ./kept-seeds.txt
#-printmapping ./mapping.txt
-optimizationpasses 3
#-dontobfuscate

-dontwarn kotlinx.coroutines.flow.*
-dontwarn kotlinx.coroutines.flow.internal.*

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** w(...);
    public static *** v(...);
    public static *** i(...);
}

Также я выключила R8 в файле gradle.properties:

android.enableR8=false

Однако всё равно после сборки проекта (с buildVariant debugProguardTest ) вызов метода

Log.d(TAG, "onCreate method was invoked")

не был удалён из apk. В Apk Analyzer-e я всё равно вижу строку:

const-string v0, "onCreate method was invoked"

Почему так происходит? И как всё-таки вырезать Proguard-ом вызов методов Log.d() из apk?


Ответы (1 шт):

Автор решения: Olmicron

Просто используйте proguard-android-optimize.txt в место proguard-android.txt, т.к. в proguard-android.txt используется dontoptimize и dontpreverify, что не позволяет удалить лог (помимо прочего).

→ Ссылка