java – IllegalAccessError:类无法访问方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – IllegalAccessError:类无法访问方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2158字,纯文字阅读大概需要4分钟。
内容图文
![java – IllegalAccessError:类无法访问方法](/upload/InfoBanner/zyjiaocheng/735/d8456b8313c74484abfb690bcecc8fed.jpg)
我有一个非常奇怪的错误,因为它只发生在从生成的.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:类无法访问方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。