web-dev-qa-db-ja.com

Google Play Services V2ライブラリでのNoClassDefFoundError

公式チュートリアル の後にGoogle Play Services 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)

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

46
keyboardsurfer

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

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

32
jham

私も同じ問題を一度持っています、私は適切にステップに従って、この問題を解決することができました

最初(Google Developerコンソールからプロジェクトをセットアップします)APIコンソール-Google Code に移動します

画像に示すようにプロジェクトを作成します enter image description here

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

enter image description here

プロジェクトを作成したら、使用するサービスを選択します。この場合、Android v2マップが必要なので、Google Maps Android API v2サービスから示されているように、 enter image description here

次に、Api Accessに移動して、OAuth 2.0を作成します。対応するフィールドにパッケージ名とSHA1フィンガープリントを入力します。 enter image description here

OAuth 2.0で終了すると、APIキーを使用する準備ができました enter image description here

Android 2.0の作成時に使用したのと同じパッケージ名でOAuthプロジェクトを作成します。 Android SDK Managerにgoogle play serviceがあるかどうかを確認します。そうでない場合は、google play serviceをインストールします。 enter image description here

Googleプレイサービスをインストールすると、AndroidYourSdkpath\extras\google\google_play_services。そのプロジェクトをワークスペースにインポートし、プロジェクトの参照ライブラリとして提供します enter image description here

enter image description here

enter image description here

その後、対応する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"/>

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

34
Ramz

Android Studio:

1)モジュール設定を開きます:

2)SDKからgoogle_play_service_libモジュールを追加(インポート)

Picture

3)ライブラリとしてのモジュールgoogle_play_service_libチェック

4)SDKからライブラリgoogle_play_service.jarを追加します

5)仕上げ

Picture

11
Denis Dolgikh

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

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

AndroidManifest.xml

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

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

2
Damian

使用している場合

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も追加します

1
Dennis Djan

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

1
Umberto

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

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

解決策:-try...catchにエラーパーツコードを追加してから、エミュレーターでも動作するようにします。

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

0
Mansukh Ahir

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

ライブラリプロジェクトを"New Module"の代わりに"Import Module"として追加すると、問題が発生します。

enter image description here

[新しいモジュール]を選択すると、Android Studioは[モジュール名]と[パッケージ名]を指定するダイアログを表示し、デフォルトでは[パッケージ名]は "com.example.MODULE_NAME_YOU_SPECIFED"のようになります。 wrong。プロジェクトは成功してビルドされるため、見逃すのは非常に簡単です。

enter image description here

ライブラリプロジェクトを"Import Module"で追加する場合は、Android Studioはライブラリプロジェクトのソースコードを変更せずにプロジェクトを追加するだけなので、すべて問題ありません。

0
klimat