公式チュートリアル の後に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)
どこで私は間違えましたか?
バージョン2にはリソースが含まれており、ライブラリプロジェクトとしてインポートする必要があります。さまざまなIDEでこれを行う方法については、 http://developer.Android.com/google/play-services/setup.html の手順を参照してください。
リソースはGooglePlayServicesUtil.getErrorDialog()用です。これは、ユーザーがデバイスで使用できない場合にGoogle Playサービスをインストール、更新、有効化するように指示します。
私も同じ問題を一度持っています、私は適切にステップに従って、この問題を解決することができました
最初(Google Developerコンソールからプロジェクトをセットアップします)APIコンソール-Google Code に移動します
画像に示すようにプロジェクトを作成します
[作成]をクリックすると、図のようにプロジェクト名を追加するように求められます
プロジェクトを作成したら、使用するサービスを選択します。この場合、Android v2マップが必要なので、Google Maps Android API v2サービスから示されているように、
次に、Api Accessに移動して、OAuth 2.0を作成します。対応するフィールドにパッケージ名とSHA1フィンガープリントを入力します。
OAuth 2.0で終了すると、APIキーを使用する準備ができました
Android 2.0の作成時に使用したのと同じパッケージ名でOAuthプロジェクトを作成します。 Android SDK Managerにgoogle play serviceがあるかどうかを確認します。そうでない場合は、google play serviceをインストールします。
Googleプレイサービスをインストールすると、AndroidYourSdkpath\extras\google\google_play_services。そのプロジェクトをワークスペースにインポートし、プロジェクトの参照ライブラリとして提供します
その後、対応する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"/>
それがあなたを助けることを願っています
Android Studio:
1)モジュール設定を開きます:
2)SDKからgoogle_play_service_libモジュールを追加(インポート)
3)ライブラリとしてのモジュールgoogle_play_service_libチェック
4)SDKからライブラリgoogle_play_service.jarを追加します
5)仕上げ
すでにSDKをアップグレードしてこのようなエラーが発生した場合は、次のことを忘れないでください。
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ライブラリとして使用します。
使用している場合
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
も追加します
Google Playサービスライブラリのインポート中に「プロジェクトをワークスペースにコピー」をチェックすることで、このエラーを解決しました。
詳細はこちら: http://developer.Android.com/google/play-services/setup.html
私も同じ問題に直面しています。エミュレーターでアプリケーションを実行すると、ほとんどのエミュレーターにはgoogle playService(Playストアアプリ)がインストールされていないため、このエラーが発生する可能性があります。
したがって、Android playServiceアプリがインストールされているデバイスでアプリを実行してみてください。
解決策:-try...catch
にエラーパーツコードを追加してから、エミュレーターでも動作するようにします。
注:-Googleメッセージングサービスにはpalyserviceが必要です。そうでない場合はエラーSERVICE_NOT_AVAILABLE
をスローします
Gradleを使用せずにプロジェクトをビルドすると、Android Studioで同じ問題が発生します。GooglePlayServiceプロジェクトのAndroidManifest.xmlのパッケージ名に問題がある可能性があります。package = " com.google.Android.gms "。
ライブラリプロジェクトを"New Module"の代わりに"Import Module"として追加すると、問題が発生します。
[新しいモジュール]を選択すると、Android Studioは[モジュール名]と[パッケージ名]を指定するダイアログを表示し、デフォルトでは[パッケージ名]は "com.example.MODULE_NAME_YOU_SPECIFED"のようになります。 wrong。プロジェクトは成功してビルドされるため、見逃すのは非常に簡単です。
ライブラリプロジェクトを"Import Module"で追加する場合は、Android Studioはライブラリプロジェクトのソースコードを変更せずにプロジェクトを追加するだけなので、すべて問題ありません。