1. 程式人生 > >debug模式執行報錯ClassNotFoundException 解決方法

debug模式執行報錯ClassNotFoundException 解決方法

前奏:

連續一個月的高強度開發接近尾聲,昨天拿到設計logo準備換上,但是一直不生效。

    <application
        android:name="com.example.lenovo.zhongye.ZhongYeApplication"
        android:allowBackup="true"
        android:icon="@mipmap/app_logo" // 更改圖片指向路徑
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light.NoActionBar">


烏龍:

手機的主介面就是launcher本身就是應用,使用者點選圖示 startActivity 啟動程式。這樣想來的話,一直無法更改應用圖示應該是 launcher 存在快取的情況。


解決辦法:

重啟手機難過——各種百度,更改配置,浪費3個小時。最終解決是重啟。

言歸正傳,由於前面的烏龍事件,讓我發現另一個問題。測試機一直無法更改圖示,所以我想借用同事的android機看看是否有同樣的問題。然後我打包上傳蒲公英,生成二維碼發給同事,讓幫忙安裝下試一試。好訊息是安裝圖片改變,壞訊息是 程式點選崩潰,無法啟動。印象中之前遇到這樣的問題。解決辦法是直接發個release包測試。但是這個問題如鯁在喉,不出不快。

報錯資訊:java.lang.RuntimeException Unable to instantiate applicationCaused by: java.lang.ClassNotFoundException: Didn't find class "com...activity


解決辦法:

專案build-gradle 降低你的gradle版本:

   dependencies {
       // classpath 'com.android.tools.build:gradle:2.3.3'  // 問題出現在gradle 2.3版本
        classpath 'com.android.tools.build:gradle:2.2.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }


參考:Android debug.apk 閃退 ClassNotFoundException 直接Run正常


我使用的降級方法,解決這個問題,還有種方法可以使用debug包,


生成測試所需debug.apk的時候使用 "Build" -> "Build APK" 生成,而非在裝置上直接"Run"這樣感覺不是很方便,

目前gradle高版本還不是我所需要的,所以我選擇降低處理。


原理:Android版本相容問題

高版本的裝置執行出的apk安裝在Android L以下的裝置上會報錯

低版本的裝置執行出的apk安裝在高版本裝置上正常

另外有人說,Google工程師的坑 gradle 3.3版本本身有問題。——仁者見仁,智者見智


PS:少說多聽,問題,解決是財富。迴避是隱患。