2014-01-23 4 views
1

У меня есть приложение для Android для тестирования push-уведомлений. До сих пор, все у меня есть простая деятельность, которая инициирует следующую функцию проверки:NoClassDefFoundError: com.google.android.gms.common.GooglePlayServicesUtil на устройстве

private boolean checkPlayServices() { 
    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
    if (resultCode != ConnectionResult.SUCCESS) { 
     if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { 
      GooglePlayServicesUtil.getErrorDialog(resultCode, this, 
        PLAY_SERVICES_RESOLUTION_REQUEST).show(); 
     } else { 
      out("Not Supported!"); 
      finish(); 
     } 
     return false; 
    } 
    return true; 
    } 

Это один из официального руководства.

Приложение работает без ошибок, однако, когда я пытаюсь запустить эту проверку в эмуляторе или на телефоне (галактика S4, android 4.2.2), он выдает NoClassDefFoundError.

Вот трассировки стека:

java.lang.IllegalStateException: Could not execute method of the activity 
     at android.view.View$1.onClick(View.java:3591) 
     at android.view.View.performClick(View.java:4084) 
     at android.view.View$PerformClick.run(View.java:16966) 
     at android.os.Handler.handleCallback(Handler.java:615) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4745) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at android.view.View$1.onClick(View.java:3586) 
     at android.view.View.performClick(View.java:4084) 
     at android.view.View$PerformClick.run(View.java:16966) 
     at android.os.Handler.handleCallback(Handler.java:615) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4745) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NoClassDefFoundError: com.google.android.gms.common.GooglePlayServicesUtil 
     at com.epam.move.notification.MainActivity.checkPlayServices(MainActivity.java:52) 
     at com.epam.move.notification.MainActivity.testClicked(MainActivity.java:41) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at android.view.View$1.onClick(View.java:3586) 
     at android.view.View.performClick(View.java:4084) 
     at android.view.View$PerformClick.run(View.java:16966) 
     at android.os.Handler.handleCallback(Handler.java:615) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4745) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
     at dalvik.system.NativeStart.main(Native Method) 

Я гугле это и, насколько я правильно понимаю, это означает, что мой телефон не попадает в Google Services APK.

Могу ли я передать свое приложение, чтобы включить его при упаковке, или мне нужно что-то установить на телефоне?

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.epam.move.notification" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="com.google.android.c2dm.intent.RECEIVE" /> 
<uses-permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE" /> 

<!--<permission android:name="com.google.android.gcm.demo.app.permission.C2D_MESSAGE" android:protectionLevel="signature" /> --> 

<uses-sdk 
    android:minSdkVersion="9" 
    android:targetSdkVersion="19" 
    /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="MoVE.n" 
    android:theme="@style/AppTheme" > 


    <activity 
     android:name="com.epam.move.notification.MainActivity" 
     android:label="MoVE.n" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 

Gradle скрипт сборки:

<?xml version="1.0" encoding="utf-8"?> 
buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.6.+' 
    } 
} 
apply plugin: 'android' 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.0" 

    defaultConfig { 
     minSdkVersion 9 
     targetSdkVersion 19 
    } 
} 

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile 'com.google.android.gms:play-services:4.0.30' 
} 

Спасибо.

+0

Возможный дубликат: http://stackoverflow.com/questions/17164736/android-the-import-com-google-cannot-be-resolved – kupsef

ответ

0

У меня была эта проблема ... пожалуйста, включите проект GooglePlayService из SDK в качестве модуля зависимости к вашему проекту. Это может помочь. Путь для этого проекта - android_sdk \ extras \ google \ google_play_services \ libproject \

+0

Да , Я уже пробовал как-то вручную упаковать банку в apk. Я включил это в свой сценарий градиента: 'компилировать файлы (' lib/google-play-services.jar ')', но содержимое jar не попадает в apk's classes.dex. –

+0

Я сделал это, добавив модуль в intellij и определяя зависимость, поэтому я не уверен, как это сделать в maven или gradle. – RMachnik

Смежные вопросы