gpt4 book ai didi

java - 非法访问错误 : Method is inaccessible to class

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:36 25 4
gpt4 key购买 nike

我遇到了一个非常奇怪的错误,因为它只发生在从生成的 .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
}

现在每个 Activity 都扩展了这个类,并且经常像这样覆盖 animationKind:

class MyActivity: BaseActivity() {

override var animationKind = ANIMATION_SLIDE_FROM_RIGHT

// Some other stuff
}

问题是 ANIMATION_SLIDE_FROM_RIGHT 对于 MyActivity 是不可访问的。我会重复,它只发生在手动生成的 .apk 上。有趣的是我没有使用 multidex,但错误似乎显示 BaseActivityclasses3.dex 中。这是我的 gradle 文件:

应用插件:'com.android.application'应用插件:'kotlin-android'应用插件:'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 后缀消失了。

更新

当然,当我将 MyActivityanimationKind 属性更改为 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

因此,请确保您的BaseActivityMyActivity 在同一个包下。

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

关于java - 非法访问错误 : Method is inaccessible to class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51435580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com