我第一次尝试使用R8进行混淆和代码优化的Android Studio版本。
混淆代码
混淆的目的是通过缩短应用程序的类,方法和名称来减小应用程序的大小 字段。
我认为R8将重命名所有方法和类名,但是如果我通过“ Build-> Analyze APK ...”分析APK,则可以读取大多数原始方法和类名。
Contenuti
是manifest.xml
中提到的活动。
mostraView
和nascondiView
是我创建的方法,它们不在任何库中,也不扩展任何内容,因此我希望看到它们的名称更改。
void mostraView(View v)
{
v.setVisibility(View.VISIBLE);
}
void nascondiView(View v)
{
v.setVisibility(View.GONE);
}
此R8的行为正确吗?
如何设置R8来混淆它们,或者至少混淆这两个?
非常感谢!
答案 0 :(得分:3)
此默认规则可能是原因:
# We want to keep methods in Activity that could be used in the XML attribute onClick.
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
我是通过使用诊断开关-printseeds
和-printconfiguration
获得的。
匹配的方法将是(a)在扩展Activity的类中定义的,并且(b)具有与模式匹配的方法签名(基本上是任何名称和View参数)。
但是,唯一可以重现您问题的方法是,如果我修改了访问修饰符以包含public
,如下所示:
public void mostraView(View v)
{
v.setVisibility(View.VISIBLE);
}
请注意添加了关键字public
。因此,假设您发布的代码是逐字记录的,那么默认访问修饰符是不匹配该模式的package friend。
无论如何,我都可以进行-经过重述的修改可以重现该问题,并提供了基于默认-keeps的可能解释。
请注意,术语“保持”被重载,因为它也适用于混淆。