Tag: 字节码

Kotlin为lambda生成内部类

在我的代码中,我有这样的东西: override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) presenter.onCreate() fabContainer.onClick { presenter.onLoginButtonClicked(…) } } 当我反编译apk和检查byteCode,这样的事情出现: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.presenter.onCreate(); Sdk23ListenersKt.onClick((ProgressFloatingActionButton) _$_findCachedViewById(com.prozis.prozisgo.prozisgo.R.id.fabContainer), new ActAuthLogin$onCreate$1(this)); } final class ActAuthLogin$onCreate$1 extends Lambda implements Function1<View, Unit> { final /* synthetic */ ActAuthLogin this$0; ActAuthLogin$onCreate$1(ActAuthLogin actAuthLogin) { this.this$0 = actAuthLogin; super(1); } public final void invoke(View it) { […]

Kotlin使用时的简单条件

我个人喜欢when语法,因为它导致身份更清晰。 不过,我担心我可能会这样做的“处罚”。 我并不是真正的字节码专家,但是我可以看到,对于相同的“逻辑”,when子句需要更多的字节码操作。 简单的文件与3个不同的Kotlin功能 package com.whatever fun method1(): String { return if (BuildConfig.DEBUG) "something" else "else" } fun method2(): String { return if (BuildConfig.DEBUG) { "something" } else { "else" } } fun method3(): String { return when (BuildConfig.DEBUG) { true -> "something" else -> "else" } } 生成的字节码 // access flags 0x19 public final […]

Kotlin是否提供额外的安全性?

当我们在Java中开发Android应用程序时,我们可以选择混淆代码并构建APK。 Kotlin有没有什么先进的功能可以做到这一点?

Kotlin是否与Android上的ART 100%兼容?

ART是Android上的“新”Dalvik运行时,自从Android 5.0以来已经取代了它。 我非常喜欢在JVM v8上运行的Kotlin和JavaFX。 我不确定Kotlin编译器生成的字节码版本,或者一旦达到v1.0版本状态就会生成字节码版本。 所以问题是:ART现在是否能够运行“Kotlin代码”,并且将来能够运行Kotlin代码,例如当Kotlin编译器要发射Java8字节码时? 或者ART不依赖于Kotlin编译器发出的字节码?