46

公式チュートリアルに従って Google Play サービス V2 ライブラリを使用しようとすると、次の例外が発生します。

java.lang.NoClassDefFoundError: com.google.android.gms.R$string
at com.google.android.gms.common.GooglePlayServicesUtil.b(Unknown Source)
at com.google.android.gms.common.GooglePlayServicesUtil.a(Unknown Source)
at com.google.android.gms.common.GooglePlayServicesUtil.getErrorDialog(Unknown Source)

どこで私は間違えましたか?

4

8 に答える 8

34

私も一度同じ問題を抱えています、私は適切に手順を実行し、この問題を解決することができました

まず(Google Developer Consoleからプロジェクトを設定します)APIConsole-GoogleCode に移動します

画像に示すようにプロジェクトを作成します ここに画像の説明を入力してください

[作成]をクリックすると、図のようにプロジェクト名を追加するように求められます

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

プロジェクトを作成したら、使用する必要のあるサービスを選択します。この場合、Android v2マップが必要なので、サービスからGoogle Maps AndroidAPIv2を選択します。ここに画像の説明を入力してください

次に、Api Accessに移動し、OAuth2.0を作成します。対応するフィールドにパッケージ名とSHA1フィンガープリントを入力します。 ここに画像の説明を入力してください

OAuth 2.0を使い終えたら、APIキーを使用する準備が整います ここに画像の説明を入力してください

次に、OAuth2.0の作成時に使用したものと同じパッケージ名でAndroidプロジェクトを作成します。Android SDKManagerにGooglePlay サービスがあるかどうかを確認します。そうでない場合は、GooglePlayサービスをインストールします。ここに画像の説明を入力してください

Google Playサービスをインストールすると、Android YourSdkpath \ extras \ google \ google_play_servicesにGooglePlayライブラリが表示されます。そのプロジェクトをワークスペースにインポートし、参照ライブラリとしてプロジェクトに提供します。 ここに画像の説明を入力してください

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

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

その後、対応するjavaファイルとxmlファイルをプロジェクトに配置します。

MainActivity.java

package yourpackage;//Package name used while creating the Api key


import com.google.android.gms.common.ConnectionResult;
 import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;

import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;

public class MainActivity extends FragmentActivity {
GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Getting status
    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

    // Showing status
    if(status==ConnectionResult.SUCCESS)
    {
        SupportMapFragment supportMapFragment = (SupportMapFragment) 
                getSupportFragmentManager().findFragmentById(R.id.map);

        // Getting a reference to the map
        googleMap = supportMapFragment.getMap();
    }
    else{

        int requestCode = 10;
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
        dialog.show();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}

activity_main.xml

<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" />

AndroidManifest.xml

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

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />
   <permission
    android:name="yourpackage.permission.MAPS_RECEIVE"
    android:protectionLevel="signature"/>

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

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

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

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="yourpackage.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="YourAPIkey"/>

それがあなたを助けることを願っています

于 2013-02-04T12:30:40.730 に答える
32

バージョン 2 にはリソースが含まれており、ライブラリ プロジェクトとしてインポートする必要があります。さまざまな IDE でこれを行う方法については、 http://developer.android.com/google/play-services/setup.htmlの手順を参照してください。

リソースは GooglePlayServicesUtil.getErrorDialog() 用であり、ユーザーにインストール、更新、有効化などを指示します。Google Play サービスがデバイスで利用できない場合。

于 2012-12-03T20:29:28.417 に答える
2

すでに SDK をアップグレードしていて、このようなエラーが発生した場合は、次のことを忘れないでください。

  • Eclipse プロジェクトにこのファイルをコピーした場合は、新しいバージョンの google-play-services.jar を使用してください
  • project.propertiesで target=android-19 を設定します
  • 新しいAPI(私はAPI 19を使用しています)の場合、次のコードを追加する必要がある場合があります

AndroidManifest.xml

<application
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>

上記のようにインポートされた Eclipse ライブラリとしてourSdkpath\extras\google\google_play_servicesも使用します。

于 2013-11-09T19:19:39.227 に答える
1

使用している場合

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

などの個別のものに変更します。

compile 'com.google.android.gms:play-services-location:9.0.2'

compile 'com.android.support:multidex:1.0.1'あれば追加も multiDexEnabled=true

于 2016-07-26T16:40:35.407 に答える
0

私も同じ問題に直面しています。エミュレータでアプリケーションを実行すると、ほとんどのエミュレータに Google playService (Play ストア アプリ) がインストールされていないため、このエラーが発生する可能性があります。

したがって、playService アプリがインストールされている Android デバイスでアプリを実行してみてください。

解決策:-エラー部分のコードを追加しtry...catchてから、エミュレータでも動作するか試してください。

注:- Google メッセージング サービスには、palyservice が必要です。それ以外の場合はエラーをスローしますSERVICE_NOT_AVAILABLE

于 2015-04-24T12:46:09.293 に答える
0

Gradle を使用せずにプロジェクトをビルドすると、Android Studio で同じ問題が発生します。GooglePlayService プロジェクトの AndroidManifest.xml のパッケージ名に問題がある可能性があります。package="com.google.android.gms"である必要があります。

ライブラリ プロジェクトを"Import Module "ではなく"New Module"として追加すると、問題が発生します。

ここに画像の説明を入力

New Module を選択すると、Android Studio は「モジュール名」と「パッケージ名」を指定するダイアログを表示しますが、デフォルトでは「パッケージ名」は「com.example.MODULE_NAME_YOU_SPECIFED」のように見えますが、これは間違っています。プロジェクトは成功して構築されるため、見逃すのは非常に簡単です。

ここに画像の説明を入力

「モジュールのインポート」でライブラリ プロジェクトを追加すると、Android Studio はライブラリ プロジェクトのソース コードを変更せずにプロジェクトを追加するだけなので、すべて問題ありません。

于 2014-05-12T08:07:48.077 に答える