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

Я пытаюсь создать крошечное примерное приложение с помощью ActionBarSherlock 4.1 с использованием Eclipse Indigo и ADT r20.

Я создал новый проект 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, скопировав новую банку в свои образцы проектов libs, а затем очистив свой образец проекта.

My 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>

В этот момент я действительно не знаю, что я, возможно, пропустил.

Ответ 1

Я сам решил эту проблему, добавив ActionBarSherlock в проект Eclipse по-другому.

Вместо копирования actionbarsherlock.jar в libs и добавления его в путь сборки я добавил его в качестве ссылочного проекта в разделе Android свойств проекта.

Теперь приложение работает правильно и работает как на эмуляторе, так и на устройстве.

enter image description here

Ответ 2

Если вы получаете:

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

то вы можете исправить это, добавив тему Шерлока в файл манифеста.

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

Ответ 3

Проблема с последним ADT 21.1, которая может вызвать эту ошибку, даже если все остальное кажется правильным. Вы можете исправить это, понизив до ADT 21 и инструменты r21. Вот отчет об ошибке с более подробной информацией:

https://code.google.com/p/android/issues/detail?id=42686

Ответ 4

Пожалуйста, сообщите название своего пакета проекта и имя пакета сторонней библиотеки lib.

например. если имя пакета третьей стороны - com.actionbarsherlock и название вашего проекта - com.yourproject это, конечно, вы получите java.lang.NoClassDefFoundError: ошибка com.actionbarsherlock.R $.

Чтобы использовать стороннюю библиотеку и не использовать ссылку, как ответ Майкла Хэмптона, вы должны выполнить следующие шаги:

  • переименуйте имя пакета com.actionbarsherlock в com.yourproject(я предполагаю что имя пакета вашего проекта - com.yourproject. Нажмите правую кнопку мыши в своем проекте → Инструменты Android- > Переименовать пакет приложений)

  • скопировать com.actionbarsherlock/bin/xxx.jar в com.yourproject/libs

  • копировать или объединять ресурс из xxx.jar в res. com.actionbarsherlock, например, значения, анимацию, drawable и т.д.

Я столкнулся с той же проблемой и успешно использовал метод, описанный выше. Если есть больше проблем, пожалуйста, спросите больше. Я надеюсь, что все ребята могут решить ту же проблему.

Ответ 5

убедитесь, что в папке Project\gen ActionBarSherlock есть файл R.java