我正在使用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服务不受您的设备支持。请通过ok按钮与制造商联系以获取帮助。 警告: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)
我该如何解决这个问题?
答案 0 :(得分: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/8jiban3pq2cgkvo/com.android.vending-108b71f4793186b8fd1768a9cd19bbd5.apk
尝试我不记得哪一个有效,但肯定有。
您应该做的是创建具有以下属性的AVD:
启动它,当它完成启动后,打开命令提示符并前往该文件夹 如果找到这两个文件并使用install命令将它们安装到avd,
示例:
c:\ Users \ Downloads \ adb install com.android.vending.apk
安装完两个文件并收到成功按钮后,重启 模拟器并尝试在此AVD中运行您的地图应用程序,它现在应该可以正常工作。
<强>更新强>
这是我使用的文件,并且在我的两个工作站上使用屏幕截图中显示的配置,请尝试它们并告诉我您的想法。
答案 1 :(得分:1)
正如错误消息所示,您需要Google Play服务,该服务在模拟器上(以及没有Google Play商店的设备上也无法使用 - 例如Amazon Kindle)。您必须test on a phone,但有一些hacks as well。
答案 2 :(得分:0)
根据Android官方文档,你无法在你的模拟器上测试谷歌地图v2,你需要一个安装了google play的安卓设备......
答案 3 :(得分:0)
我已经创建了一个(德语)描述如何让它工作:
http://linuxchef.blogspot.de/2013/05/google-maps-api-v2-im-android-emulator.html
您基本上需要一个至少具有API级别9且没有Google API的模拟器。然后你必须从root设备上获取APK:
adb -d pull /data/app/com.android.vending-2.apk adb -d pull /data/app/com.google.android.gms-2.apk
并将它们安装在模拟器中:
adb -e install com.android.vending-2.apk adb -e install com.google.android.gms-2.apk
如果您的模拟器至少具有API级别14并且另外安装了com.google.android.apps.maps-1.apk
,您甚至可以运行原生Google地图应用玩得开心。