我有以下语句proguard-rules.pro
来删除生产 apk 中的日志记录:
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
这具有删除以下语句的效果:
Log.d(TAG, "setup finished");
现在让我们考虑以下语句:
Log.d(TAG, "setup finished with status " + client.getStatus());
到目前为止,我的假设是该Log.d()
语句将被删除,因此client.getStatus()
永远不会被调用。
具体来说,如果client
碰巧是,null
那么我的假设是不会有NullPointerException
.
但现在我不太确定。也许编译器看起来更像下面的语句:
int status = client.getStatus();
Log.d(TAG, "setup finished with status " + status);
现在该client.getStatus()
语句已执行并NullPointerException
可能产生结果。
实际情况如何?
注意:我现在实际上使用的是 R8 而不是 ProGuard。