Android R8 不混淆成员名称
Android R8 does not obfuscate a member name
我有这个代码:
import static com.example.test.Utils.getPackageManagerReflection;
...
public class MainActivity extends AppCompatActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
PackageManager packageManagerReflection;
try {
packageManagerReflection = getPackageManagerReflection(...);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if(packageManagerReflection == null) {
finish();
return;
}
}
...
}
com.example.test.Utils.getPackageManagerReflection:
public static <A, B> B getPackageManagerReflection(A param1, Class<B> param2, byte[] param2, Object param4) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
...
}
使用 Android Studio 分析生成的 apk,在 classes.dex 中有 packageManagerReflection 清晰可读,但 getPackageManagerReflection
没有:
.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
我使用的是最新版本的 Android Studio 及其所有组件。
为什么生成的代码中保留了成员 packageManagerReflection
的名称?
我已经尝试将其重命名为不带 reflection
的其他名称(例如 packageManagerRef
但它仍然与 classes.dex.
进行比较
我也已经在 seeds.txt
、mapping.txt
和 usage.txt
中看到 app/build/outputs/mapping/debug
,但是没有出现。
非常感谢!
局部变量名称预计会在应用程序的发布版本中被删除,它们不是执行所必需的(并且无法通过反射获得)。因此,R8 不需要也不会重命名它们。尝试在发布版本中查找相同的信息,它不应该存在。
我有这个代码:
import static com.example.test.Utils.getPackageManagerReflection;
...
public class MainActivity extends AppCompatActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
PackageManager packageManagerReflection;
try {
packageManagerReflection = getPackageManagerReflection(...);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if(packageManagerReflection == null) {
finish();
return;
}
}
...
}
com.example.test.Utils.getPackageManagerReflection:
public static <A, B> B getPackageManagerReflection(A param1, Class<B> param2, byte[] param2, Object param4) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
...
}
使用 Android Studio 分析生成的 apk,在 classes.dex 中有 packageManagerReflection 清晰可读,但 getPackageManagerReflection
没有:
.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
我使用的是最新版本的 Android Studio 及其所有组件。
为什么生成的代码中保留了成员 packageManagerReflection
的名称?
我已经尝试将其重命名为不带 reflection
的其他名称(例如 packageManagerRef
但它仍然与 classes.dex.
我也已经在 seeds.txt
、mapping.txt
和 usage.txt
中看到 app/build/outputs/mapping/debug
,但是没有出现。
非常感谢!
局部变量名称预计会在应用程序的发布版本中被删除,它们不是执行所必需的(并且无法通过反射获得)。因此,R8 不需要也不会重命名它们。尝试在发布版本中查找相同的信息,它不应该存在。