Không thể khởi tạo android.gms.maps.MapFragment


82

Tôi thử làm một bản demo với google maps android v2 với hoạt động rất đơn giản, chỉ cần sao chép mã từ trang google: https://developers.google.com/maps/documentation/android/start#adding_the_api_key_to_your_application

cho hoạt động:

package com.example.mapdemo;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

để bố trí:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.MapFragment"/>

Tôi đã đăng ký một khóa api theo trang và sửa đổi tệp androidmanifest.xml của mình, giống như sau:

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

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <uses-permission android:name="android.permission.INTERNET" />

    <!-- add for map2 -->
    <permission
        android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <!-- External storage for caching. -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <!-- Maps API needs OpenGL ES 2.0. -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyDVAF4WaVSVRDKJx87It8OSFP5txQcPabc" />

        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

Tôi cũng tham chiếu ứng dụng của mình tới google-play-services_lib trong eclipse.

nhưng mọi lúc, báo cáo lỗi trong logcat như thế này:

2-05 16:22:53.609: E/AndroidRuntime(21623): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wenhai.driverschool/com.wenhai.driverschool.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread.access$600(ActivityThread.java:127)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.os.Looper.loop(Looper.java:137)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread.main(ActivityThread.java:4441)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at java.lang.reflect.Method.invokeNative(Native Method)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at java.lang.reflect.Method.invoke(Method.java:511)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at dalvik.system.NativeStart.main(Native Method)
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:255)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Activity.setContentView(Activity.java:1835)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at com.wenhai.driverschool.MainActivity.onCreate(MainActivity.java:11)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Activity.performCreate(Activity.java:4465)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
12-05 16:22:53.609: E/AndroidRuntime(21623):    ... 11 more
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.MapFragment: make sure class name exists, is public, and has an empty constructor that is public
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Fragment.instantiate(Fragment.java:581)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Fragment.instantiate(Fragment.java:549)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Activity.onCreateView(Activity.java:4235)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)
12-05 16:22:53.609: E/AndroidRuntime(21623):    ... 20 more
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: java.lang.ClassNotFoundException: com.google.android.gms.maps.MapFragment
12-05 16:22:53.609: E/AndroidRuntime(21623):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
12-05 16:22:53.609: E/AndroidRuntime(21623):    at android.app.Fragment.instantiate(Fragment.java:571)
12-05 16:22:53.609: E/AndroidRuntime(21623):    ... 23 more

Tôi không biết lý do cho điều này.

Nếu tôi thêm google-play-services.jar vào dự án của mình, nó sẽ báo một lỗi khác:

12-05 16:34:23.269: E/AndroidRuntime(22638): FATAL EXCEPTION: main
12-05 16:34:23.269: E/AndroidRuntime(22638): java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.Activity.onCreateView(Activity.java:4242)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:255)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.Activity.setContentView(Activity.java:1835)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.wenhai.driverschool.MainActivity.onCreate(MainActivity.java:11)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.Activity.performCreate(Activity.java:4465)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.ActivityThread.access$600(ActivityThread.java:127)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.os.Looper.loop(Looper.java:137)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at android.app.ActivityThread.main(ActivityThread.java:4441)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at java.lang.reflect.Method.invokeNative(Native Method)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at java.lang.reflect.Method.invoke(Method.java:511)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
12-05 16:34:23.269: E/AndroidRuntime(22638):    at dalvik.system.NativeStart.main(Native Method)

Bất cứ ai có thể giúp tôi về điều này?


2
Tôi gặp lỗi tương tự với MapView. Tôi đã thêm thư viện và tôi đã làm mọi thứ như được mô tả trên trang này Develop.google.com/maps/documentation/android/start nhưng tất cả những điều này đều vô ích đối với tôi.
jumper0k

1
Cùng một lỗi .. bất kỳ giải pháp ...
nilkash

1
Tôi đang gặp lỗi tương tự và chưa thể tìm ra giải pháp nào tốt :(
Ricardo Otero

Để xem các bước này vì tôi đoán techhomeblog.wordpress.com/2013/02/23/…
Tofeeq Ahmad

Thử nhấp chuột phải vào dự án của bạn trong Eclipse, chọn Công cụ Android> Thêm thư viện hỗ trợ. Trong trường hợp của tôi, đó là một phiên bản cũ được lấy từ ActionBarSherlock.
IgorGanapolsky

Câu trả lời:


86

Trong IntelliJ IDEA (được cập nhật cho IntelliJ 12):

  1. Tạo một tệp ~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib/src/dummy.javachứa class dummy {}.
  2. Tệp-> Mô-đun nhập-> ~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib
  3. Tạo mô-đun từ các nguồn hiện có
  4. Tiếp theo-> Tiếp theo-> Tiếp theo-> Tiếp theo-> Kết thúc
  5. Tệp-> Cấu trúc dự án-> Mô-đun-> YourApp
  6. +-> Phụ thuộc mô-đun-> Google-play-services_lib ( +Nút ở góc trên cùng bên phải của hộp thoại.)
  7. +-> Chum hoặc thư mục->~/android-sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
  8. Sử dụng các mũi tên up/ downđể di chuyển <Module source>đến cuối danh sách.

Bạn có thể xóa dummy.javanếu bạn thích.

Chỉnh sửa: Sau khi sử dụng cái này một thời gian, tôi thấy rằng có một lỗ hổng / lỗi nhỏ. IDEA đôi khi sẽ phàn nàn về việc không thể mở .imltệp dự án trong google-play-services_libthư mục, mặc dù thực tế là bạn chưa bao giờ nói với nó là có dự án ở đó. Nếu điều đó xảy ra, việc xây dựng lại dự án sẽ giải quyết được vấn đề, ít nhất là cho đến khi nó hoạt động trở lại.


Làm việc cho tôi. Cảm ơn!
kingtim

3
xin chào, tôi không thể tìm thấy File > Import Moduletùy chọn trong của tôi Eclipse IDE. Xin hãy giúp tôi ...
Rahmathullah M

Điều này dành cho IDE cao cấp "IntelliJ IDEA".
Timmmm

2
Cảm ơn câu trả lời của bạn! Nhưng nó là đủ để tôi thêm phụ thuộc mô-đun VÀ jar trong dự án và mọi thứ đã hoạt động!
lomza

3
Bạn không cần thêm tệp Dummy nữa vì Thư viện dịch vụ của Google Play đã được cập nhật bằng "tệp giả chính thức" để hỗ trợ "một số IDE" (tức là họ đã sửa lỗi cho IntelliJ và Android Studio).
Guardius

33

Cập nhật

Vui lòng theo dõi các đoạn mã Commonsware MapV2 để hiểu rõ hơn.

(Nó có mặt trong phiên bản Omnibus)

https://github.com/commonsguy/cw-omnibus/tree/master/MapsV2

Đoạn mã sau đang hoạt động tốt, tôi chọn sử dụng SupportMapFragment.

Đừng quên thêm google-play-services.jar vào dự án của bạn.

MainActivity.java

package com.example.newmapview;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.SupportMapFragment;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SupportMapFragment fragment = new SupportMapFragment();
        getSupportFragmentManager().beginTransaction()
                .add(android.R.id.content, fragment).commit();
    }
}

manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.newmapview"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <permission
        android:name="com.example.newmapview.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.example.newmapview.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.newmapview.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="XXXXX" />
    </application>

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

</manifest>

Đây là kết quả

nhập mô tả hình ảnh ở đây Hy vọng điều này sẽ giúp ích.


xin chào, Vipul Shah, cảm ơn. Tôi thích tin nhắn từ pha chế: [2012-12-06 10:20:26 - google-play-services_lib] Không thể tìm thấy google-play-services_lib.apk! Tôi không biết liệu thiếu apk này có dẫn đến lỗi của tôi hay không. Bạn có thể cho tôi biết cách tham khảo google-play-services.jar. chỉ cần thêm nó như liên kết dưới đây: developer.android.com/intl/zh-CN/tools/projects/… . hoặc thêm nó trong eclipse như bên dưới: Thuộc tính-> java Xây dựng Đường dẫn-> Dự án, thêm dự án google-play-services_lib. cái nào trong phe của bạn? cảm ơn.
mmm2006 6/12/12

@ mmm2006 Tôi e rằng bạn có thể đang chạy ứng dụng này trên trình giả lập android. Tôi không chắc nhưng bạn có thể gặp phải lỗi này vì không có ứng dụng cửa hàng chơi trên trình giả lập. Hãy thử trên thiết bị thực tế.
Vipul

Trên thực tế, tôi chạy nó trong điện thoại của mình. một chiếc điện thoại Sony.
mmm2006

Xin chào Vipul, bạn có thể cho tôi biết, làm cách nào để hiển thị các điểm đánh dấu trên bản đồ bằng cách sử dụng MapFragment? Tôi có một danh sách các vĩ độ và kinh độ, tôi muốn hiển thị chúng trên bản đồ, tôi đã thử MapView nhưng không hiệu quả với tôi nên tôi không thể sử dụng ItemizedOverlay, MapFragment đã hoạt động, vậy làm thế nào để hiển thị nhiều điểm đánh dấu trên MapFragment. Nếu có thể, hãy cung cấp cho tôi một liên kết có mã hoạt động.
Shrikant

@VipulShah: bạn thật tuyệt. Bạn có thể cho tôi biết tại sao lỗi này xảy ra không vì trước khi nó hoạt động, tôi đã phát triển một số hướng dẫn ---> dj-android.blogspot.in/2013/02/… bây giờ cùng một mã không hoạt động.
Dhaval Parmar

23

Chỉ cần cố gắng thay thế bố cục của bạn bằng:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/map"
       android:name="com.google.android.gms.maps.SupportMapFragment"
       android:layout_width="wrap_content"
       android:layout_height="match_parent" />

Bạn cần sử dụng SupportMapFragment cho API dưới 11 tuổi!

Nguyệt quế


3
xin lỗi vì điều đó, nhưng nó không thể hoạt động ở vị trí của tôi. báo lỗi lần này: Gây ra bởi: android.app.Fragment $ InstantiationException: Không thể khởi tạo đoạn com.google.android.gms.maps.SupportMapFragment: đảm bảo rằng tên lớp tồn tại, là công khai và có một hàm tạo trống là công khai. Tôi có thể tìm thấy SupportMapFragment trong jar, nhưng nó không thể hoạt động. tôi không biết lý do.
mmm2006 6/12/12

Hum, có vẻ như bạn cần phải làm điều gì đó như vậy: 1. Tải xuống SDK dịch vụ của Google Play trên Trình quản lý SDK Android. 2. Nhập thư viện dự án trong Eclipse. 3. Thêm thư viện vào dự án của bạn. 4. Đảm bảo có android-support-v4.jar trong dự án của bạn (cũng có sẵn trong Trình quản lý SDK Android). 5. Tạo một phân đoạn và thêm tên ('class = "com.google.android.gms.maps.MapFragment" />' cho SDK> = 11 và 'class = "com.google.android.gms.maps.MapFragment "/> 'cho SDK <11). 6. Đừng quên thử mã mẫu trong thiết bị (ứng dụng của bạn cần có Google Play!)
Aurel

ok, tôi thấy tôi phải làm theo hướng dẫn này để tham khảo dịch vụ google play. developer.android.com/intl/zh-CN/tools/projects/… . nhưng exmaple được hỗ trợ bởi google hiện vẫn có thể hoạt động. :(
mmm2006

bất kỳ ý tưởng nào về Chế độ xem Tương đương với Framgament để đưa nó vào bên trong tệp xml phân mảnh?
Harsha MV

1
@ mmm2006: bạn cần mở rộng "FragmentActivity" chứ không phải "Hoạt động" thì nó mới hoạt động và sẽ không ném ra ngoại lệ ..
Veer

17

Tôi phải đối mặt với vấn đề tương tự và tôi đã mất nhiều ngày để tìm ra giải pháp phù hợp với mình:

  1. Xóa dự án google-play-services_lib(nhấp chuột phải vào xóa dự án)
  2. Xóa dự án có chứa bản trình diễn Google maps ( MainActivitytrong trường hợp của tôi) nếu bạn có
  3. Sao chép dự án google-play-services_lib (extras \ google \ google_play_services \ libproject \ google-play-services_lib) vào không gian làm việc của bạn rồi nhập nó dưới dạng Dự án chung (Tệp-> nhập-> dự án hiện có vào workspase)
  4. Nhấp chuột phải vào dự án của bạn (trong đó bạn muốn tải bản đồ) -> Android -> thêm (trong thư viện) google-play-services_lib

Bạn sẽ thấy một cái gì đó như thế này:

chú ý

Lưu ý: Bạn không nên có một cái gì đó như thế này (dự án nên được giới thiệu từ không gian làm việc của bạn):

nhập mô tả hình ảnh ở đây

Tôi nghĩ rằng vấn đề là các dự án kéo đang tham chiếu đến cùng một thư viện


Tôi đã thêm các dịch vụ trên google play như một thư viện Java xây dựng con đường, nhưng nó cần phải được thêm vào dưới Android / Thư viện
marimaf

10

thử đi

http://developer.android.com/tools/projects/projects-eclipse.html#ReferencingLibraryProject

Tôi vừa thêm dự án các dịch vụ của Google và thêm một tham chiếu trong thuộc tính dự án của mình-> Android


2
Đây là giải pháp quan trọng đối với tôi, không có câu trả lời nào khác ở trên giúp ích. Sự khác biệt ở đây thực sự khá tinh tế - tôi đã thêm nó như là một dự án phụ thuộc thông qua "Java Build Path", trong khi thực tế tôi nên làm điều đó thông qua menu "Android". Tôi đã thêm thông tin đó vào một trong những câu trả lời khác của mình: stackoverflow.com/questions/13733911/…
Dan J

8
  1. Bây giờ, bản demo có thể hoạt động theo liên kết này :
  2. Ví dụ: demo, nó cũng có thể hoạt động:

Thêm hai jar trong thư mục libs trong dự án của bạn. Theo dõi thông tin bên dưới. Đặc biệt, tôi nghĩ bạn cần:

  • Nhập nguồn thực cho dự án "google-play-services_lib" và liên kết nó dưới dạng thư viện Android.
    • Thực hiện việc này thông qua Dự án -> Thuộc tính -> Android -> Thư viện, Thêm -> google-play-services_lib (bạn có thể nhấp chuột phải vào dự án của mình và chọn Thuộc tính, sau đó chọn Android).
    • Đừng thêm nó như một Dự án phụ thuộc thông qua "Đường dẫn xây dựng Java" cho dự án của bạn, điều đó không phù hợp với tôi.
  • Thêm google-play-services.jar và android-support-v4.jar vào thư mục "libs" trong dự án mẫu và thêm chúng dưới dạng "JAR bên ngoài bên ngoài" trong "Build Path -> Configure Build Path -> Libraries" .

Tôi thấy bước thứ hai này là cần thiết vì tôi đã gặp phải lỗi giống hệt như bạn khi cố gắng sử dụng mã mẫu. Bước đầu tiên là cần thiết để tránh NoClassDefFoundError trong com.google.android.gms.R $ có thể tạo kiểu trong dự án thực của tôi.

Tôi cũng cần thực hiện xây dựng Dọn dẹp và Gỡ cài đặt ứng dụng khỏi thiết bị (từ lần thử nghiệm trước đó) trước khi mã mẫu hoạt động.

cảm ơn sự giúp đỡ của bạn rất nhiều.


3

Có lẽ Bạn phải làm nổi bật điều này:

Lưu ý: Dịch vụ của Google Play không được hỗ trợ trên trình giả lập Android - để phát triển bằng cách sử dụng API, bạn cần cung cấp thiết bị phát triển như điện thoại hoặc máy tính bảng Android.

http://developer.android.com/google/play-services/setup.html

Bạn phải cung cấp một thiết bị phát triển vật lý để bạn có thể chạy và gỡ lỗi ứng dụng của mình. Không sử dụng giả lập. Sẽ không hoạt động.


3
CHÚA ƠI! Tại sao ghi chú này quá ít ở trang chính và không có màu đỏ lớn trên mỗi trang? Tôi chỉ mất cả ngày để cố gắng chạy nó !!!!
shmoula

Dịch vụ Play hiện khả dụng trên trình giả lập chạy Android v4.2.2 trở lên.
Brian White

2

Trong MainActivity(hoặc trong mỗi hoạt động bạn muốn đặt bản đồ v2), bạn phải mở rộng FragmentActivityhoặc Activitybạn muốn sử dụng SupportMapFragmenthoặc chỉ MapFragment. Chỉ sử dụng MapFragmentlớp nếu bạn đang nhắm mục tiêu API 12 trở lên. Nếu không, hãy sử dụng SupportMapFragment. Đó là một sự khác biệt nhỏ nhưng nó tạo ra lỗi.


2

Vì Google map bây giờ được bao bọc trong Fragment, hãy mở rộng hoạt động của bạn từ FragmetActivity chứ không chỉ Hoạt động và đảm bảo nếu bạn sử dụng " supporrtMapFragment " thì bạn chỉ đang nhập Fragment từ gói hỗ trợ .


Google thực sự nên sửa ví dụ cơ bản để sử dụng SupportMapFragment. Không hoạt động mà không có nó ...
Muzikant

1

Trong dự án Intellij Idea của tôi, tôi phải thêm cả hai: google-play-services_lib và google-play-services.jar vào dự án. Và trong dự án google-play-services_lib, hãy thêm cả google-play-services.jar. Sau đó, nếu bạn đã làm tất cả những điều được mô tả ở đây , đúng, ứng dụng của bạn sẽ hoạt động.


Bạn sử dụng danh mục nào cho thư mục (các lớp, thư mục jar, các nguồn, v.v.)?
Timmmm

1
Trong Intellij Idea, tôi đang thêm google-play-services_lib giống như một mô-đun. Hơn nữa, Intellij Idea không nhận ra nó giống như một mô-đun, vì thư mục src trống. Bạn nên thêm tệp java với bất kỳ mã nào vào thư mục src, sau đó tạo mô-đun từ các nguồn hiện có và thêm nó vào dự án trong cấu trúc dự án. Sau đó, xóa tệp java.
jumper0k

1

Có một chút khó khăn vì nó khác trong API trước đó, nhưng tôi đã tìm ra giải pháp. Google cho biết phải làm gì ở đây ; theo câu hỏi, chúng ta cần com.google.android.gmscác lớp vì vậy cần thiết lập google play services, đó chỉ là một thư viện mà chúng ta phải thêm vào dự án của mình như liên kết này . Điều rất quan trọng là nhập bản sao của thư viện dự án google-play-services_libchứ không phải bản sao nằm trong thư mục sdk. Sau khi hoàn tất, hướng dẫn từ Google sẽ diễn ra hoàn hảo.


Ngoài ra, điều quan trọng là bạn đang sử dụng api nào, api 10 trở xuống cần thư viện hỗ trợ developer.android.com/tools/extras/support-library.html chính xác là bạn có lỗi không?
joseph.dev89 20/12/12

1

Ngoài nhiều điều đã đề cập trước đây, đối với tôi, điều quan trọng là phải đánh dấu .jar cũng trong Đặt hàng và Xuất khẩu. Theo như tôi có thể nói, nó thường không được đề cập đến và đối với tôi nó rất quan trọng.

Đánh dấu lib trong Đặt hàng và Xuất



1

Thêm phụ thuộc này vào build.gradle

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

Bây giờ nó hoạt động

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="388dp"
        android:layout_weight="0.40" />
</LinearLayout>

0

Để xử lý các mục nhập liên quan đến Drive, bạn sẽ cần một vài lọ từ Google Drive SDK. Có một vài cái lớn, vì vậy bạn có thể muốn thêm chúng riêng lẻ cho phù hợp với ứng dụng của mình.

Nếu điều đó không giải quyết được com.google.android.gms.* imports,the Google Play Services add-on needs to be installed (from Extras -> Google Play Services in the SDK Manager) and google-play-services.jar needs to be added to your build path.

BIÊN TẬP:

Trong trường hợp này, cần có các lọ sau:

google-api-services-drive-v2-rev1-1.7.2-beta.jar

google-http-client-1.10.3-beta.jar

google-http-client-android2-1.10.3-beta.jar

google-oauth-client-1.10.1-beta.jar

google-api-client-android2-1.10.3-beta.jar

google-api-client-1.10.3-beta.jar



0

Đừng quên thực sự xây dựng google-play-services_lib !! Đó là lý do tại sao nó hiển thị thông báo "Không thể tìm thấy google-play .... apk". Đối với tôi, trên Eclipse, không cần hack nào khác, nhưng để tham chiếu dự án từ menu con của Android, không phải từ đường dẫn xây dựng Java, hoặc tham chiếu dự án hoặc bất kỳ thứ gì khác. Không có lọ được đặt thủ công, không có thứ gì thực sự cần thiết cho tôi.


0

Trong Eclipse, cần tạo một dự án riêng cho các dịch vụ của google play và tham chiếu nó dưới dạng lib từ dự án Android của bạn thay vì chỉ cần thêm jar vào đó. Trong máy tính của mình, tôi đã nhập trực tiếp dự án Eclipse của dịch vụ google play từ D: \ adt-pack-windows-x86-20130219 \ sdk \ extras \ google \ google_play_services \ libproject \ google-play-services_lib và đặt nó thành dự án Lib nên tôi có thể tham khảo nó từ dự án Android của tôi.


0

Nó được nêu trên cùng một hướng dẫn rằng

Xin lưu ý rằng mã bên dưới chỉ hữu ích để kiểm tra cài đặt của bạn trong một ứng dụng nhắm mục tiêu Android API 12 trở lên

Chỉ cần thay đổi phiên bản SDK tối thiểu của bạn thành 12 và nó sẽ hoạt động

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

Haven đã thử cách giải quyết của Aurel cho các phiên bản API cũ hơn.


0

Tôi nghĩ điều đáng nói là (sau hơn một giờ tôi nhổ tóc) rằng nếu bạn đang sử dụng MapFragment, bạn không thể sử dụng FragmentActivity (SupportMapFragment sẽ hoạt động tốt trong môi trường này). Tôi đã sẵn sàng từ bỏ nó.


0

Bước đầu tiên http://developer.android.com/tools/projects/projects-eclipse.html#ReferencingLibraryProject Bước thứ hai http://developer.android.com/google/play-services/setup.html Trên trang đó, nó có một LƯU Ý nhưng chúng tôi không chú ý

Lưu ý: Bạn nên tham chiếu bản sao của thư viện mà bạn đã sao chép vào cây nguồn của mình — bạn không nên tham chiếu thư viện từ thư mục Android SDK.

Nhưng tôi nghĩ đó không phải là một cách tốt để làm tài liệu :)


0

Điều này có thể giúp ích cho một số người. Tôi đã có hai dự án, một là bản sao của bản demo từ Google và nó hoạt động tốt. Một dự án khác tôi đã sao chép vào một dự án hiện có và tôi không thể làm cho nó chạy được. Và trong lần thất bại thứ hai, tôi nhận được thông báo lỗi được mô tả ở trên.

Vấn đề của tôi là do thư viện không được kích hoạt, mặc dù tôi đã xây dựng lại, nhập nhiều lần, v.v. Nhấp chuột phải vào dự án -> Thuộc tính -> Đường dẫn xây dựng Java -> tab Đặt hàng & Xuất. Trong dự án không thành công, tab "Thư viện riêng của Android" đã được bỏ chọn.

Sau khi tôi kích hoạt nó, dự án hoạt động tốt.


0

tôi đã có tất cả những gì mọi người ở trên đang nói và giải quyết lỗi bằng cách chỉ cần gọi lệnh super.onCreate(savedInstanceState);as đầu tiên trong phương thức oncreate; trước khi nó là dòng cuối cùng trong phương thức. : | lãng phí cả ngày.


0

Tôi gặp sự cố này, tôi vừa cập nhật các dịch vụ của Google Play và đảm bảo rằng bạn đang thêm dự án google-play-service-lib làm phụ thuộc, dự án này hiện đang hoạt động mà không có bất kỳ thay đổi mã nào nhưng tôi vẫn nhận được "Không tìm thấy tài nguyên dịch vụ của Google Play . Kiểm tra cấu hình dự án của bạn để đảm bảo rằng các tài nguyên được bao gồm. " nhưng điều này chỉ xảy ra khi bạn có setMyLocationEnabled (true), có ai biết tại sao không?


0

Tôi không nhận được giải pháp thực sự nhưng tôi giải quyết được nó sau khi thực hiện những việc này:
- Đánh dấu vào 'Sao chép dự án vào không gian làm việc' khi nhập google-play-services_lib
- Không đặt minSdkVersion dưới 13
- Nếu bạn gặp lỗi với chủ đề, hãy thử thay đổi chủ đề bố cục của bạn thành bất kỳ chủ đề hệ thống nào
- Tạo lại dự án của bạn từ đầu hoặc hoàn nguyên mọi thứ nếu bạn lấy nó từ đâu đó


0

Tôi gặp vấn đề tương tự và chỉ cần Dịch vụ Play được cài đặt từ SDK và mọi vấn đề đều biến mất.


0

Tôi đã viết trong hoạt động
import com.google.android.gms.maps.SupportMapFragment;

và Eclipse đã cho tôi biểu tượng màu đỏ> nhấp vào> sửa thiết lập projec ..> thêm lưu trữ google-play-services.jar

Và finnaly nó đã hoạt động !!



0

Tôi gặp phải sự cố này khi sử dụng Android SDK cho x86 trong máy Windows 7 64-bit. Tôi đã tải xuống phiên bản Android SDK 64 bit, làm cho Eclipse nhìn thấy nó trong Window> Preferences> Android> SDK location và sự cố đã ngừng xảy ra.


0

Vui lòng đọc kỹ

Nếu mọi thứ đều giống như mã google thì vui lòng kiểm tra tệp kê khai trong trường hợp của tôi, tôi đã thêm khóa địa lý và khóa bản đồ, đó là lý do tại sao ngoại lệ xảy ra,

Lưu ý - không thêm hai khóa trong tệp kê khai, xóa khóa bản đồ

meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key"/>

thêm mã này.

 <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/auto_location"/>

 <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version"/>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.