1

我第一次尝试使用 R8 执行混淆和代码优化的 Android Studio 版本。

正如官方文档所说:

混淆你的代码

混淆的目的是通过缩短应用程序的类、方法和字段的名称来减小应用程序的大小。

我认为 R8 会重命名所有方法和类名,但是如果我通过“Build -> Analyze APK...”分析 APK,我可以读取大部分原始方法和类名。

在此处输入图像描述 在此处输入图像描述

Contenuti是 Activity 中提到的manifest.xml

mostraView并且nascondiView是我创建的方法,它们不在任何库中,它们不扩展任何内容,所以我希望看到它们的名称发生变化。

void mostraView(View v)
{
     v.setVisibility(View.VISIBLE);
}
void nascondiView(View v)
{
     v.setVisibility(View.GONE);
}

这 R8 的行为是否正确?

如何设置 R8 来混淆所有这些,或者至少这两个?

非常感谢!

4

1 回答 1

4

此默认规则可能是原因:

# 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。因此,假设您发布的代码是逐字记录的,那么默认访问修饰符是与模式不匹配的包朋友。

无论如何,就我所能采取的 - 能够通过注意修改重现问题并提供基于默认 -keeps 的可能解释。

请注意,术语“保持”是重载的,因为它也适用于混淆。

于 2019-11-06T14:06:41.467 回答