Google地图适用于调试,而不适用于apk

时间:2016-02-02 20:59:06

标签: android google-maps

我在地图上添加了一个地图,并在其上方添加了文字视图。在调试时,当我在手机上运行应用程序时,地图会按预期出现。我将当前的经度和纬度传递给意图,地图以我的位置为中心。文本视图是可见的,我可以放下并固定并获取新坐标。

我想与某人共享apk,所以我首先生成了该文件并通过电子邮件发送给自己。在我的手机上下载并安装测试后,我注意到地图不再显示。没有例外。文本视图是可见的,而小的“谷歌”则是可见的。徽标位于右下角,因此地图就在那里,但它只是一个白色的屏幕。没有地图图片。我试着捏捏我以为放大或缩小,但没有任何变化。

以下是活动的布局。当我在设计模式下查看它时,会出现渲染问题。渲染异常的部分输出如下。唯一的例外是1025行,这对于SO帖子来说太长了。这是很多重复,所以我把它削减了。我不确定这两个问题是否相关。

我的布局是否有任何问题可以解决问题?手机显示该应用具有正确的位置服务权限。

我在Android Studio 1.4.0 / SDK 23

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MapActivity" >
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:map="http://schemas.android.com/apk/res-auto"     android:layout_width="match_parent"
    android:layout_height="match_parent" android:id="@+id/map"     tools:context=".GarbageLocator"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    tools:layout="@layout/activity_garbage_locator" />
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin">
    <TextView
        android:id="@+id/ItemName"
        android:text="@string/hunt_item"
        android:gravity="center"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"

        android:textSize="32sp"/>
</RelativeLayout>
</FrameLayout>



java.lang.StackOverflowError
at java.security.AccessController.doPrivileged(Native Method)
at javax.xml.parsers.SecuritySupport.getSystemProperty(SecuritySupport.java:62)
at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:229)
at javax.xml.parsers.DocumentBuilderFactory.newInstance(DocumentBuilderFactory.java:120)
at com.android.utils.XmlUtils.parseDocument(XmlUtils.java:432)
at com.android.utils.XmlUtils.parseDocumentSilently(XmlUtils.java:484)
at com.android.tools.idea.rendering.LayoutlibCallbackImpl.findCycles(LayoutlibCallbackImpl.java:397)
at com.android.tools.idea.rendering.LayoutlibCallbackImpl.getParser(LayoutlibCallbackImpl.java:315)
at com.android.tools.idea.rendering.LayoutlibCallbackImpl.getParser(LayoutlibCallbackImpl.java:306)
at android.content.res.BridgeResources.getLayout(BridgeResources.java:396)
at android.view.LayoutInflater_Delegate.parseInclude(LayoutInflater_Delegate.java:135)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:879)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:831)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:811)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
at android.view.LayoutInflater_Delegate.parseInclude(LayoutInflater_Delegate.java:197)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:879)

2 个答案:

答案 0 :(得分:0)

部分神秘解决了。渲染问题是因为当我点击设计选项卡时,AS要求我选择要在片段中显示的布局,因此我选择了活动的布局。然后,AS添加了行&#39;工具:layout =&#34; @ layout / activity_garbage_locator&#34;&#39;到布局,我猜引起了一种循环引用。啊!

此外,添加新的API密钥后,映射不再适用于Debug或Release。我猜,失败的一致性是进步。我添加了一个包含Google地图的新活动,并按原样运行,也就是说,没有任何其他代码,也不会显示地图。我得到了同样的东西:一个灰白色的屏幕,左下角有Google徽标。正如我会得到一张地图,但没有地图。

在我的原始活动中,使用代码捕获掉落引脚的经度和纬度,地图实际上可以正常工作,因为当我点击屏幕时它会返回新的经度和纬度。它只是没有显示愚蠢的地图!

格雷格

答案 1 :(得分:0)

这是一个API问题,但我不确定发生了什么。在阅读了几个关于这个问题的不同帖子之后,我尝试了几个不同我认为解决这个问题的方法是对清单中的API密钥进行硬编码,正如一篇文章所建议的那样。

原始清单条目

   <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_key" />

更改为

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="AIz_MY_ACTUAL_KEY" />