ActionBarSherlock: java.lang.NoClassDefFoundError: com.actionbarsherlock.R$styleable ActionBarSherlock:java.lang.NoClassDefFoundError:com.actionbarsherlock.R$styleable

14

我试图使用Eclipse Indigo和ADT r20构建一个使用ActionBarSherlock 4.1的小示例应用程序。

我创建了一个新的Android项目并添加了空白活动,将actionbarsherlock.jar复制到libs文件夹中并在构建路径中引用它。

应用程序成功构建,但在模拟器(使用2.2)或设备(使用4.0.4)上启动时,会崩溃并显示错误:

java.lang.NoClassDefFoundError: com.actionbarsherlock.R$styleable
        at com.actionbarsherlock.view.MenuInflater$MenuState.readItem(MenuInflater.java:328)
        ...

我没有使用Proguard。

我尝试了清除ActionBarSherlock项目,将新的jar文件复制到我的示例项目的libs文件夹中,然后再清理我的示例项目。

我的MainActivity.java很简单:

package com.example.lrn;

import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import android.os.Bundle;

public class MainActivity extends SherlockActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
菜单只有一个选项:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_settings"
        android:title="@string/menu_settings"
        android:orderInCategory="100"
        android:showAsAction="ifRoom" />
</menu>

而且AndroidManifest.xml也几乎就是Eclipse创建的:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.lrn"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

目前为止,我真的不知道我可能错过了什么。

5个回答

22

我通过另一种方式将 ActionBarSherlock 添加到我的 Eclipse 项目中来解决了这个问题。

我没有将 actionbarsherlock.jar 复制到 libs 目录并添加到构建路径中,而是在项目属性的 Android 部分中将其作为引用项目添加。

现在该应用程序可以在模拟器和设备上正确地构建和运行。

显示图片描述


7
这是因为ActionBarSherlock只能作为库项目使用,不能作为jar文件添加。 - Intrications

13

如果你遇到以下问题:

 ActionBarSherlock: java.lang.NoClassDefFoundError:
         com.actionbarsherlock.R$styleable 

如果发生异常,您可以通过在清单文件中添加Sherlock主题来解决该问题。

android:theme="@style/Theme.Sherlock.Light.DarkActionBar"

4

0
请将您的项目包名称和第三方库包名称设置为相同。
例如,如果第三方库包名称为com.actionbarsherlock,而您的项目包名称为com.yourproject,则当然会出现java.lang.NoClassDefFoundError:com.actionbarsherlock.R $ styleable错误。
要使用第三方库并且不使用像Michael Hampton答案中的引用一样, 您应该按照以下步骤进行:
1.将com.actionbarsherlock的包名称重命名为com.yourproject(我假设 您的项目包名称为com.yourproject。 单击鼠标右键以选择您的项目-> Android工具-> 重命名应用程序包)
2.将com.actionbarsherlock / bin / xxx.jar复制到com.yourproject / libs
3.复制或合并来自xxx.jar的资源,例如com.actionbarsherlock的res中的值,anim,drawable等。
我遇到了同样的问题,并成功地使用了上述方法。 如果有更多问题,请提出。 我希望所有人都能解决同样的问题。

-1
请确保ActionBarSherlock项目的\gen文件夹中有R.java文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接