0

У меня было приложение работает нормально до сегодняшнего дня. Чтобы сделать некоторую интеграцию с загружаемым модулем (я использую Android Studio), мне пришлось обновлять сервисы Google Play с 6.1.0 до 7.3.0 (последние). Я также использую внешнюю библиотеку, и я знаю, что она работает нормально, и с ней нет проблем.Google Play Services и NoClassDefFoundError

Дело в том, что я обновляю свой файл градации новой версией Службы Google Play, я получаю NoClassDefFoundError во время выполнения (жалуюсь на мою внешнюю библиотеку). Я пробовал все, но ничего не работает (убедитесь, что .jar в порядке, который фактически экспортируется, очищается 1000 раз, перестраивает, удаляет папку сборки и т. Д.). Если я вернусь к сервисам Google Play 6.1.11, приложение будет работать так, как раньше.

Это сводит меня с ума ...

Мой build.gradle

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:21.0.3' 
compile 'com.google.android.gms:play-services:7.3.0' 
compile files('libs/mylibrary.jar') 

}

Журнал ошибок:

05-06 15:23:56.544 31574-31574/com.rippll.okchat E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.rippll.okchat, PID: 31574 
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/rippll/geowave/Geowave; 
     at com.rippll.okchat.MainActivity.onCreate(MainActivity.java:92) 
     at android.app.Activity.performCreate(Activity.java:5953) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388) 
     at android.app.ActivityThread.access$800(ActivityThread.java:148) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5312) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.rippll.geowave.Geowave" on path: DexPathList[[zip file "/data/app/com.rippll.okchat-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]] 
     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
            at com.rippll.okchat.MainActivity.onCreate(MainActivity.java:92) 
            at android.app.Activity.performCreate(Activity.java:5953) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388) 
            at android.app.ActivityThread.access$800(ActivityThread.java:148) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5312) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
Suppressed: java.lang.NoClassDefFoundError: com.rippll.geowave.Geowave 
     at dalvik.system.DexFile.defineClassNative(Native Method) 
     at dalvik.system.DexFile.defineClass(DexFile.java:226) 
     at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219) 
     at dalvik.system.DexPathList.findClass(DexPathList.java:321) 
     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54) 
     ... 16 more 
Suppressed: java.lang.ClassNotFoundException: com.rippll.geowave.Geowave 
     at java.lang.Class.classForName(Native Method) 
     at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
     at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
     ... 15 more 
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

ответ

1

Google Wear не поддерживает Google Play Services v7.x еще нет.

Таким образом, вы должны использовать Google Play Services V6.x в вашем носимого проекте, например, в вашем build.gradle файле проекта износа:

dependencies { 
    compile 'com.google.android.gms:play-services:6.5.87' 
} 

Но в вашем проекте мобильных (портативных), вы можете использовать последние V7.x версия библиотеки, если вы действительно нуждается в этом, как:

dependencies { 
    wearApp project(':yourWearProjectName') 
    compile 'com.android.support:appcompat-v7:22.0.0+' 
} 
+0

Спасибо за ваш ответ. Вы уверены, что? Согласно документации, я думаю, что она поддерживает Google Play Services 7.3. Фактически внутри этой версии мы можем найти com.google.android.gms: play-services-wearable: 7.3.0 (http://developer.android.com/google/play-services/setup.html) Если я хочу отправлять сообщения из загружаемого приложения в приложение для телефона ... мне нужно иметь одну и ту же версию сервисов Google Play в обоих модулях? – Rafag

+0

Кроме того, используя сервисы google play 6.5.87 только в графе приложения, я получаю ту же ошибку времени выполнения ... NoClassDefFoundError – Rafag

+0

Репозиторий Maven содержит версию 7.3.0 каждого модуля служб Play. –

1

Существует предел ~ 65000 методов для вашего .apk. Службы Google Play растут по размеру с каждым выпуском, и когда вы включаете их в свой проект, вы можете очень быстро перепрыгнуть через этот предел количества методов. Решение состоит в том, чтобы использовать только нужные вам модули.

Прочтите внимательно https://developer.android.com/google/play-services/setup.html

+0

Привет, спасибо за ответ. К сожалению, я тоже пробовал это, но все же получил ошибку времени выполнения. – Rafag

+0

Получаете ли вы ошибку после использования proguard? Вы пытались запустить «gradlew lint» и анализировать ошибки результатов/исправления? –