Java.lang.NoClassDefFoundError для Android версии ниже Lollipop

У меня есть устройство Nexus 5 с Android 21 на нем. Я тестирую свой проект без проблем. Однако, если я тестирую эмулятор с API Google 19, он показывает ошибку java.lang.NoClassDefFoundError . Как эта ошибка может возникнуть, если она хорошо работает на Lollipop? Я даже спросил своего друга с устройством Sony 4.4, и он также разбился на его телефоне. У меня есть версия SDK для компиляции до 21, а Build Tools – 21.1.2. Я пробовал град чистой, и я работаю над Android Studio. Любая помощь будет высоко оценен.

Эта ошибка возникает только на устройствах, которые ниже Lollipop:

Это то, что появляется в Logcat:

 02-10 07:46:19.200 2238-2238/com.myproject.android.indonesia E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.myproject.android.indonesia, PID: 2238 java.lang.NoClassDefFoundError: com.myproject.android.indonesia.task.GetProjectTask$1 at com.myproject.android.indonesia.task.GetProjectTask.execute(GetProjectTask.java:27) at com.myproject.android.indonesia.activity.SplashActivity.launchProjectTask(SplashActivity.java:111) at com.myproject.android.indonesia.activity.SplashActivity.onCreate(SplashActivity.java:71) at android.app.Activity.performCreate(Activity.java:5231) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method) 

Вот фрагмент, который вызывает getProjectTask ()

 GetProjectTask mGetProjectTask = new GetProjectTask(this); mGetProjectTask.mUrl.append(Constants.Link.HOST).append(Constants.Webservice.GET_PROJECT); mGetProjectTask.params.put(Constants.Key.PRJ_LICENCE, Constants.Constant.LICENCE); mGetProjectTask.params.put(Constants.Key.LANGUAGE, currentLanguage); mGetProjectTask.params.put(Constants.Key.CTY_NAME, Constants.Value.APP_CTY_NAME); mGetProjectTask.execute(); 

UPDATE Кажется, мне нужно использовать последнюю версию одного из SDK, которые я использую, чтобы избежать этой ошибки (Aviary SDK). Когда я обновился, эта ошибка больше не появлялась.

Ваш класс (первый анонимный класс в GetProjectTask ) расширяет класс, который недоступен на этой платформе.

Если вы внимательно посмотрите на документацию API, вы увидите «добавленный в API x» в верхнем правом углу документации по классу и аналогичный текст в каждом API-методе.

Например, см. AnimatedVectorDrawable – он был добавлен на уровне API 21 (Lollipop).

Попытка использовать класс, который был добавлен в API 21 на старых устройствах, завершится неудачей, за исключением того, что вы ударили. Это неудивительно, так как, к сожалению, новые функции недоступны в более старых версиях ОС.

Вы можете преодолеть это исключение несколькими способами: использовать библиотеки совместимости, включив новые функции только в том случае, если телефон поддерживает его (путем проверки Build.Version.SDK_INT или с помощью специальной папки res api, например layout-v21 .

Другая альтернатива – установить minSdkVersion на 21, тогда ваше приложение откажется устанавливать на более старые устройства (и не будет доступно в их магазинах Google Play).

Дополнительную информацию об этой теме см. В документах Android по совместимости .