99

私のステップ:

  • debug.keystoreからSHA1コードを取得しました
  • GoogleAPIコンソールでアプリを作成する
  • 有効なグーグルマップAPIv2
  • 入力SHA1;my.package.name
  • APIキーを取得する
  • 作成されたAndroidManifestファイル:

        <permission
                android:name="my.package.name.permission.MAPS_RECEIVE"
                android:protectionLevel="signature"/>
    
        <uses-permission android:name="my.package.name.permission.MAPS_RECEIVE"/>
    
        <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/>
    
        <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:label="@string/app_name" android:icon="@drawable/ic_launcher" android:hardwareAccelerated="true">
    
            <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="MY_API_KEY_HERE" />
    
            <activity android:name="MyActivity"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
        </application>
    </manifest>
    
  • 作成されたレイアウト

  • 「google-play-services.jar」をライブラリに配置します

コンパイル後、クラッシュしました:

  ERROR/AndroidRuntime(10182): FATAL EXCEPTION: main
                java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
                at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
                at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
                at android.app.Activity.onCreateView(Activity.java:4716)
                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
                at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
                at android.app.Activity.setContentView(Activity.java:1881)
                at com.example.gm2.MyActivity.onCreate(MyActivity.java:16)
                at android.app.Activity.performCreate(Activity.java:5104)
                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
                at android.app.ActivityThread.access$600(ActivityThread.java:141)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
                at android.os.Handler.dispatchMessage(Handler.java:99)
                at android.os.Looper.loop(Looper.java:137)
                at android.app.ActivityThread.main(ActivityThread.java:5039)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:511)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
                at dalvik.system.NativeStart.main(Native Method)

その後、レイアウトを次のように変更しました。

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/map"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />

MyActivityをに変更しました

  super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();

    transaction.add(R.id.map, MapFragment.newInstance());           
    transaction.commit();

その結果、アプリケーションは起動しましたが、地図が表示されませんでした。

コンソールログ:

ERROR/Google Maps Android API(10369): Authorization failure.
4

18 に答える 18

108

手順

  • デバイスにGooglePlayサービスAPKがあることを確認する
  • GooglePlayサービスリビジョンをインストールします。2つ以上

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

  • https://code.google.com/apis/console/でプロジェクトを作成するには
  • 「GoogleMapsAndroidAPIv2」を有効にするには ここに画像の説明を入力してください
  • APIコンソールでプロジェクトにSHA1を登録し(今、SHA1; your.app.package.nameを書き込む必要があります)、APIキーを取得します
  • ディレクトリANDROID_SDK_DIR/extras / google / google_play_services / libproject/google-play-services_libをプロジェクトのルートにコピーします
  • YOUR_PROJECT/project.propertiesに次の行を追加します

android.library.reference.1=google-play-services_lib

  • 次の行をに追加するにはYOUR_PROJECT/proguard-project.txt

-keep class * extends java.util.ListResourceBundle {

   protected Object[][] getContents();

}

これで、Android用のGoogle MapAPIV2を使用して独自のGoogleMapアプリを作成する準備が整いました。

最小SDK=8でアプリケーションを作成する場合は、MapFragmentの代わりにandroidサポートライブラリv4+SupportMapFragmentを使用してください。

于 2012-12-05T09:09:46.617 に答える
36

また、この投稿を確認してください:Google Map Android Api V2サンプルコードが機能しない、正しい手順を実行したことを完全に確信している場合は、2番目の答えに従ってください。認証はどこかにキャッシュされます。アプリケーションを手動でアンインストールしてみてください(通常のアプリケーション)次に、プロジェクトを再度「実行」します

于 2013-09-30T07:24:14.807 に答える
20

APIを機能させるために多くの時間を無駄にしたので、MapAPIv2の段階的な検証を試みます。

ステップ1:APIキーを申請する

Google APIコンソールに慣れていない場合は、上記のRusfearuthの非常に良い答えを読んでください。

ステップ2:SHAハッシュを確認します(この場合、私はeclipseのデバッグキーを使用します):

Windowsマシンでは、コマンドプロンプトでユーザーディレクトリにアクセスします。

C:\Users\you>keytool -list -alias androiddebugkey -keystore .android\debug.keyst
ore -storepass android -keypass android

次のようなものが得られます:

androiddebugkey, 15.10.2012, PrivateKeyEntry,
Zertifikat-Fingerprint (SHA1): 66:XX:47:XX:1E:XX:FE:XX:DE:XX:EF:XX:98:XX:83:XX:9A:XX:23:A6

次に、マップアクティビティのパッケージ名を確認します(例:com.example.mypackagename)。

これを組み合わせて、GoogleAPIコンソールの設定で確認します。

66:XX:47:XX:1E:XX:FE:XX:DE:XX:EF:XX:98:XX:83:XX:9A:XX:23:A6;com.example.mypackagename

APIキーを取得する場所:

AZzaSyDhkhNotUseFullKey49ylKD2bw1HM

ステップ3.マニフェストメタデータ

メタデータが存在し、正しいキーが含まれているかどうかを確認します。アプリをリリースする場合は、別のキーが必要です。

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

ステップ4.マニフェスト機能:

マップAPIにはいくつかのグラフィックサポートが必要なため、このエントリが必要です。

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

心配しないでください。99.7%のデバイスがこれをサポートしています。

ステップ5.マニフェストライブラリ:

Googleライブラリを追加します。

    <uses-library
        android:name="com.google.android.maps"
        android:required="false" /> // This is required if you want your app to start in the emulator. I set it to false also if map is not an essential part of the application.

ステップ6.マニフェスト権限:

パッケージ名を2回確認してください:com.example.yourpackage

<permission
    android:name="com.example.yourpackage.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.example.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"/>

ステップ7.マップフラグメントをレイアウトに含めます。

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    class="com.google.android.gms.maps.SupportMapFragment"
    map:cameraTargetLat="47.621120"
    map:cameraTargetLng="-122.349594"
    map:cameraZoom="15" />

2.x Androidバージョンへのリリースの場合、アクティビティにサポートを追加する必要があります。

import android.support.v4.app.FragmentActivity;

マップの場合:機能するエントリには次のものが含まれます

xmlns:map="http://schemas.android.com/apk/res-auto"

アクティビティレイアウト(例:LinearLayout)。

私の場合、レイアウトで何かを変更するたびにプロジェクトをクリーンアップする必要があります。バグのようです。

ステップ8:Eclipse-Project-Cleanを使用します。

楽しみ!

于 2013-04-22T10:05:47.763 に答える
16

ANDROID-SDK-DIRECTORY / extras / google / google_play_services/libprojectにあるライブラリプロジェクトを使用する必要があります

これで最初の問題が修正されます。

あなたの2番目についてはよくわかりませんが、最初の副作用である可能性があります。私はまだ自分のアプリで地図を機能させようとしています:)

于 2012-12-04T06:15:40.363 に答える
5

今日、私はこの問題に直面しました。Android Studio 2.1.3、Windows 10を使用しました。デバッグ中は正常に機能しますが、リリースモードに更新すると機能しません。私はすべてのプロガード条件をクリアし、更新しましたが、これは解決策ではありませんでした。

このソリューションは、プロジェクトの構造に関連しています。google_maps_api.xmlファイルは、app \ src \ debug\resとapp\src \ release\resで異なります。デバッグからリリースフォルダに手動でコピーして貼り付けました。

今では動作します。

于 2016-10-17T15:37:22.923 に答える
5

私は、すべてではないにしても、上記のGunnar Bernsteinの提案のほとんどに従いましたが、それでも機能しませんでした。しかし、私が彼の提案と次のことを実行した後、それは機能し始めました:

  1. Android Studioのオプションの右クリックリストを使用して、新しいMapActivityを作成しました:[新規]->[Google]->[Googleマップアクティビティ]

  2. 次に、自動的に生成されるgoogle_maps_api.xmlファイルを開き、指定されたリンクを使用して新しいAPIKEYを作成しました。すべての手順を実行し、現在のプロジェクトで新しいキーを保存しました。次に、古い登録済みAPI KEYが不要になったため、削除しました。

  3. android:value="@string/google_maps_keyマニフェストファイルの下で、古いAPI KEY値を、KEYを直接指定する代わりに、この新しいXMLファイルによって作成された文字列ショートカット"に置き換えました 。

  4. 最後に、新しいMapActivityを削除しますが、そのプロセスで作成されたxmlファイルは保持します。

注:この方法でAPI KEYを作成することにより、[資格情報]の下の[制限]列に「Androidアプリ」と表示されるようになりました。以前、それが機能しなかったとき、コラムは「Androidアプリ、1API」または同様のものを述べました。これが違いを生むかどうかはわかりません。 注:いいえ、これは、このAPIキーに対して特定のAPIが選択されていないことを意味します([コンソール]->[APIキー]->[キー制限]->[API制限])。

注:マニフェストファイルの下のメタデータタグのように見えます。

android:name="com.google.android.maps.v2.API_KEY

に置き換えられました:

android:name="com.google.android.geo.API_KEY"

どちらも使えると思いますが、最初から後者の方がいいと思います。

注:build.gradleファイルのandroid- > defaultConfig-> applicationIdに記載されている値は、[資格情報]ページの[パッケージ名]テキストと一致する必要があります。

于 2018-01-17T14:58:52.753 に答える
3

これをマニフェストファイルに追加するだけです。

**<uses-library android:name="com.google.android.maps" />**

例えば...

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name" >
    <uses-library android:name="com.google.android.maps" />

    <activity
        android:name=".California"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

そして、あなたのグーグルプレイサービスライブラリを更新してください...ウィンドウに移動->AndroidSDKマネージャー->グーグルプレイサービスを更新...それをインストールしました..古いものを削除してこれを保持します。ANDROID-SDK-DIRECTORY / extras / google /google_play_services/からこれを取得します

ありがとう..投票してください

于 2013-07-26T06:51:05.983 に答える
3

マニフェストとアプリでパッケージ名を確認することで、このエラーを解決しましたbuild.gradle

マニフェスト:

私はパッケージ名を次のように使用しています:

com.app.triapp

アプリbuild.gradleの場合:

 defaultConfig {

        applicationId "com.app.live"
    }

に変更した後com.app.triappbuild.gradle私の問題を解決しました。

于 2016-06-29T11:47:10.990 に答える
2

GoogleマップのV1からV2に移行しています。Eclipseを介してアプリを実行しようとすると、この失敗が発生していました。私の根本的な原因は、Eclipseを介して実行するときに使用されるAndroidデバッグキーストアではなく、リリース証明書キーストアを使用していたことです。次のコマンド(OSX / Linux)は、デバッグキーストアのSHA1キーを取得します。

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

代わりにWindows7を使用している場合は、次のコマンドを使用します。

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

Androidはセキュリティクレデンシャルをキャッシュするため、新しいキーを試す前に、デバイスからアプリを完全にアンインストールすることをお勧めします。

于 2014-03-21T23:44:05.773 に答える
1

"java.lang.NoClassDefFoundError:com.google.android.gms.R $ styleable"

このエラーも発生しました。次のことを行う必要があります:ファイル->インポート->既存のAndroidコードをワークスペースに->参照->AndroidSDK->エクストラ->グーグル->google_play_services->lib_project->google_play_services_libそしてOK。プロジェクトを確認して終了します。

プロジェクトはパッケージエクスプローラーに移動します。次に、プロジェクトに移動します(エラーあり)->プロパティ-> Androidで、ライブラリで[追加...]をクリックします。google_play_services_libが表示されます。追加して再試行してください:)

于 2013-04-15T01:52:24.943 に答える
1

同じ問題が発生しましたが、パッケージ名がほぼ同じで、同じSHA-1フィンガープリントを持つ2つの異なるマップAPIキーを作成したことが原因であることが判明しましcom.bla.blacom.bla.bla.something

于 2016-08-23T07:49:22.863 に答える
1
  • APIコンソールでマップSDK for Androidが有効になっていることを確認してください。
  • また、キーの使用を完全に有効にするために、パッケージ名とSHA-1署名証明書のフィンガープリントを追加する必要がある場合があります。

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

于 2020-06-17T18:15:28.223 に答える
0

まったく同じ問題が発生し、MapsApiV2のライブラリプロジェクトのSDKをAndroid 2.3.3(APIレベル10)に設定する必要がありました。

于 2013-07-03T08:43:59.307 に答える
0

私も同じ問題を抱えていました。約2時間のグーグル、再試行、APIキーの再生成などを何度も行った後、GoogleAPisコンソールで間違ったサービスを有効にしていることに気付きました。Google Maps API v2サービスを有効にしましたが、Androidアプリの場合はGoogle Maps AndroidAPIv2を使用する必要があります。適切なサービスを有効にした後、すべてが機能し始めました。

于 2013-10-03T16:27:07.847 に答える
0

ECLIPSEでSHA1キーが変更された可能性があるため、次の場所で新しいSHA1キーを使用してGoogleキーを再生成する必要があります: https ://console.developers.google.com/project/watchful-net-796/apiui/credential その後、新しいキーをコピーしますマニフェストに入れて、このgoogleページを何度かリロードすると、キーが更新され、プロジェクトが再構築され、機能します。 P / S:エラーのため、.androidフォルダーを削除したので、EclipseregenSHA1を削除しました。

于 2015-01-25T09:15:20.187 に答える
0

Googleドキュメントで提供されているのと同じ手順に従いましたが、同じエラーが発生していました。後で、app.keystoreを使用してアプリに署名していて、APIキーの生成に使用していたSHAキーがデバッグキーであることに気付きました。

だから私は単にファイルsigningConfig signingConfig.genericからを削除しbuild.gradle、私の地図はうまく機能し始めました。

これが誰かを助けることを願っています。

于 2016-06-02T06:16:24.790 に答える
0

私は同じ問題に直面しました。

アプリケーションのリリースバージョンのAPIを発行した場合。その場合、そのAPIは、デバッグバージョンではなく、リリースバージョンでのみ機能します。したがって、電話またはエミュレータでリリースバージョンを使用していることを確認してください。

于 2017-07-05T20:12:45.940 に答える
0

私にとっては、すべてがエミュレーターと物理デバイスの両方で機能していました。

ただし、新しいAPIレベルのエミュレーターで同じアプリをデバッグするために2台目のマシンをセットアップすると、機能しなくなりました。

そのマシンの指紋が変わったことに気づかなかった。デバイスログに認証失敗エラーログが表示された後、GoogleDeveloperConsoleのフィンガープリントをエラーメッセージのフィンガープリントと綿密に比較しました。その時、私は違いを見ました。新しいフィンガープリントを(パッケージ名と組み合わせて)開発者コンソールに追加した後、私のアプリは新しいシステムのエミュレーターで期待どおりに動作し始めました。

したがって、新しいシステムをセットアップする場合は、指紋をもう一度確認してください。

于 2018-11-02T19:23:51.560 に答える