close

新增一個專案

在初始架構時自訂義了一個 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 即可正常運行

 

 

 


arrow
arrow

    顏澤偉 發表在 痞客邦 留言(0) 人氣()