Android R8不会混淆会员名称

时间:2020-03-27 18:59:22

标签: android obfuscation android-r8

我有此代码:

public static <A, B> B getPackageManagerReflection(A param1, Class<B> param2, byte[] param2, Object param4) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    ...
}

com.example.test.Utils.getPackageManagerReflection:

getPackageManagerReflection

使用Android Studio分析生成的apk,在classes.dex中有清晰可读的packageManagerReflection,但.line 225 .end local v2 # "packageManagerReflection":Landroid/content/pm/PackageManager; .end local v3 # "deviceId":Ljava/lang/String; .end local v5 # "exception":Ljava/lang/IllegalArgumentException; :catch_301 move-exception v2 .line 231 .local v2, "packageManagerReflection":Landroid/content/pm/PackageManager; nop 却不可读:

packageManagerReflection

我正在使用最新版本的Android Studio及其所有组件。

为什么成员reflection的名称保留在生成的代码中?

我已经尝试将其重命名为名称不带packageManagerRef的其他名称(例如seeds.txt,但仍在classes.dex中进行比较。

我也已经在mapping.txt的{​​{1}},usage.txtapp/build/outputs/mapping/debug中见过,但没有发生。

非常感谢!

1 个答案:

答案 0 :(得分:2)

应该在应用的发行版中剥离局部变量名称,它们对于执行不是必需的(并且不能通过反射使用)。因此,R8不需要也不必重命名它们。尝试在发行版本中查找相同的信息,但不应显示该信息。