1

エミュレータでGoogleマップを動かそうとしています。私は実機でコードを起動できましたが、エミュレータは別の話です。

そのためにGoogle API 18でエミュレータを使用しようとしています。ただし、最小 SDK は 15 です。

エミュレーターで得たのは、下部の書き込みコーナーに +/- コントロールがある空の画面だけです。

マップを実行すると、Logcat に次のメッセージが表示されます。

09-30 12:35:27.761: ERROR/Google Maps Android API(1327): Google Maps Android API v2 only supports devices with OpenGL ES 2.0 and above 
09-30 12:35:28.441: WARN/EGL_emulation(1327): eglSurfaceAttrib not implemented 
09-30 12:36:16.741: ERROR/CheckinTask(550): Checkin failed: https://android.clients.google.com/checkin (request #0): java.net.SocketTimeoutException   
09-30 12:37:01.003: ERROR/CheckinTask(550): SSL error, attempting time correction: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x2a2d2368: Failure in SSL library, usually a protocol error
            error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0x59bf16ba:0x00000000) 
09-30 12:38:01.201: ERROR/CheckinTask(550): Checkin failed: https://android.clients.google.com/checkin (request #0): java.net.SocketTimeoutException    
09-30 12:38:17.482: WARN/Uploader(545): No account for auth token provided 09-30 
12:39:10.121: ERROR/CheckinTask(550): SSL error, attempting time correction: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x2a2daaa0: Failure in SSL library, usually a protocol error
            error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0x59bf16ba:0x00000000) 
09-30 12:40:10.381: ERROR/CheckinTask(550): Checkin failed: https://android.clients.google.com/checkin (request #0): java.net.SocketTimeoutException

これが私のマニフェストです。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.Mapper"
      android:versionCode="1"
      android:versionName="1.0">
<uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>
<uses-sdk android:minSdkVersion="15"
          android:targetSdkVersion="17"/>

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<!-- The following two permissions are not required to use
     Google Maps Android API v2, but are recommended. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>


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

    <activity android:name="MyActivity" android:label="@string/app_name"  android:theme="@android:style/Theme.NoTitleBar">
        <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="MY_API_GENERATED_KEY_IS_HERE"/>

</application>
</manifest>

レイアウト main.xml

<?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"
      android:name="com.google.android.gms.maps.MapFragment"/>

アクティビティコードは次のとおりです

package com.example.Mapper;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.util.Log;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;

public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.w("........................","................................................");
        super.onCreate(savedInstanceState);
        Integer resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(MyActivity.this);
        if (resultCode == ConnectionResult.SUCCESS) {
            setContentView(R.layout.main);
        } else {
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, MyActivity.this, 0);
            if (dialog != null) {
                //This dialog will help the user update to the latest GooglePlayServices
                dialog.show();
            }
        }


    }
}

デバイスで SSL エラーが発生せず、エミュレータを使用するとエラーが発生する理由がわかりません。手伝ってください。

ありがとうございました。

4

1 に答える 1