java.lang.noclassdeffounderror: com.google.android

2019-01-03 09:07发布

I am creating an android application using google maps. here is the code:

MapFragActivity.java

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

    public class MapFragActivity extends FragmentActivity {

    private GoogleMap map;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map_frag);

        map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();
     }
    }

AndroidManifest.xml:

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

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


        <permission
            android:name="com.him.mapfrag_rnd.permission.MAPS_RECEIVE"
            android:protectionLevel="signature" />

        <uses-permission android:name="com.him.mapfrag_rnd.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" />

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


        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MapFragActivity"
                android:label="@string/title_activity_map_frag" >
                <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="my_api_key" />

        </application>

    </manifest>

activity_map_frag.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

    <fragment
      android:id="@+id/map"
      android:name="com.google.android.gms.maps.SupportMapFragment"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />

    </RelativeLayout>

when I try this code I get an error, here is the log:

01-17 10:01:17.685: E/AndroidRuntime(8923): FATAL EXCEPTION: main
    01-17 10:01:17.685: E/AndroidRuntime(8923): java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at com.google.android.gms.maps.SupportMapFragment.onInflate(Unknown Source)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:279)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:272)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.app.Activity.setContentView(Activity.java:1835)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at com.him.mapfrag_rnd.MapFragActivity.onCreate(MapFragActivity.java:16)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.app.Activity.performCreate(Activity.java:4470)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.os.Handler.dispatchMessage(Handler.java:99)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.os.Looper.loop(Looper.java:137)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at android.app.ActivityThread.main(ActivityThread.java:4511)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at java.lang.reflect.Method.invokeNative(Native Method)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at java.lang.reflect.Method.invoke(Method.java:511)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:986)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:753)
    01-17 10:01:17.685: E/AndroidRuntime(8923):     at dalvik.system.NativeStart.main(Native Method)

when I make some changes in MapFragActivity.java, then map is displayed. here are the changes:

package com.him.mapfrag_rnd;

    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;

    import com.google.android.gms.maps.SupportMapFragment;

    public class MapFragActivity extends FragmentActivity {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //setContentView(R.layout.activity_map_frag);
          SupportMapFragment fragment = new SupportMapFragment();
          getSupportFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit();
        }
    }

The change I have done is commented the setContentView. I have followed all the required steps and still I am getting and error. if uncomment the setContentView() then again I get the error.

Please HELP!!!

12条回答
疯言疯语
2楼-- · 2019-01-03 09:34

What you have to do is include a Google Play Services library to your project. Google has very good instructions here:

Also, there is a quick start which I found very useful while trying to get Google Maps v2 to work.

查看更多
▲ chillily
3楼-- · 2019-01-03 09:35

I have followed the Link http://www.vogella.com/tutorials/AndroidGoogleMaps/article.html

and added the google-play-services_lib library project to my application. It was working great up to yesterday. But to day i have got the exception mentioned above. It is because of the absence of google play library or my project not able to access the files from the library. I rebuilt my project but it was not succeeded. Then i rebuilt the google-play-services_lib library project but no hope. Then i tried the "build all" option in eclipse and it works fine.

enter image description here

查看更多
兄弟一词,经得起流年.
4楼-- · 2019-01-03 09:36

I have the same error. I use Android Studio and Gradle thus there are not too many things to configure or improve. I have done almost all things but they all did not work for me. The last one works: replace entire package play-services by smaller ones. In my case:

Replace (in build.gradle file):

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

by:

// Google Cloud Messaging
compile 'com.google.android.gms:play-services-gcm:8.4.0'

// Google Location
compile 'com.google.android.gms:play-services-location:8.4.0'
查看更多
放我归山
5楼-- · 2019-01-03 09:37

If you are using Intellij Idea,

  1. Select your project from project panel
  2. Hit F4 in order to open the project structure window
  3. Select Modules from left panel, then hit + button then select "import module" and navigate to "ANDROID-SDK"/extras/google/google_play_services/libproject/google-play-services_lib. By doing this this project will be added to Modules alongside with your project
  4. Select your project, then select "Dependencies" (it's a Tab) from right panel. Click + button then "3 Module dependencies..." and select "google-play-services_lib".
  5. Click + button again then "1 jars or directories..." and navigate to "/libs" folder in the above path and select "google-play-services.jar".
  6. Click ok and close project structure window.

Note: Make sure you have not added "google-play-services_lib" project as library in "Libraries" (left panel under Modules). If you have, you can go to "Libraries and simply remove it. Google Play Library Should Not Appear In Libraries.

Note 2: You can copy the whole google-play-services_lib directory to your own project if you wish to have it in version control or similar.

查看更多
劫难
6楼-- · 2019-01-03 09:39

I think you have to import the whole Google Play Service library to your IDE, not only the .jar

try it ;-)

查看更多
乱世女痞
7楼-- · 2019-01-03 09:41

Check AndroidManifest.xml file of your google-play-services_lib project. Should be:

package="com.google.android.gms"
查看更多
登录 后发表回答