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

2019-04-14 00:31:09 +08:00
 ghd700
public void reportAdrOpen(String str, String str2) {
	new 2(this, str, str2, str, str2).C();
}

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

11810 次点击
所在节点    Android
9 条回复
0myun
2019-04-14 00:32:38 +08:00
Nitroethane
2019-04-14 00:49:23 +08:00
代码被混淆了,类和方法名被替换成了无意义的字符
ghd700
2019-04-14 00:50:56 +08:00
@0myun @Nitroethane
好吧,项目里 90%的代码没混淆,我以为它没混淆过。
googlelalala
2019-04-14 06:48:24 +08:00
现在不是都被混淆了吗?
whileFalse
2019-04-14 07:35:45 +08:00
类名可以是个数字?
610xiao
2019-04-14 08:53:06 +08:00
直接看 smali 层就行了
zealot0630
2019-04-14 09:01:59 +08:00
@whileFalse 好像是可以,jvm 层面的限制比 Java 层面宽松多了
HhZzXx
2019-04-14 09:28:45 +08:00
```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-04-14 10:39:27 +08:00
这个是内部类,直接看当前类名$2.class 这个文件

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

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

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

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

© 2021 V2EX