【发布时间】:2020-09-07 02:52:48
【问题描述】:
我很难学习 proguard,我需要帮助来删除所有 R8 警告并正确实施 proguard 规则。我大部分时间都在 youtube 上观看了所有视频,并阅读了有关 proguard / proguard-rules 的博客、文档和文章,但到目前为止我仍然有很多问题,我将一一列举。以下是我的问题:
- 到目前为止,我知道当我创建模型类时,我需要在包中添加
-keep class,这样它就不会被混淆,但是像这样的模型怎么样:(我是否还要在保护规则?)
public class Constants {
public static final int ERROR_DIALOG_REQUEST = 9001;
public static final int PERMISSIONS_REQUEST_ENABLE_GPS = 9002;
public static final int PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 9003;
public static final String LOG_DB = "DB_Error";
}
//Or like this:
public class CameraView extends SurfaceView implements SurfaceHolder.Callback {
public CameraView(Context context) {
super(context);
getHolder().addCallback(this);
setFocusableInTouchMode(true);
setFocusable(true);
requestFocus();
}
@Override
public void surfaceCreated(SurfaceHolder holder) { }
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }
@Override
public void surfaceDestroyed(SurfaceHolder holder) { }
}
-
像
RecyclerAdapter或FirestorePagingAdapter这样的适配器类怎么样?我知道他们会受到混淆的影响,但我们应该让它混淆吗?还是我们也应该将其添加到规则中? -
活动类也是如此,有什么必要做的?例如,如果我从数据库中检索数据,它会影响过程吗?
-
接下来是关于图书馆的。我知道我应该在每个依赖项中添加相应的 proguard 规则,但我看到一些博客说它需要添加 OkHttp3,即使他没有将实现添加到他的依赖项中。所以我想出了一个问题,我应该如何知道是否还有其他库需要添加到规则中?
-
最后,我应该如何调试我的规则,或者我应该如何知道我是否在 proguard 中包含或遗漏了一些规则? (如果可能的话,你能举一些调试proguard-rules的例子吗)
希望你能回答我所有的问题,因为我很确定外面的人也在为 proguard 苦苦挣扎,所以我希望如果他们看到这些问题,它将帮助他们克服这种情况,而不会很难找到答案分别在网上。谢谢!
【问题讨论】: