java.lang.RuntimeException: Unable to get provider cn.jpush.android.service.DataProvider

Android Studio 3.1.2 報錯:

java.lang.RuntimeException: Unable to get provider cn.jpush.android.service.DataProvider: java.lang.ClassNotFoundException: Didn’t find class 「cn.jpush.android.service.DataProvider」 on path: /data/app/com.example.testapp-2.apk

錯誤原因

測試機器: HTC 802d (Android 4.2.2 API 17)
之前都是跑在我自己的手機上,Mix2 Android 8.0 ,所以一直都是沒問題的,當跑在低版本時突然出問題了。
找了很多資料,在我的項目中是由於 multiDex 配置原因。
因爲在 Android5.0 以前使用 multidex 需要引入Google提供的 android-support-multidex.jar 這個jar包。

解決步驟

  • 在 AndroidStudio 和 Gradle 編譯環境中,如果要使用 multidex,首先要使用 Android SDK Build Tools 21.1 及以上版本。接着修改工程中 app 目錄下的 build.gradle 文件,在 defaultConfig 中添加 multiDexEnabled true

  • 接着在 dependencies 中添加依賴 compile 'com.android.support:multidex:1.0.3'

  • 最後在代碼中加入支持 multidex 的功能,有三種方案可選

    1. 第一種方案:在 manifest 文件中指定 Application 爲 MultiDexApplication
      第一種方案

    2. 第二種方案:讓應用的 Application 繼承 MultiDexApplication

    3. 第三種方案:如果不想讓應用的 Application 繼承 MultiDexApplication,還可以選擇重寫 Application 的 attachBaseContext 方法,在該方法裏面加入MultiDex.install(this),這個方法比 Application 的 onCreate 要先執行。
      第三種方案