Home > Net >  why a field named "$r8$clinit" was generated in an interface in its smali code?
why a field named "$r8$clinit" was generated in an interface in its smali code?

Time:02-10

I have an interface A.kt like this in an Android app:

interface A {

    fun f1(defaultValue: String): String

    fun f2(defaultValue: Boolean): Boolean

    private class B(context: Context) : A {
         // ...
    }

    companion object {
        operator fun invoke(context: Context): A = B(context)
        const val Old = "old"
    }
}

Then I check the smali code generated from it:

.class public interface abstract Lxx/xx/A;
.super Ljava/lang/Object;
.source "A.kt"


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lxx/xx/A$B;
    }
.end annotation


# static fields
.field public static final synthetic $r8$clinit:I // <======== What does this field mean?


# virtual methods
.method public abstract f1(Ljava/lang/String;)Ljava/lang/String;
.end method

.method public abstract f2(Z)Z
.end method

I found a field named $r8$clinit was generated in the smali code. I hope to know why this field is generated and what is the purpose of it?

CodePudding user response:

  •  Tags:  
  • Related