1. ホーム
  2. android

[解決済み] Google Maps Android API v2 認証失敗のお知らせ

2022-03-14 20:13:13

質問

私の手順

  • debug.keystoreからSHA1コードを取得。
  • Google apis コンソールでアプリを作成
  • google map api v2 を有効にする。
  • 入力 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>
    
    
  • 作成されたレイアウト

  • libs に "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.

解決方法は?

ステップ :

  • 端末にGoogle PlayサービスのAPKがあることを確認します。
  • Google Play Service rev.2以上をインストールする場合

  • でプロジェクトを作成します。 https://code.google.com/apis/console/
  • をクリックすると、Google Maps Android API v2" が有効になります。
  • でSHA1をプロジェクトに登録する( 今、あなたはSHA1;あなたの.app.package.nameを書き込まなければなりません。 ) のAPIコンソールで、API KEYを取得します。
  • 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();

}

これで、Google Map APIs V2 for Androidを使ったGoogle Mapアプリを作成する準備が整いました。

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