53

私はグーグルマップを使用してAndroidアプリケーションを作成しています。コードは次のとおりです。

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>

このコードを試してみると、エラーが発生します。ログは次のとおりです。

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)

MapFragActivity.javaに変更を加えると、マップが表示されます。変更点は次のとおりです。

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();
        }
    }

私が行った変更は、setContentViewにコメントされています。必要なすべての手順を実行しましたが、エラーが発生します。setContentView()のコメントを外すと、再びエラーが発生します。

助けてください!!!

4

12 に答える 12

74

Intellij Ideaを使用している場合は、

  1. プロジェクトパネルからプロジェクトを選択します
  2. プロジェクト構造ウィンドウを開くには、F4キーを押します
  3. 左側のパネルから[モジュール]を選択し、[+]ボタンを押して[モジュールのインポート]を選択し、[ ANDROID-SDK ] / extras / google / google_play_services / libproject/google-play-services_libに移動します。これを行うことにより、このプロジェクトはプロジェクトと一緒にモジュールに追加されます
  4. プロジェクトを選択し、右側のパネルから[依存関係](タブ)を選択します。[+]ボタンをクリックし、[3モジュールの依存関係...]をクリックして、[google-play-services_lib]を選択します。
  5. もう一度[+]ボタンをクリックし、[1 jarまたはディレクトリ...]をクリックして、上記のパスの[/ libs]フォルダに移動し、[google-play-services.jar]を選択します。
  6. [OK]をクリックして、プロジェクト構造ウィンドウを閉じます。

:「ライブラリ」(モジュールの下の左側のパネル)にライブラリとして「google-play-services_lib」プロジェクトを追加していないことを確認してください。持っている場合は、「ライブラリに移動して削除するだけです。GooglePlayライブラリはライブラリに表示されません。

注2:バージョン管理などで使用したい場合は、google-play-services_libディレクトリ全体を独自のプロジェクトにコピーできます。

于 2013-04-05T05:48:32.317 に答える
40

あなたがしなければならないことはあなたのプロジェクトにグーグルプレイサービスライブラリを含めることです。グーグルはここに非常に良い指示を持っています:

また、Google Maps v2を動作させようとしているときに、非常に便利だと思ったクイックスタートがあります。

于 2013-02-01T03:00:39.367 に答える
6

.jarだけでなく、GooglePlayサービスライブラリ全体をIDEにインポートする必要があると思います

それを試してみてください ;-)

于 2013-01-18T19:21:36.867 に答える
6

同じエラーが発生します。私はAndroidStudioとGradleを使用しているため、構成や改善するものはそれほど多くありません。私はほとんどすべてのことをしましたが、それらはすべて私のために働きませんでした。最後のものは機能します:パッケージプレイサービス全体をより小さなものに置き換えます。私の場合:

置換(build.gradleファイル内):

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

に:

// 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'
于 2016-03-03T23:06:13.330 に答える
6

android studioでもこのエラーが発生し、すでにplay services alpha3とgradlealpha5が含まれていましたが、間違っていたのはmultidexを含めたことです。

Gradleで

multiDexEnabled true

およびApplicationクラスのonCreate

MultiDex.install(this);

しかし、MultiDexApplicationでApplicationクラスを拡張するのを忘れました

MultiDexApplicationが拡張されていないため、gmsやその他のdexクラスを含めることができないため、gmsStringの開始時にエラーが発生します。

これがお役に立てば幸いです

于 2016-04-07T14:52:37.843 に答える
5

Playサービスライブラリが正しく追加されていることを最初に確認し、このデータをアプリケーションタグの下のマニフェストファイルに追加することで、問題を解決しました<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

于 2014-02-11T08:48:44.383 に答える
4

google-play-services_libプロジェクトのAndroidManifest.xmlファイルを確認してください。する必要があります:

package="com.google.android.gms"
于 2013-04-22T21:41:20.067 に答える
2
  1. AndroidSDKManagerのダウンロード「GooglePlayサービス」を使用する

  2. ワークスペースにインポートします(パス:android-sdk root / extras / google / google_play_service / libproject / google-play-service_lib)

  3. プロジェクトのプロパティ->android->ライブラリaddgoogle-play-service_lib

  4. ビルドパス->注文とエクスポートでAndroidプライベートライブラリを確認

于 2013-05-30T10:15:33.760 に答える
1

Google Playサービスライブラリをインポートするときに「プロジェクトをワークスペースにコピーする」をチェックすることで、このエラーを解決しました。
詳細はこちら:http ://developer.android.com/google/play-services/setup.html

于 2013-04-20T07:49:10.570 に答える
1

リンク http://www.vogella.com/tutorials/AndroidGoogleMaps/article.htmlをたどりました

そして、google-play-services_libライブラリプロジェクトを私のアプリケーションに追加しました。昨日まではうまくいっていました。しかし、今日、私は上記の例外を持っています。これは、Google Playライブラリがないか、プロジェクトがライブラリのファイルにアクセスできないためです。プロジェクトを再構築しましたが、成功しませんでした。それから私はgoogle-play-services_libライブラリプロジェクトを再構築しましたが、希望はありません。次に、Eclipseで「すべてビルド」オプションを試しましたが、正常に機能します。

ここに画像の説明を入力してください

于 2015-02-12T13:26:29.030 に答える
1

分割されたGooglePlayサービスを使用している場合(ここを参照:https ://developers.google.com/android/guides/setup#split )

基本プレイサービスをgradleファイルに含める必要があります。

compile 'com.google.android.gms:play-services-base:7.5.0'

スリッププレイサービスを使用すると、65kエラーを防ぎ、アプリを小さくすることができます

于 2015-07-08T00:46:11.963 に答える
1

この2つのグーグルプレイサービスはbuild.gradleに追加されますそれは私のために働きました..コンパイル'com.google.android.gms:play-services-appindexing:8.1.0'コンパイル'com.google.android.gms:play-services :8.1.0 '

于 2015-12-24T12:21:45.353 に答える