それだけで生成されたからアプリをインストールした後に起こるので、私は、非常に奇妙なエラーを持っています.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
}
問題は、それがあるANIMATION_SLIDE_FROM_RIGHT
ためアクセスできないMyActivity
。私はそれが手動でのみ生成に起こることを繰り返すことになります.apk
。面白いことに、私はmultidexを使用していないんだけど、エラーがあることを示すように見えるということであるBaseActivity
ですclasses3.dex
。ここに私のGradleファイルは以下のとおりです。
'com.android.application' プラグイン適用されます:プラグイン適用 'kotlin-アンドロイドは、' プラグイン適用されます:「kotlin-アンドロイド-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
サフィックスが消えます。
更新
私が変更されたときもちろんMyActivity
のanimationKind
プロパティをし1
、その後、すべてが正常に動作します。
UPDATE 2
除去した後@JvmStatic
、視認性を保護し、それが正常に動作します。
Javaは、Javaクラスは、コードへのより広範なアクセスを持つことになりますので、同じパッケージに他のクラスからprotectedメンバにアクセスし、Kotlinにはないことができます
だから、必ずあなたのことを確認してくださいBaseActivity
とMyActivity
同じパッケージの下にあります。
両方の活動は、同じパッケージ下にない場合、それはメーカーからの直接実行によって完全に実行されますが、あなたがた.apk生成し、そのAPKをインストールすることで、デバイス上で実行しようとしながら、それは(ないIllegalAccessErrorを)クラッシュします。