java–IllegalAccessError:类无法访问方法

java–IllegalAccessError:类无法访问方法,第1张

概述我有一个非常奇怪的错误,因为它只发生在从生成的.apk安装应用程序后.当我尝试通过IDE运行应用程序时,它工作正常.java.lang.IllegalAccessError:Method'int<package>.BaseActivity$Companion.getANIMATION_SLIDE_FROM_RIGHT()'isinaccessibletoclass'<package>.MyActivit

我有一个非常奇怪的错误,因为它只发生在从生成的.apk安装应用程序后.当我尝试通过IDE运行应用程序时,它工作正常.

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)

正如您所看到的,有一个名为BaseActivity的类,如下所示:

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}

现在每个活动都扩展了这个类,并经常覆盖animationKind,如下所示:

class MyActivity: BaseActivity() {    overrIDe var animationKind = ANIMATION_SLIDE_FROM_RIGHT    // Some other stuff}

问题是MyActivity无法访问ANIMATION_SLIDE_FROM_RIGHT.我将重复它只发生在手动生成的.apk上.有趣的是我没有使用multIDex,但错误似乎表明BaseActivity在classes3.dex中.这是我的gradle文件:

apply plugin:’com.androID.application’
apply plugin:’kotlin-androID’
apply plugin:’kotlin-android-extensions’
申请插件:’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}

我尝试使用multIDexEnabled false / true,但唯一的变化是在false状态下,classes3.dex后缀消失了.

UPDATE

当然,当我将MyActivity的animationKind属性更改为1时,一切正常.

更新2

删除@JvmStatic并保护可见性后,它可以正常工作.

解决方法:

从official Kotlin documentation:

Java allows accessing protected members from other classes in the same
package and Kotlin doesn’t, so Java classes will have broader access
to the code

因此,请确保您的BaseActivity和MyActivity位于同一个包中.

如果两个活动不在同一个包中,那么它将通过从Studio直接运行完美运行,但是当您生成.apk并尝试通过安装该apk在设备上运行时它将崩溃(IllegalAccessError).

总结

以上是内存溢出为你收集整理的java – IllegalAccessError:类无法访问方法全部内容,希望文章能够帮你解决java – IllegalAccessError:类无法访问方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1111518.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存