2012-07-11 5 views
14

Ich versuche eine kleine Beispielanwendung mit ActionBarSherlock 4.1 mit Eclipse Indigo und ADT r20 zu bauen.

Ich erstellte ein neues Android-Projekt mit einer leeren Aktivität, kopierte actionbarsherlock.jar zu libs und referenzierte es im Build-Pfad.

Die App bauen erfolgreich, aber entweder auf dem Emulator beim Start (mit 2.2) oder dem Gerät (mit 4.0.4), stürzt mit dem Fehler:

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

ich nicht proguard bin mit.

Ich habe versucht, das ActionBarSherlock-Projekt zu bereinigen, das neue Jar in die Libs meines Beispielprojekts zu kopieren und dann mein Beispielprojekt zu bereinigen.

Mein MainActivity.java ist ganz einfach:

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

Das Menü hat nur einen einzigen Punkt:

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

Und die AndroidManifest.xml ist auch nur etwa Eclipse es erstellt:

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

An diesem Punkt habe ich wirklich keine Ahnung, was ich verpasst haben könnte.

Antwort

22

Ich habe dieses Problem selbst gelöst, indem ich ActionBarSherlock auf andere Weise zu meinem Eclipse-Projekt hinzugefügt habe.

Anstatt actionbarsherlock.jar in libs zu kopieren und es dem Buildpfad hinzuzufügen, habe ich es als ein referenziertes Projekt im Abschnitt Android der Projekteigenschaften hinzugefügt.

Die App wird jetzt auf dem Emulator und dem Gerät ordnungsgemäß erstellt und ausgeführt.

enter image description here

+7

Das liegt daran, dass ActionBarSherlock nur als Bibliotheksprojekt verwendet werden kann. Es kann nicht als JAR-Datei hinzugefügt werden. – Intrications

13

Wenn Sie erhalten:

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

Ausnahme, dann können Sie beheben, die durch Sherlock Thema in Ihrer Manifest-Datei hinzufügen.

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

Danke Mann, du bist der Punkt. Ich war mit diesem Fehler konfrontiert. – Master

4

Es gibt ein Problem mit dem neuesten ADT 21.1, das dazu führen kann, dass dieser Fehler auftaucht, selbst wenn alles andere korrekt erscheint. Sie können es beheben, indem Sie auf ADT 21 und die Tools r21 herunterstufen. Hier ist ein Bug-Report mit etwas mehr Detail:

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

-1

sicher ActionBarSherlock Projekt machen \ gen Ordner R.java

0

Bitte Ihr Projekt Name des Pakets lassen Datei hat und die 3rd-Party-lib Paketnamen als die gleiche .

z.B. Wenn der Name des 3rd Party lib Pakets com.actionbarsherlock lautet und der Paketname Ihres Projekts com.yourproject lautet, erhalten Sie natürlich java.lang.NoClassDefFoundError: com.actionbarsherlock.R $ styleable error.

Um die 3rd-Party-lib zu verwenden und nicht die Referenz wie Michael Hampton Antwort verwenden, Sie die Schritte sollten:

  1. benennen Sie die Paketnamen von com.actionbarsherlock zu com.yourproject (Ich gehe davon aus, dass der Paketname Ihres Projekts ist com.yourproject rechten Maustaste auf Ihr Projekt klicken. -> Android Tools-> Umbenennen Anwendungspaket)

  2. Kopie com.actionbarsherlock/bin/XXX.jar com.yourproject/libs

  3. Kopie oder die Ressource aus XXX.jar in der res, wie Werte der com.actionbarsherlock fusionieren, Anim, ziehbar und etc.

I das gleiche Problem aufgetreten ist, und verwenden, um die oben beschriebene Methode dachte ich selbst erfolgreich. Wenn es mehr Probleme gibt, bitte mehr fragen. Ich hoffe, dass alle das gleiche Problem lösen können.