【问题标题】:Google Maps API V2 Not work in Emulator [duplicate]Google Maps API V2 在模拟器中不起作用 [重复]
【发布时间】:2013-02-16 19:57:33
【问题描述】:

我正在 Android 中开发 Googl Maps API v2。

MapExample.java 代码

 public class MapExample extends FragmentActivity {  
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);             
}

main.xml 代码

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment" />

清单文件代码

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

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

<permission
    android:name="com.example.android.mapexample.permission.MAPS_RECEIVE"
    android:protectionLevel="signature"/>

                                                                                                                                                                                                                                                                         <uses_permission                                                                                 android:name="com.example.android.mapexample.permission.MAPS_RECEIVE"/>
<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" />    
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />




<application
    android:allowBackup="true"
    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="My API_KEY"/>

    <activity
        android:name=".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>


</application>

我在模拟器中运行此代码它在模拟器中显示一条消息并在 LogCat 中显示警告

消息:您的某些应用程序所依赖的 Google Play 服务不受您的设备支持。请联系制造商以获取有关确定按钮的帮助。 警告:Google Play 签名无效。

当我点击那个按钮时,我得到了错误

03-02 13:17:30.746: D/AndroidRuntime(905): Shutting down VM
03-02 13:17:30.746: W/dalvikvm(905): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
03-02 13:17:30.776: E/AndroidRuntime(905): FATAL EXCEPTION: main
03-02 13:17:30.776: E/AndroidRuntime(905): java.lang.NullPointerException
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1409)
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.app.Activity.startActivityForResult(Activity.java:3351)
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.app.Activity.startActivityForResult(Activity.java:3312)
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:817)
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.app.Activity.startActivity(Activity.java:3522)
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.app.Activity.startActivity(Activity.java:3490)
03-02 13:17:30.776: E/AndroidRuntime(905):  at com.google.android.gms.internal.e$2.onClick(Unknown Source)
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.view.View.performClick(View.java:4084)
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.view.View$PerformClick.run(View.java:16966)
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.os.Handler.handleCallback(Handler.java:615)
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.os.Looper.loop(Looper.java:137)
03-02 13:17:30.776: E/AndroidRuntime(905):  at android.app.ActivityThread.main(ActivityThread.java:4745)
03-02 13:17:30.776: E/AndroidRuntime(905):  at java.lang.reflect.Method.invokeNative(Native Method)
03-02 13:17:30.776: E/AndroidRuntime(905):  at java.lang.reflect.Method.invoke(Method.java:511)
03-02 13:17:30.776: E/AndroidRuntime(905):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-02 13:17:30.776: E/AndroidRuntime(905):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-02 13:17:30.776: E/AndroidRuntime(905):  at dalvik.system.NativeStart.main(Native Method)

我该如何解决这个问题?

【问题讨论】:

    标签: android google-maps


    【解决方案1】:

    在一篇关于堆栈溢出的帖子中,我偶然发现了一组包含 2 个文件的文件:

    com.android.vending.apk

    和:

    com.google.android.gms.apk

    这是我为自己保存的链接:

    http://www.filedropper.com/comandroidvending-1

    http://www.filedropper.com/comgoogleandroidgms-1

    或:

    https://www.dropbox.com/s/u3blse4z3l2et96/com.google.android.gms-6413100ccfca460007fdc988b1363db8.apk

    https://www.dropbox.com/s/8jiban3pq2cgkvo/com.android.vending-108b71f4793186b8fd1768a9cd19bbd5.apk

    两个都试一下,我不记得哪个有效,但肯定有一个。

    您应该做的是创建具有以下属性的 AVD:

    启动它,当它完成启动后,打开命令提示符并前往文件夹 是否找到了这两个文件并使用 install 命令将它们安装到 avd,

    示例:

    c:\Users\Downloads\adb install com.android.vending.apk

    安装完这两个文件并收到成功消息后,重新启动 模拟器并尝试在此 AVD 中运行您的地图应用程序,它现在应该可以工作了。

    更新:

    这是我使用的文件,在我的 2 个工作站上工作,配置如屏幕截图所示,请试一试并告诉我你的想法。

    http://www.mediafire.com/download.php?pxpjfkveemq29qk

    http://www.mediafire.com/download.php?zn8wna5wf4ek5le

    【讨论】:

    • 好的,谢谢。但是我在我的模拟器中使用这两个 apk 时会显示一条名为“除非您更新 Google Play 服务,否则此应用将无法运行”的消息。单击更新按钮后,它会显示Logcat 中的一个交战“Google Play 服务已过期。需要 3025100 但找到 2012110”......
    • 请查看更新的答案,我已经为您上传了我现在正在为我工​​作的两个工作 apk 文件。
    • 我正在使用那些更新 Apk 文件,这些文件对我不起作用。我仍然收到同样的警告。
    • 您是否尝试过使用图片中的配置创建干净的 AVD?并安装它?请描述您采取的步骤。
    • 它仍然显示相同的警告。我的模拟器有什么问题。我使用的是 Linux 操作系统,这里我使用上面的 fig 属性来创建 avd。通过终端命令安装 apks 文件是 adb install required_file.apk, adb install required_file.apk。
    【解决方案2】:

    正如错误消息所述,您需要 Google Play 服务,该服务在模拟器上不可用(以及在没有 Google Play 商店的设备上 - 例如 Amazon Kindle)。你必须test on a phone,但是有一些hacks as well

    【讨论】:

      【解决方案3】:

      根据 Android 官方文档,您无法在模拟器上测试 google maps v2,您需要安装了 google play 的 android 设备...

      【讨论】:

      • 请分享链接
      【解决方案4】:

      我创建了一个(德语)说明如何让它工作:

      http://linuxchef.blogspot.de/2013/05/google-maps-api-v2-im-android-emulator.html

      您基本上需要一个至少具有 API 级别 9 且没有 Google API 的模拟器。然后,您必须从有根设备中获取 APK:

      adb -d pull /data/app/com.android.vending-2.apk adb -d pull /data/app/com.google.android.gms-2.apk

      并将它们安装在模拟器中:

      adb -e 安装 com.android.vending-2.apk adb -e install com.google.android.gms-2.apk

      如果您的模拟器至少具有 API 级别 14 并另外安装 com.google.android.apps.maps-1.apk,您甚至可以运行原生 Google 地图应用程序

      玩得开心。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-30
        • 2012-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多