反编译一个 app 的代码看到的,请问这是什么操作?

2019 年 4 月 14 日
 ghd700
public void reportAdrOpen(String str, String str2) {
	new 2(this, str, str2, str, str2).C();
}

new 一个 2 ?这里有没有大神讲一下是什么意思?

16329 次点击
所在节点    Android
9 条回复
0myun
2019 年 4 月 14 日
Nitroethane
2019 年 4 月 14 日
代码被混淆了,类和方法名被替换成了无意义的字符
ghd700
2019 年 4 月 14 日
@0myun @Nitroethane
好吧,项目里 90%的代码没混淆,我以为它没混淆过。
googlelalala
2019 年 4 月 14 日
现在不是都被混淆了吗?
whileFalse
2019 年 4 月 14 日
类名可以是个数字?
610xiao
2019 年 4 月 14 日
直接看 smali 层就行了
zealot0630
2019 年 4 月 14 日
@whileFalse 好像是可以,jvm 层面的限制比 Java 层面宽松多了
HhZzXx
2019 年 4 月 14 日
```java
public class S {
private void a() {
Object a = new Object() {
{
}
};

}
}
````
这段代码,用 jdk8 编译后,会产生两个 class 文件,`S.class`,`S$1.class`,用 fernflower 反编译`S.class`,可以看到如下信息
```java
import S.1;

public class S {
public S() {
super();
}

private void a() {
new 1(this);
}
}
```
而`S$1.class`反编译后的是这个
```java
class S$1 {
// $FF: synthetic field
final S this$0;

S$1(S this$0) {
super();
this.this$0 = this$0;
}
}
```
Blanke
2019 年 4 月 14 日
这个是内部类,直接看当前类名$2.class 这个文件

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/554927

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX