2014-01-23 57 views
1

我有一個用於嘗試推送通知的Android應用程序。 到目前爲止,我已經是一個簡單的活動,從而啓動以下檢查功能: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; 
    } 

這個是從官方教程。

但是,當我嘗試在模擬器或手機(galaxy 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了這一點,據我理解正確的話,這意味着我的手機錯過了谷歌服務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> 

搖籃構建腳本:

<?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

我遇到過這個問題......請將SDK中的GooglePlayService項目作爲依賴項模塊添加到您的項目中。這可能有幫助。該項目的路徑是android_sdk \ extras \ google \ google_play_services \ libproject \

+0

是,我已經試着在apk中手動打包jar。我將它包含在我的gradle腳本中:'編譯文件('lib/google-play-services.jar')',但jar的內容不會進入apk的classes.dex。 –

+0

我通過在intellij中添加模塊並定義依賴項來完成它,所以我不知道如何在maven或gradle中執行它。 – RMachnik

相關問題