2012-07-11 28 views
14

Estoy intentando crear una pequeña aplicación de muestra con ActionBarSherlock 4.1 utilizando Eclipse Indigo y ADT r20.

Creé un nuevo proyecto de Android con una actividad en blanco, copié actionbarsherlock.jar en libs y lo hice referencia en la ruta de compilación.

La aplicación genera con éxito, pero al iniciar ya sea en el emulador (usando 2.2) o el dispositivo (usando 4.0.4), se bloquea con el error:

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

no estoy utilizando Proguard.

He intentado limpiar el proyecto ActionBarSherlock, copiar el nuevo jar en las libs de mi proyecto de muestra y luego limpiar mi proyecto de muestra.

Mi MainActivity.java es bastante simple:

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; 
    } 
} 

El menú no tiene más que un solo elemento:

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

Y el AndroidManifest.xml también es casi tan Eclipse lo creó:

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

En este punto, realmente no tengo idea de lo que me puedo haber perdido.

Respuesta

22

Resolví este problema añadiendo ActionBarSherlock a mi proyecto de Eclipse de una manera diferente.

En lugar de copiar actionbarsherlock.jar en libs y agregarlo a la ruta de compilación, lo agregué como un proyecto al que se hace referencia en la sección de Android de las propiedades del proyecto.

La aplicación ahora se compila y se ejecuta correctamente tanto en el emulador como en el dispositivo.

enter image description here

+7

Esto se debe a que ActionBarSherlock solo se puede usar como proyecto de biblioteca. No se puede agregar como un archivo jar. – Intrications

13

Si se obtiene:

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

excepción, entonces se puede solucionar ese tema mediante la adición de Sherlock en su archivo de manifiesto.

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

Gracias, hombre, el punto. Estaba enfrentando este error. – Master

4

Hay un problema con el último ADT 21.1 que puede causar la aparición de este error, incluso si todo lo demás parece correcto. Puede solucionarlo degradando a ADT 21 y las herramientas r21. Aquí está un informe de error con algo más de detalle:

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

-1

hacer proyecto ActionBarSherlock Seguro \ carpeta Gen ha presentar R.java

0

Se ruega a nombre del paquete de su proyecto y la tercera parte nombre del paquete lib como el mismo .

p. Ej. si el nombre del paquete lib de terceros es com.actionbarsherlock y el nombre del paquete de su proyecto es com.yourproject es, por supuesto, obtendrá java.lang.NoClassDefFoundError: com.actionbarsherlock.R $ styleable error.

Para utilizar la tercera lib partido y no usar de referencia como respuesta de Michael Hampton, debe seguir los pasos:

  1. cambiar el nombre del nombre del paquete de com.actionbarsherlock a com.yourproject (supongo que el nombre del paquete de su proyecto es com.yourproject botón derecho del ratón Haga clic en su proyecto -.> Android Herramientas-> Cambiar nombre del paquete de aplicaciones)

  2. copia com.actionbarsherlock/bin/xxx.jar a com.yourproject/libs

  3. copia

    o fusionar el recurso de xxx.jar en res de la com.actionbarsherlock, como los valores, anim, estirables y etc.

he encontrado el mismo problema, y ​​utilizar el método anterior pensado por mí mismo con éxito. Si hay más problemas, por favor pregunte más. Espero que todos los chicos puedan resolver el mismo problema.

Cuestiones relacionadas