IllegalAccessError: Método es inaccesible a la clase

Nominalista :

Tengo muy extraño error, ya que sólo ocurre después de instalar la aplicación desde generada .apk. Cuando trato de ejecutar la aplicación a través de IDE, que funciona bien.

java.lang.IllegalAccessError: Method 'int <package>.BaseActivity$Companion.getANIMATION_SLIDE_FROM_RIGHT()' is inaccessible to class '<package>.MyActivity' (declaration of '<package>.MyActivity' appears in /data/app/<package>-mg7eYmJ8hX5WvkNWNZWMVg==/base.apk!classes3.dex)

Como se puede ver que se llama la clase BaseActivityque tiene este aspecto:

open class BaseActivity : AppCompatActivity() {

    companion object {
        @JvmStatic
        protected val ANIMATION_DEFAULT = 0
        @JvmStatic
        protected val ANIMATION_SLIDE_FROM_RIGHT = 1
        @JvmStatic
        protected val ANIMATION_SLIDE_FROM_BOTTOM = 2
    }

    protected open var animationKind = ANIMATION_DEFAULT

    // Some other stuff
}

Ahora, cada actividad se extiende esta clase y, a menudo anula la animationKindsiguiente manera:

class MyActivity: BaseActivity() {

    override var animationKind = ANIMATION_SLIDE_FROM_RIGHT

    // Some other stuff
}

El problema es que ANIMATION_SLIDE_FROM_RIGHTes inaccesible para MyActivity. Voy a repetir que sólo ocurre en generar manualmente .apk. Lo curioso es que no estoy usando multidex, pero el error parece demostrar que BaseActivityestá en classes3.dex. Aquí está mi archivo Gradle:

aplicar plugin: 'com.android.application' aplicar plugin: 'Kotlin-android' se aplica plugin: 'Kotlin-android-extensions' aplicar plugin: 'Kotlin-Kapt'

android {

    compileSdkVersion 28

    defaultConfig {
        applicationId <package>
        versionCode <versionCode>
        versionName <versionName>
        minSdkVersion 21
        targetSdkVersion 28
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    androidExtensions {
        experimental = true
    }
}

dependencies {

    // Dependencies
}

Traté de jugar con multidexEnabled false/true, pero el único cambio es que en el falseestado del classes3.dexsufijo desaparece.

ACTUALIZAR

Por supuesto, cuando cambio MyActivity's animationKindpropiedad para 1, a continuación, todo funciona bien.

ACTUALIZACIÓN 2

Después de la eliminación @JvmStaticy la visibilidad protegida funciona bien.

Vinay Rathod:

A partir de la documentación oficial Kotlin :

Java permite acceder a los miembros protegidos de otras clases en el mismo paquete y Kotlin no, por lo que las clases de Java tendrá un acceso más amplio al código

Así que, por favor asegúrese de que su BaseActivityy MyActivityse encuentran bajo el mismo paquete.

Si ambas actividades no están bajo el mismo paquete a continuación, se ejecuta a la perfección por escorrentía directa del estudio, pero se bloqueará (IllegalAccessError), mientras que se genera apk e intenta ejecutar en el dispositivo mediante la instalación que apk.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=186597&siteId=1
Recomendado
Clasificación