我在实例化android.support.v7.app.MediaRouteButton对象时遇到了未处理的异常。我明白了:
NoClassDefFoundError: android.support.v7.mediarouter.R$attr
这堂课在哪里?或者,如果它是自动生成的,我该如何让它自动生成?
我正在关注Chromecast的Android应用开发教程:https://developers.google.com/cast/cast_2nd-screen_app_tutorial
我正在使用ADT捆绑的eclipse开发,在ubuntu 13.04上。
我将以下jar文件导入到工作区中的libs目录中,并通过“Java Build Path”面板中“Add Jars ...”按钮将它们包含在我的Java Build Path中。我项目的属性:
我有一个活动(由Eclipse创建的默认“hello world”),并且没有修改布局。我需要添加以导致错误(下面粘贴)显示的唯一代码是:
import android.support.v7.app.MediaRouteButton;
...
MediaRouteButton mrb = new MediaRouteButton(this.getApplicationContext());
当我构建并运行应用程序时,我在LogCat中看到下面粘贴的错误消息(如果有人认为它相关,我可以发布更多信息)。我注意到的关键事情是我似乎缺少android.support.v7.mediarouter.R $ attr(NoClassDefFoundError),并且它是从android.support.v7.app.MediaRouteButton的构造函数调用的
08-12 00:36:02.837: E/AndroidRuntime(29600): java.lang.NoClassDefFoundError: android.support.v7.mediarouter.R$attr
08-12 00:36:02.837: E/AndroidRuntime(29600): at android.support.v7.app.MediaRouteButton.<init>(MediaRouteButton.java:117)
08-12 00:36:02.837: E/AndroidRuntime(29600): at android.support.v7.app.MediaRouteButton.<init>(MediaRouteButton.java:113)
08-12 00:36:02.837: E/AndroidRuntime(29600): at com.jeffbmartinez.helicast.MainActivity.onCreate(MainActivity.java:31)
...
它正在运行MediaRouteButton的构造函数这一事实让我相信正确找到了jar文件所以我认为我没有错误配置与依赖项(jar文件)相关的eclipse。但是,我的理解是这些'R'文件是自动生成的。如果这是正确的,我的android.support.v7.mediarouter.R文件在哪里?我没有在gen目录中看到它,其中放置了com.jeffbmartinez.helicast.R文件。
此外,我发现MediaRouteButton引用了一个我在上面列出的5个jar依赖项中找不到的包名称。 android-support-v7-mediarouter.jar仅包含 android.support.v7.app。* 和 android.support.v7.media。* 。
除了我的错误日志之外,我唯一找到 android.support.v7.mediarouter 引用的地方是https://developer.android.com/reference/android/support/v7/mediarouter/package-summary.html,但那里的信息很少。
我错过了依赖吗?如果是这样,我在哪里获得它或如何生成它?
谢谢!
答案 0 :(得分:9)
你不能只包括罐子。您需要将android.support.v7.mediarouter
项目添加为Android库依赖项。这样,项目中的资源就会合并到你自己的资源中。
在mediarouter
文件夹中运行android update lib-project -p .
,然后您可以将其添加为依赖项。
答案 1 :(得分:1)
为了避免任何XML编译错误,只需配置构建路径以解析为ANDROID API 17(例如项目&gt;属性&gt; Eclipse中的Android)