GoogleマップAndroid v2を使用して、Googleページからコードをコピーするだけでデモを実行しようとしています: https://developers.google.com/maps/documentation/Android/start #adding_the_api_key_to_your_application
アクティビティ用:
package com.example.mapdemo;
import Android.app.Activity;
import Android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
レイアウト用:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/map"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
class="com.google.Android.gms.maps.MapFragment"/>
次のように、ページに従ってAPIキーを申請し、androidmanifest.xmlファイルを変更しました。
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.wenhai.driverschool"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk
Android:minSdkVersion="8"
Android:targetSdkVersion="15" />
<uses-permission Android:name="Android.permission.INTERNET" />
<!-- add for map2 -->
<permission
Android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
Android:protectionLevel="signature" />
<uses-permission Android:name="com.example.mapdemo.permission.MAPS_RECEIVE" />
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES" />
<!-- External storage for caching. -->
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Maps API needs OpenGL ES 2.0. -->
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true" />
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="AIzaSyDVAF4WaVSVRDKJx87It8OSFP5txQcPabc" />
<activity
Android:name=".MainActivity"
Android:label="@string/title_activity_main" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
また、Eclipseでアプリをgoogle-play-services_libに参照します。
しかし、毎回、このようなlogcatのエラーレポート:
2-05 16:22:53.609: E/AndroidRuntime(21623): Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wenhai.driverschool/com.wenhai.driverschool.MainActivity}: Android.view.InflateException: Binary XML file line #2: Error inflating class fragment
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1967)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1992)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.ActivityThread.access$600(ActivityThread.Java:127)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1158)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.os.Handler.dispatchMessage(Handler.Java:99)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.os.Looper.loop(Looper.Java:137)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.ActivityThread.main(ActivityThread.Java:4441)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Java.lang.reflect.Method.invokeNative(Native Method)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Java.lang.reflect.Method.invoke(Method.Java:511)
12-05 16:22:53.609: E/AndroidRuntime(21623): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:823)
12-05 16:22:53.609: E/AndroidRuntime(21623): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:590)
12-05 16:22:53.609: E/AndroidRuntime(21623): at dalvik.system.NativeStart.main(Native Method)
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: Android.view.InflateException: Binary XML file line #2: Error inflating class fragment
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:697)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:466)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:352)
12-05 16:22:53.609: E/AndroidRuntime(21623): at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:255)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.Activity.setContentView(Activity.Java:1835)
12-05 16:22:53.609: E/AndroidRuntime(21623): at com.wenhai.driverschool.MainActivity.onCreate(MainActivity.Java:11)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.Activity.performCreate(Activity.Java:4465)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1049)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1931)
12-05 16:22:53.609: E/AndroidRuntime(21623): ... 11 more
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: Android.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.Android.gms.maps.MapFragment: make sure class name exists, is public, and has an empty constructor that is public
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.Fragment.instantiate(Fragment.Java:581)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.Fragment.instantiate(Fragment.Java:549)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.Activity.onCreateView(Activity.Java:4235)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:673)
12-05 16:22:53.609: E/AndroidRuntime(21623): ... 20 more
12-05 16:22:53.609: E/AndroidRuntime(21623): Caused by: Java.lang.ClassNotFoundException: com.google.Android.gms.maps.MapFragment
12-05 16:22:53.609: E/AndroidRuntime(21623): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:61)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Java.lang.ClassLoader.loadClass(ClassLoader.Java:501)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Java.lang.ClassLoader.loadClass(ClassLoader.Java:461)
12-05 16:22:53.609: E/AndroidRuntime(21623): at Android.app.Fragment.instantiate(Fragment.Java:571)
12-05 16:22:53.609: E/AndroidRuntime(21623): ... 23 more
この理由はわかりません。
プロジェクトにgoogle-play-services.jarを追加すると、別のエラーが報告されます:
12-05 16:34:23.269: E/AndroidRuntime(22638): FATAL EXCEPTION: main
12-05 16:34:23.269: E/AndroidRuntime(22638): Java.lang.NoClassDefFoundError: com.google.Android.gms.R$styleable
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.google.Android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.google.Android.gms.maps.MapFragment.onInflate(Unknown Source)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.app.Activity.onCreateView(Activity.Java:4242)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:673)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:466)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:352)
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:255)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.app.Activity.setContentView(Activity.Java:1835)
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.wenhai.driverschool.MainActivity.onCreate(MainActivity.Java:11)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.app.Activity.performCreate(Activity.Java:4465)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1049)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1931)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1992)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.app.ActivityThread.access$600(ActivityThread.Java:127)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1158)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.os.Handler.dispatchMessage(Handler.Java:99)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.os.Looper.loop(Looper.Java:137)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Android.app.ActivityThread.main(ActivityThread.Java:4441)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Java.lang.reflect.Method.invokeNative(Native Method)
12-05 16:34:23.269: E/AndroidRuntime(22638): at Java.lang.reflect.Method.invoke(Method.Java:511)
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:823)
12-05 16:34:23.269: E/AndroidRuntime(22638): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:590)
12-05 16:34:23.269: E/AndroidRuntime(22638): at dalvik.system.NativeStart.main(Native Method)
誰でもこれについて私を助けることができますか?
IntelliJ IDEA(IntelliJ 12用に更新):
~/Android-sdk/extras/google/google_play_services/libproject/google-play-services_lib/src/dummy.Java
を含むファイルclass dummy {}
を作成します。~/Android-sdk/extras/google/google_play_services/libproject/google-play-services_lib
~/Android-sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar
<Module source>
をリストの一番下に移動する矢印。dummy.Java
は必要に応じて削除できます。
編集:これをしばらく使用した後、小さな欠陥/バグがあることがわかりました。 IDEAは、.iml
ディレクトリにあるgoogle-play-services_lib
プロジェクトファイルを開くことができないと文句を言うことがあります。その場合は、プロジェクトが再構築されると、少なくとも問題が解決するまで問題は解決します。
更新
Commonsware MapV2コードスニペットに従って、理解を深めてください。
(Omnibusエディションに存在します)
次のスニペットは私の最後でうまく機能しています。SupportMapFragment
を使用することを選択します。
プロジェクトにgoogle-play-services.jar
を追加することを忘れないでください。
MainActivity.Java
package com.example.newmapview;
import Android.os.Bundle;
import Android.support.v4.app.FragmentActivity;
import com.google.Android.gms.maps.SupportMapFragment;
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SupportMapFragment fragment = new SupportMapFragment();
getSupportFragmentManager().beginTransaction()
.add(Android.R.id.content, fragment).commit();
}
}
manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.newmapview"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk
Android:minSdkVersion="8"
Android:targetSdkVersion="16" />
<permission
Android:name="com.example.newmapview.permission.MAPS_RECEIVE"
Android:protectionLevel="signature" />
<uses-permission Android:name="com.example.newmapview.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" />
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.example.newmapview.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="XXXXX" />
</application>
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true" />
</manifest>
結果はこちら
これが役立つことを願っています。
レイアウトを次のように置き換えてみてください。
<?xml version="1.0" encoding="utf-8"?>
<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" />
11未満のAPIにはSupportMapFragmentを使用する必要があります!
オーレル
私は同じ問題に直面しました。私のために働いた解決策を見つけるのに2日かかりました:
google-play-services_lib
(プロジェクトの削除を右クリック)MainActivity
)を削除します次のようなものが表示されるはずです。
注:次のようなものは使用しないでください(プロジェクトはワークスペースから参照する必要があります)。
問題は、2つのプロジェクトが同じライブラリを参照していることだと思います
これを試して
http://developer.Android.com/tools/projects/projects-Eclipse.html#ReferencingLibraryProject
Googleサービスのプロジェクトを追加し、プロジェクトプロパティ-> Androidに参照を追加しました
プロジェクトのlibsディレクトリに2つのjarを追加します。以下の情報に従ってください。特に、私はあなたがする必要があると思う:
サンプルコードを使用するときに、まったく同じエラーが発生したため、この2番目の手順が必要であることがわかりました。私の実際のプロジェクトでcom.google.Android.gms.R $ styleableのNoClassDefFoundErrorを回避するには、最初のステップが必要でした。
また、サンプルコードが機能する前に、クリーンビルドを実行し、デバイスからアプリをアンインストールする必要がありました(以前のテスト試行から)。
どうもありがとうございました。
たぶん、あなたはこれを強調する必要があります:
注:Google PlayサービスはAndroidエミュレーターではサポートされていません— APIを使用して開発するには、Android電話やタブレットなどの開発デバイスを提供する必要があります。
http://developer.Android.com/google/play-services/setup.html
アプリを実行およびデバッグできる物理的な開発デバイスを提供する必要があります。エミュレータを使用しないでください。動作しません。
MainActivity
(またはv2マップを配置する各アクティビティ)で、FragmentActivity
またはActivity
を拡張する必要があります。使用するのは、SupportMapFragment
または単にMapFragment
です。 MapFragment
クラスは、API 12以降をターゲットにしている場合にのみ使用してください。それ以外の場合は、SupportMapFragment
を使用します。微妙な違いですが、エラーになります。
Googleマップは現在Fragmentsの下にラップされているため、アクティビティをFragmetActivityだけでなく、「supporrtMapFragment "を使用してFragmentをsupportパッケージのみ。
この依存関係をbuild.gradleに追加します
compile 'com.google.Android.gms:play-services:6.5.87
'
今、これは動作します
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">
<fragment
Android:id="@+id/map"
Android:name="com.google.Android.gms.maps.MapFragment"
Android:layout_width="match_parent"
Android:layout_height="388dp"
Android:layout_weight="0.40" />
</LinearLayout>
前述の多くのこととは別に、私にとっては、順序とエクスポートでも.jarをマークすることが重要でした。私が知る限り、それは通常言及されておらず、私にとってそれは重要でした。
この提案に関連する: https://stackoverflow.com/a/20215481/3080835
また、これをマニフェストのApplication
要素に追加する必要がありました。
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
完璧に機能しました。
Intellij Ideaプロジェクトでは、google-play-services_libとgoogle-play-services.jarの両方をプロジェクトに追加する必要がありました。そして、google-play-services_libプロジェクトにgoogle-play-services.jarも追加します。その後、 here で説明されていることをすべて実行した場合、アプリケーションは動作するはずです。
注意深く読んでください
すべてがGoogleコードと同じように動いている場合は、私の場合はマニフェストファイルを確認してくださいジオキーとマップキーを追加したので、例外が発生します、
注-マニフェストファイルに2つのキーを追加しないで、マップキーを削除してください
meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="@string/google_maps_key"/>
このコードを追加します。
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/auto_location"/>
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version"/>
アクティビティで書きましたimport com.google.Android.gms.maps.SupportMapFragment;
そしてEclipseは私に赤いアイコンを与えた>クリック>修正プログラム設定..>アーカイブgoogle-play-services.jarを追加
そして最後にうまくいきました!!
Google Play開発者サービスをプロジェクトに追加する
アプリでGoogle Play開発者サービスAPIを利用できるようにするには:
このリンクにある手順に従ってください: http://developer.Android.com/google/play-services/setup.html#Setup
LG-E730と2.3.4 Androidで同じ問題が発生しました。このエラーは、携帯電話で Google Play Service を更新する前に表示されます。
Eclipseでは、jarを追加するだけでなく、Google Playサービス用に別のプロジェクトを作成し、Androidプロジェクトからlibとして参照する必要があります。私のコンピューターでは、Google Play Services EclipseプロジェクトをD:\ adt-bundle-windows-x86-20130219\sdk\extras\google\google_play_services\libproject\google-play-services_libから直接インポートし、Libプロジェクトに設定しました。 Androidプロジェクトから参照できます。
同じ問題が発生し、SDKからPlay Servicesをインストールしただけで、すべての問題が飛び去りました。
同じチュートリアルに記載されている
以下のコードは、Android API 12以降を対象とするアプリケーションで設定をテストする場合にのみ有用であることに注意してください
最小SDKバージョンを12に変更するだけで機能します
<uses-sdk
Android:minSdkVersion="8"
Android:targetSdkVersion="15" />
Havenは、APIの古いバージョンに対してAurelの回避策を試しました。
私はこの問題を抱えています。GooglePlayサービスを更新し、依存関係としてgoogle-play-service-libプロジェクトを追加していることを確認してください。コードを変更せずに動作していますが、 。プロジェクト構成をチェックして、リソースが含まれていることを確認してください。」しかし、これはsetMyLocationEnabled(true)を持っている場合にのみ発生します。誰もがその理由を知っていますか?
私は本当の解決策を得ることができませんが、これらのことをした後に解決します:
-google-play-services_libのインポート時に「プロジェクトをワークスペースにコピー」にチェックマークを付けます
-minSdkVersionを13未満に設定しないでください
-テーマでエラーが発生した場合は、レイアウトテーマを任意のシステムテーマに変更してみてください
-プロジェクトをゼロから再作成するか、どこかから取得した場合はすべて元に戻します
最初のステップ http://developer.Android.com/tools/projects/projects-Eclipse.html#ReferencingLibraryProject 2番目のステップ http://developer.Android.com/google/play- services/setup.html そのページには注記がありますが、注意を払いませんでした
注:ソースツリーにコピーしたライブラリのコピーを参照する必要があります。Android SDKディレクトリからライブラリを参照しないでください。
しかし、私はそれがドキュメンテーションの良い方法ではないと思う:)
Google-play-services_libを実際にビルドすることを忘れないでください!!そのため、「google-play .... apkが見つかりませんでした」と表示されます。私にとって、Eclipseでは、他のハックは必要ありませんでしたが、Androidビルドパスやプロジェクト参照などからではなく、Javaサブメニューからプロジェクトを参照する必要がありました。手動で配置されたjarファイルも、実際に必要なものもありませんでした。
これは一部の人に役立つかもしれません。 2つのプロジェクトがありました。1つはGoogleのデモのコピーであり、正常に機能しました。別のプロジェクトを既存のプロジェクトにコピーしましたが、まったく実行できませんでした。そして、2回目の失敗では、上記のエラーメッセージが表示されました。
私の問題は、再構築、複数回のインポートなどを行っても、ライブラリが有効になっていないことが原因でした。プロジェクト->プロパティ-> Java Build Path-> Order&Exportタブを右クリックします。失敗したプロジェクトでは、「Android Private Libraries」タブのチェックが外されていました。
有効にすると、プロジェクトは正常に機能しました。
上記のすべての人が言っていることはすべてあり、oncreateメソッドの最初の命令としてsuper.onCreate(savedInstanceState);
を呼び出すだけでエラーを解決しました。メソッドの最後の行になる前。 :|一日中無駄。
Windows 7 64ビットマシンでAndroid SDK for x86を使用しているときにこの問題に直面しました。 Android SDK 64ビットバージョンをダウンロードし、Eclipseに[ウィンドウ]> [設定]> [Android]> [SDKの場所]で表示し、問題の発生を停止しました。
MapFragmentを使用している場合、FragmentActivityを使用できないこと(この環境ではSupportMapFragmentは正常に機能します)に言及する価値があると思います(1時間以上髪を引っ張った後)。私はそれをあきらめる準備ができていた。
ドライブ関連のインポートを処理するには、Google Drive SDK
からいくつかのjarが必要になります。大きなものがいくつかあるため、アプリに合わせて個別に追加することをお勧めします。
それがcom.google.Android.gms.* imports
を解決しない場合、the Google Play Services add-on needs to be installed (from Extras -> Google Play Services in the SDK Manager) and google-play-services.jar needs to be added to your build path.
編集:
この場合、次のjarが必要でした。
google-api-services-drive-v2-rev1-1.7.2-beta.jar
google-http-client-1.10.3-beta.jar
google-http-client-Android2-1.10.3-beta.jar
google-oauth-client-1.10.1-beta.jar
google-api-client-Android2-1.10.3-beta.jar
google-api-client-1.10.3-beta.jar