首页 > 解决方案 > 使用 Amazon Maps V2 API 获取 java.lang.NoSuchFieldError

问题描述

我在亚马逊开发者论坛上发布了这个,但我想我也会在这里尝试看看是否有人有任何想法。至少也许这个supported_abis问题可以解释一下?较新的地图 v2 API 是否不再包含此字段?地图调试和发布注册已使用我拥有的当前调试和发布密钥库完成。如 logcat 所示,地图 v2 正在加载(当然直到出现错误)。

compileSdkVersion 28
minSdkVersion 19
targetSdkVersion 28
multiDexEnabled true
buildToolsVersion '28.0.3'

我正在尝试将现有的 Android 应用程序迁移到 Fire OS,但无法加载地图 v2。

使用这个:

<fragment
   android:id="@+id/mission_map"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   class="com.amazon.geo.mapsv2.MapFragment" />
   setContentView(R.layout.mission_map_layout);

我继续在日志中收到此错误:

造成的:java.lang.NoSuchFieldError: android.os.Build.SUPPORTED_ABIS

E/AndroidRuntime(10981):在 com.amazon.geo.mapsv2.pvt.RemoteContextUtils.loadModule(RemoteContextUtils.java:152)

E/AndroidRuntime(10981):在 com.amazon.geo.mapsv2.util.AmazonMapsRuntimeUtil.loadEngineContext(AmazonMapsRuntimeUtil.java:215)

E/AndroidRuntime(10981):在 com.amazon.geo.mapsv2.util.AmazonMapsRuntimeUtil.access$100(AmazonMapsRuntimeUtil.java:50)

E/AndroidRuntime(10981):在 com.amazon.geo.mapsv2.util.AmazonMapsRuntimeUtil$DefaultEngineLoader.createInstance(AmazonMapsRuntimeUtil.java:613)

E/AndroidRuntime(10981):在 com.amazon.geo.mapsv2.util.AmazonMapsRuntimeUtil$DefaultEngineLoader.createInstance(AmazonMapsRuntimeUtil.java:608)

E/AndroidRuntime(10981):在 com.amazon.geo.mapsv2.pvt.LazyInitializer.get(LazyInitializer.java:41)

E/AndroidRuntime(10981):在 com.amazon.geo.mapsv2.util.AmazonMapsRuntimeUtil.getRemoteContext(AmazonMapsRuntimeUtil.java:325)

E/AndroidRuntime(10981):在 com.amazon.geo.mapsv2.MapsInitializer.initialize(MapsInitializer.java:54)

E/AndroidRuntime(10981):在 com.amazon.geo.mapsv2.MapFragment$InitializerTask.doInBackground(MapFragment.java:302)

E/AndroidRuntime(10981):在 com.amazon.geo.mapsv2.MapFragment$InitializerTask.doInBackground(MapFragment.java:299)

E/AndroidRuntime(10981):在 android.os.AsyncTask$2.call(AsyncTask.java:288)

我正在尝试在装有 Fire OS 4.5.5.3 的 Fire 平板电脑上运行它。这是否太旧而无法运行?该应用程序是使用最新的 Android SDK (28) 和 gradle 文件构建的,并且很难回滚到旧集。

其他活动和片段在整个应用程序中加载得很好,除了地图 v2。

我使用本地 Maven 存储库添加了它。

这是真实的:

return AmazonMapsRuntimeUtil.<em>isAmazonMapsRuntimeAvailable</em>(context) == com.amazon.geo.mapsv2.util.ConnectionResult.SUCCESS;

除了它是 CPU 规格之外,我没有找到太多关于它的内容supported_abis,至少它如何应用于 Amazon 地图。这款平板电脑是否太旧而无法加载?这就是我必须测试的全部内容。为什么它会加载其他活动而无法加载此亚马逊地图 v2 片段?不尝试加载位置服务或任何东西。该片段被包装在一个简单的相对布局中。

任何帮助将非常感激。

标签: androidmapsamazon

解决方案


SUPPORTED_ABIS字段是 Android Build类的一部分。它是在 API 21 中引入的。

您的问题是您的 Kindle 没有运行 API 21。适用于 Kindle Fire HDX 2013 的 Fire OS 的最新版本是4.5.5.3,它基于 API 19/KitKat

抱歉,但如果您想在 Fire OS 上进行测试,您需要获得至少运行 Fire OS 5 的 Kindle 设备,并且您的应用程序将无法在低于该版本的任何设备上运行。亚马逊有设置 Kindle 模拟器(有点)的说明,但它实际上只是带有普通 Android 的 Kindle 的硬件配置文件。不过,看看该应用程序将如何在 Fire OS 上运行就足够了。


推荐阅读