android - 针对 Android Pie 的 Xamarin Google Maps 应用程序坏了?
问题描述
为了尝试解决我正在尝试使用谷歌地图创建一个针对 Android Pie 的应用程序的问题,我决定启动一个非常小的项目来定位和隔离我可能遇到的问题,这就是我有...
- 创建一个针对 Android Pie 的新 Android 项目,将支持设计库 (Xamarin.Android.Support.Design) 更新为 28.0.0.1,因为默认情况下模板似乎将目标设置为 8.1。然后我添加了 nuget 包“Xamarin.GooglePlayServices.Maps”。这产生了一个关于依赖项未更新的警告(Xamarin.Android.Support.Media.Compat)并且仍然在 26.0.2。所以我在 28.0.0.1 手动更新它。
- 创建一个名为 activity_main 的非常简单的布局
活动主
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment"
android:layout_marginTop="24dp" />
</LinearLayout>
这只是一个包含单个谷歌地图片段的线性布局
- 创建活动类(MainActivity.cs)
MainActivity.cs
namespace SimpleMapTest
{
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
}
}
}
仅设置布局文件中定义的内容视图
- 在清单中为我的 Google Maps API 密钥添加所需的行
显现
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="SimpleMapTest.SimpleMapTest">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MyKeyValue]" />
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
</application>
</manifest>
- 编译应用程序。该应用程序部署正常,已启动,但是当即将显示地图时,出现此错误。
- 然后,一行不改,直接进入项目属性界面,改为针对Android Oreo(8.1)编译
- 编译东西,部署并运行应用程序,应用程序成功运行
- 回到项目属性,将目标改回 Android Pie (9.0) 并重新编译和部署。应用程序编译、部署并开始运行,但这次我在运行时遇到的异常是这个:
- 在线搜索,发现我可能需要通过在清单中添加以下行来解决此错误
显现
<uses-library android:name="org.apache.http.legacy" android:required="false" />
我想这应该是关于 Android 9 改变了它处理 HTTP 请求的方式
- 我已经在清单中添加了该行,重新编译,部署并在运行时返回了我第一次遇到的相同异常,涉及超时
- 如果我检查输出,并在超时后得到这个异常详细信息
输出
02-10 10:50:48.352 W/t.SimpleMapTes(28585): Unsupported class loader
02-10 10:50:48.358 W/t.SimpleMapTes(28585): Skipping duplicate class check due to unsupported classloader
02-10 10:50:49.082 E/AndroidRuntime(28585): FATAL EXCEPTION: Thread-6
02-10 10:50:49.082 E/AndroidRuntime(28585): Process: SimpleMapTest.SimpleMapTest, PID: 28585
02-10 10:50:49.082 E/AndroidRuntime(28585): java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion;
这似乎表明第 9 步中详述的解决方法不再可行,这与本文相符(第一反应):
所以有点回到第一广场!
那么,构建一个在片段中使用谷歌地图的面向 Android Pie 的应用程序应该是正确的方法吗?我在这里迷路了!任何人都可以分享一个可能对所有人有用的解释?
我知道我添加到清单中的行现在是强制性的,但仍然出现超时超出异常。看来google play服务的nuget包已经过期了……是这样的吗?
解决方案
推荐阅读
- html - background-image 属性未在 css 中显示图像
- c# - Visual Studio 2019 C# 桌面应用程序 .net 核心在工具箱中缺少控件
- ssl - 有没有办法在 HAProxy 中使用转发代理作为后端(包括身份验证)?
- c++ - std::fabs(a * b) 和 std::fabs(a) * std::fabs(b) 之间的区别
- ruby-on-rails - Rails 救援不活动或无法访问
- php - php - 如何在 4 个月内每天增加用户的已知收入
- javascript - 如何通过AngularJS更改特定路径ID的填充颜色SVG对象
- sql - 按月求和和计数,显示当月的最后一天
- javascript - 自定义 Shopify 按钮嵌入其他网站
- sql - 如何明智地将列增加一组