反编译apk,lambda问题

3
在反编译的apk中,出现了一些.java文件,但是有些文件的名称中包含"AudioPlayerActivity$$Lambda$1.java"这样的字符,那么这个"$$Lambda$1"是什么意思呢?

这些是编译器自动生成的类。 - Antimony
1个回答

3

“AudioPlayerActivity$$Lambda$1.java”基本上是在“AudioPlayerActivity.java”内部编写的一个匿名代码块,现在“AudioPlayerActivity.java”可以拥有任意数量的匿名代码块,因此在反编译它时,所有这些块都会按顺序转换为带有数字结尾的单独类。让我们举个例子,我有一个包含一个代码块的HelloWorld.java类。

runOnUiThread(new Runnable() {
        @Override
        public void run() {

        }
    });

还需要一个匿名块来为按钮添加 clicklistener,代码如下。

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

那么在反编译后,我会得到3个类:helloworld.smali、helloworld$1.smali(其中包含runOnUithread的代码)和helloworld$2.smali(其中包含onClickListener的代码)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接