0

我正在开发 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)

我怎样才能解决这个问题?

4

4 回答 4

3

在关于堆栈溢出的一篇文章中,我偶然发现了一组包含 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 中运行您的地图应用程序,它现在应该可以工作了。

更新:

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

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

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

于 2013-03-02T18:06:35.417 回答
1

正如错误消息所说,您需要 Google Play 服务,该服务在模拟器上不可用(以及在没有 Google Play 商店的设备上 - 例如 Amazon Kindle)。您必须在手机上进行测试,但也有一些技巧

于 2013-03-02T08:57:08.720 回答
0

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

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

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

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

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

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

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

玩得开心。

于 2013-05-08T05:52:54.683 回答
0

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

于 2013-03-02T09:11:44.370 回答