2012-12-05 207 views
43

我試圖讓Android的谷歌地圖Android API v2的sample code工作。我得到了沒有錯誤的項目。但是,當我嘗試在我的Galaxy Nexus上運行應用程序(與usb連接到我的筆記本電腦)時,該應用程序立即崩潰。谷歌地圖Android API v2 - 示例代碼崩潰

  • 我填寫在自己的地圖API密鑰在AndroidManifest.xml中
  • 我對內置的Android 4.1.2

這是日誌:

Unable to resolve superclass of Lcom/example/mapdemo/BasicMapActivity; (66) 
Link of class 'Lcom/example/mapdemo/BasicMapActivity;' failed 
Could not find class 'com.example.mapdemo.BasicMapActivity', referenced from method com.example.mapdemo.MainActivity.<clinit> 
VFY: unable to resolve const-class 108 (Lcom/example/mapdemo/BasicMapActivity;) in Lcom/example/mapdemo/MainActivity; 
VFY: replacing opcode 0x1c at 0x000d 
Exception Ljava/lang/NoClassDefFoundError; thrown while initializing Lcom/example/mapdemo/MainActivity; 
Class init failed in newInstance call (Lcom/example/mapdemo/MainActivity;) 
Shutting down VM 
threadid=1: thread exiting with uncaught exception (group=0x41ac9930) 
FATAL EXCEPTION: main 
java.lang.ExceptionInInitializerError 
at java.lang.Class.newInstanceImpl(Native Method) 
at java.lang.Class.newInstance(Class.java:1319) 
at android.app.Instrumentation.newActivity(Instrumentation.java:1054) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
at android.app.ActivityThread.access$600(ActivityThread.java:141) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5039) 
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:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NoClassDefFoundError: com.example.mapdemo.BasicMapActivity 
at com.example.mapdemo.MainActivity.<clinit>(MainActivity.java:97) 
... 15 more 

有誰知道一個提示如何解決這個問題或者我可能做錯了什麼?

+0

第一行發佈的stacktrace:'無法解析Lcom/example/mapdemo/BasicMapActivity的超類。看起來你讓'BasicMapActivity'擴展了錯誤的類。 –

回答

78

按照嬰兒牀片非常,非常仔細:
https://docs.google.com/document/pub?id=19nQzvKP-CVLd7_VrpwnHfl-AE9fjbJySowONZZtNHzw

特別,我想你需要:

  • 導入爲「谷歌播放services_lib」項目的實際來源和鏈接它作爲Android庫。
    • 通過Project - > Properties - > Android - > Library,Add - > google-play-services_lib(您可以右鍵單擊您的項目並選擇Properties,然後選擇Android)。
    • 不是通過項目的「Java構建路徑」將它作爲依賴項目添加它,這對我不起作用。
  • 將google-play-services.jar和android-support-v4.jar添加到示例項目的「libs」文件夾中,並將它們添加爲「Build Path - > Configure」中的「External External JARs」構建路徑 - >庫「。

我發現這第二步是必要的,因爲我在嘗試使用示例代碼時碰到與您完全相同的錯誤。第一步是避免在我的真實項目中com.google.android.gms.R$styleable中的NoClassDefFoundError

我還需要在示例代碼工作之前執行Clean build並從設備上卸載應用程序(從早期的測試嘗試)。

+11

謝謝!我確實必須將android-support-v4.jar放入一個新的「libs」文件夾中。 (在我將這個jar添加爲外部jar依賴項之前)現在,該應用程序不再崩潰。 – alexx

+2

非常感謝,非常有幫助 –

+18

謝謝,它對我很有幫助。順便說一句:在Android上有什麼東西真的有用,或者你需要解決所有問題嗎? – Ondra

26

跟隨next sample code instructions由谷歌。

跳過 「4」 部分,並按照下列指示:

  • 新文件夾添加到您的項目名爲 「庫」
  • 複製的Google Play-services.jar形式:

    「android-sdk-folder \ extras \ google \ play_service \ libproject \ google-play-services_lib \ libs」

    「libs」文件夾 - >在此文件夾中右鍵點擊此jar - > Build path - >添加到構建路徑。

  • 複製android-support-v4。JAR格式:

    「Android的SDK文件夾\演員\機器人\ SUPPORT \ V4」

    到 「庫」 文件夾 - >右鍵點擊這個jar此文件夾中 - >構建路徑 - >添加到構建路徑。

其中「Android的SDK文件夾」,通常是這樣的:「C:\ Users \用戶名\ Android的軟件開發工具包」

+1

這解決了我的錯誤,我認爲這是最好的答案 – UmbySlipKnot

+1

我不知道爲什麼。但是這個工作。 –

14

我有同樣的問題,我做了以下來解決這個問題。

  1. 轉到項目的「屬性」。
  2. 選擇「Java構建路徑」
  3. 選擇「排序和導出」選項卡
  4. 您應該看到所選項目的「SRC」,在這裏「根」的路徑和依賴。

他們是如何上市是第一「SRC」和訂單,然後「根」路徑I切換它們,讓「根」文件夾的「SRC」

然後單擊「檢查」中的每一個前建立項目上市

見: NoClassDefFoundError for code in an Java library on Android

+0

這解決了我的問題。謝謝 –

0

我面臨同樣的問題,解決不了。最後,我從另一臺機器上拿走了示例項目文件夾,將它複製到我的並加載了我從另一臺機器上拿下的新項目。然後一切工作正常。我試圖通過比較2個樣本項目來追蹤這個問題,但不能。無論如何,我從另一臺機器取得的新樣品項目工作正常。

2

發生這種情況是因爲對如何導入項目有很多困惑。該文檔 https://developers.google.com/maps/documentation/android/intro#sample_code 說你不應該選擇「複製項目到工作區」在任何時候,並獲得運行的樣本這是你需要堅持。不要爲播放服務和樣本選擇此選項 - 將它們留在原地。

在導入這兩個檢查以下內容:

  1. 右鍵單擊在MainActivity項目,並選擇屬性
  2. 轉到Android和確保你看到旁邊一個綠色的勾到的Google Play服務-lib的 (播放服務lib不應該作爲jar添加 - 相反應該添加爲Android庫)
  3. 轉到Java Build Path並在庫部分中導入外部jar(android-support-v4.jar)
  4. [重要]去Orde r並導出到Java Build Path中,並確保android-support-v4.jar在它旁邊有一個勾號(它不會在默認情況下發生,這就是爲什麼你會看到在頂部提到的錯誤)
  5. 確保在進行更改後清理並構建項目,以便最終不會嘗試修復可行的工作,但不會被推送。
0

我有很多相同的問題。 文件'import-summary.txt'有答案。 在我的情況下,我已經將eclipse項目導入到路徑名中具有空格的路徑中。這會導致嚮導出現問題。 創建新路徑。重新導入的項目。然後建立/重建項目。 沒問題。

0
  1. 嘗試使用新工作區中的相同示例代碼。

  2. 即使您可以複製並粘貼示例地圖項目和Google Play服務-lib項目(/ extras/google/google_play_services/libproject/google-play-services_lib),並將其粘貼到新的工作空間中。

  3. donot忘記添加必需的JAR文件從SDK。 ( 「Android的支持,v4.jar」 位於 「/extras/android/compatibility/v4/android-support-v4.jar」 在你的 「Android的SDK」 drectory。)