新增一個專案
在初始架構時自訂義了一個 Application
並且在 Mainfest 註冊完成
不過開啟 app 卻發生閃退的問題
提示錯誤如下:
java.lang.RuntimeException: Unable to instantiate application com.base.BaseApplication: java.lang.IllegalAccessException: void com.base.BaseApplication.<init>() is not accessible from java.lang.Class<android.app.AppComponentFactory
上網 google 了一下
遇到 Unable to instantiate application 的人不在少數
不過原因不同
比如說後面接 ClassNotFoundException 的
有一時期是 gradle build tools 的版本造成的
大多在 com.android.tools.build:gradle:2.X.X 的時候發生
我們現在已經是 3.X.X 了,和我們關係不大
ClassNotFoundException 的原因還有一個
就是粗心的問題
在 Manifest 註冊如下
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxx.xxx">
<application
android:name=".base.BaseApplication"
。。。>
有些人沒有加 manifest.package
則需要在 application.name 標示完整路徑
如:com.xxx.xxx.base.BaseApplication
有些人則是打錯字 or base 前沒沒加 "."
而今天我們後面提示的原因為
java.lang.IllegalAccessException: void com.base.BaseApplication.<init>() is not accessible from java.lang.Class<android.app.AppComponentFactory
這個也有人發生過,不過是在 java 的時候
在寫 Application 的時候宣告成 protected or private class 造成無法讀取的關係
以 Kotlin 來寫的話,就像這樣
class BaseApplication : Application(){
不用加 public 沒關係, 預設就是了
注意也不能用 object 來宣告
object BaseApplication : Application(){
改好之後再試 run 一次 app 即可正常運行
留言列表