在方法的类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(...);
}
我还在gradle.properties文件中禁用了R8:
android.enableR8=false
但是,在构建项目后(使用 buildVariant debugProguardTest),方法调用
Log.d(TAG, "onCreate method was invoked")
尚未从 apk 中删除。在 Apk Analyzer 中,我仍然看到以下行:
const-string v0, "onCreate method was invoked"
为什么会这样?Proguard 如何Log.d()
从 apk 中截断方法调用?
只需使用proguard-android-optimize.txt而不是proguard-android.txt,因为 proguard -android.txt使用dontoptimize和dontpreverify,这可以防止日志被删除(除其他外)。