ActionBarSherlock +地图+装载机= java.lang.NoClassDefFou

2019-06-23 10:48发布

编辑:对于一个详细讲述到,检查出我的答案 。

我现在用它挣扎了两天,希望有人可以提供帮助。

我试图用MapView。使用最新的ActionBarSherlock(4.0)。 我知道它是与碎片问题的,但我并不需要他们在本次活动。 但我需要装载机和它的出现,是用装载机我必须得延长FragmentActivity。 没问题,我认为,我们有Android的支持-V4-的GoogleMaps皮特·道尔。 由于许多建议SO线程和谷歌I组建立与Android的支持-V4-JAR Google地图(Android的支持-V13-R7-googlemaps.jar实际上),而不是Android的支持,v4.jar的ABS。 然后,我用它作为我的项目库。

现在,我想有我这样的活动方式:

public class BananoutMapActivity extends SherlockFragmentActivity implements LoaderCallbacks<ArrayList<EventItem>>{

问题:

它编译,但引发运行时错误: E/AndroidRuntime(29159): java.lang.NoClassDefFoundError: ndl.klimczak.bananout.BananoutMapActivity

事情我已经三重检查:

  • 既ActionBarSherlock库项目,我的项目是针对谷歌的API 4.0.3
  • <uses-library android:name="com.google.android.maps" />和我有它在该应用程序标记。
  • 我也有同样的在我的项目的构建路径Android的支持-V13-R7-googlemaps.jar
  • 我有.BananoutMapActivity在我的清单中声明

有趣的是:

  • 当我在一个ICS模拟器它的工作原理运行(在2 *仿真器出现错误和我的2.3.7设备),在Honeycomb它会工作太可能,它是用我猜ACL的问题

  • 当我删除implements LoaderCallbacks<ArrayList<EventItem>>一部分它也能工作,但这种方式我不能用LoaderManager

为什么地球上的NoClassDefFoundError的错误,以及如何得到我的MapCapableSherlockEnabledFragmentActivity工作的装载机?

Answer 1:

您需要使用的装载机从支持库,而不是从平台的人。 因为这些是仅适用于Android 3.0+和你已经包括他们在您的类定义的事实将导致预加载器3.0拒绝你的类顾左右而言他。 切换您的进口支持库变量应该是所有需要为该。

如果你看一下在logcat的例外上面,你应该看到一个或多个VerifyErrors将勾勒出具体是什么,它争起来了。

您也可以只使用android-support-v13上Android 3.2的图书馆和向上(因此v13在其名称)。



Answer 2:

弃用 :我想这个问题消失与谷歌地图API的Android V2 。 如果你决定使用过时的V1,该解决方案如下。


于是杰克回答确切的问题,但我认为这将是有益的人有或多或少的细节 - 如何。 因此,如何使地图ActionBarSherlock工作?

我假设你有ActionBarSherlock设置和工作作为一个库项目,你可以找到很多的教程就如何做到这一点。

如果你只是想使用ActionBarSherlock MapActivity - 这很容易:

  1. 下载杰克的MapsPlugin https://github.com/JakeWharton/ActionBarSherlock-Plugin-Maps ,
  2. 把它放在你的应用程序的libs文件夹,它包括在构建路径。

如果您想使用的MapView与蜂窝功能,如碎片或装载机:

  1. 下载皮特·道尔的Android支持包与谷歌地图: https://github.com/petedoyle/android-support-v4-googlemaps ,
  2. 做一个罐子(如果你下载预编译罐子,它只是一个重命名zip包罐子的事情,如果你不知道)。 你可以得到的V13版本,它包含V4,
  3. 请在工作区ActionBarSherlock库的副本(命名为ActionBarSherlockMaps或像这样),就不要与原来的一个烂摊子,你可能以后什么使用它,
  4. 记住要建立既ActionBarSherlockMaps和对最新谷歌的API项目。 如果您使用标准Android 4.0.3无谷歌的API,它不会工作
  5. 把罐子(如Android的支持-V13-R7-googlemaps.jar)在新ActionBarSherlockMaps的libs文件夹,从构建路径排除Android的支持,v4.jar和包括Android的支持-V13-R7-谷歌地图。罐
  6. 随着版本7,你必须在这个步骤中SherlockFragmentActivity编译错误。 查找protected void supportInvalidateOptionsMenu()并改变其知名度, public (无需在ABS的新版本中这一步)
  7. 把同样的罐子在您的项目的libs文件夹,排除从构建路径Android的支持,v4.jar和包括Android的支持-V13-R7-googlemaps.jar
  8. 确保将<uses-library android:name="com.google.android.maps" />在您的清单文件的应用程序标记
  9. 确保你使用正确的进口的片段,装载机和东西! 您应该使用如import android.support.v4.app.LoaderManager; 的insted的import android.app.LoaderManager;
  10. 享受ActionBarSherlock +谷歌地图+碎片+装载机

这是现在最好的解决方法,直到谷歌地图把在兼容性库。 我希望他们会做4 *设备数量超过2之前。* ...



文章来源: ActionBarSherlock + Maps + Loaders = java.lang.NoClassDefFoundError