2013-07-25 9 views
26

Próbuję zaimplementować nową bibliotekę pomocy technicznej v7 ActionBar. Jednak nie mogę go uruchomić poprawnie.Błąd podczas implementacji paska akcji biblioteki pomocy technicznej

Oto wyjątek

07-25 09:30:01.704: E/AndroidRuntime(9175): FATAL EXCEPTION: main 
07-25 09:30:01.704: E/AndroidRuntime(9175): java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$styleable 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:98) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:58) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at com.cidaut.termoweb.MainActivity.onCreate(MainActivity.java:23) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.app.Activity.performCreate(Activity.java:5133) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.os.Looper.loop(Looper.java:137) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at java.lang.reflect.Method.invoke(Method.java:525) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
07-25 09:30:01.704: E/AndroidRuntime(9175):  at dalvik.system.NativeStart.main(Native Method) 

Problem dzieje się na wezwanie w onCreate()super.onCreate(bundle).

Oto cała moja theming związanych z XML:

styled.xml

<?xml version="1.0" encoding="utf-8"?> 

<resources> 
    <style name="Theme.Termoweb" parent="@style/Theme.AppCompat.Light.DarkActionBar"> 
     <item name="actionBarItemBackground">@drawable/selectable_background_termoweb</item> 
     <item name="popupMenuStyle">@style/PopupMenu.Termoweb</item> 
     <item name="dropDownListViewStyle">@style/DropDownListView.Termoweb</item> 
     <item name="actionBarTabStyle">@style/ActionBarTabStyle.Termoweb</item> 
     <item name="actionDropDownStyle">@style/DropDownNav.Termoweb</item> 
     <item name="actionBarStyle">@style/ActionBar.Solid.Termoweb</item> 
     <item name="actionModeBackground">@drawable/cab_background_top_termoweb</item> 
     <item name="actionModeSplitBackground">@drawable/cab_background_bottom_termoweb</item> 
     <item name="actionModeCloseButtonStyle">@style/ActionButton.CloseMode.Termoweb</item> 
     <!-- Light.DarkActionBar specific --> 
     <item name="actionBarWidgetTheme">@style/Theme.Termoweb.Widget</item> 
    </style> 



    <style name="ActionBar.Solid.Termoweb" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse"> 
     <item name="background">@drawable/ab_solid_termoweb</item> 
     <item name="backgroundStacked">@drawable/ab_stacked_solid_termoweb</item> 
     <item name="backgroundSplit">@drawable/ab_bottom_solid_termoweb</item> 
     <item name="progressBarStyle">@style/ProgressBar.Termoweb</item> 
    </style> 


    <style name="ActionBar.Transparent.Termoweb" parent="@style/Widget.AppCompat.ActionBar"> 
     <item name="background">@drawable/ab_transparent_termoweb</item> 
     <item name="progressBarStyle">@style/ProgressBar.Termoweb</item> 
    </style> 


    <style name="PopupMenu.Termoweb" parent="@style/Widget.AppCompat.ListView.Menu"> 
     <item name="popupBackground">@drawable/menu_dropdown_panel_termoweb</item> 
    </style> 


    <style name="DropDownListView.Termoweb" parent="@style/Widget.AppCompat.ListView.DropDown"> 
     <item name="listSelector">@drawable/selectable_background_termoweb</item> 
    </style> 


    <style name="ActionBarTabStyle.Termoweb" parent="@style/Widget.AppCompat.ActionBar.TabView"> 
     <item name="background">@drawable/tab_indicator_ab_termoweb</item> 
    </style> 


    <style name="DropDownNav.Termoweb" parent="@style/Widget.AppCompat.Spinner"> 
     <item name="background">@drawable/spinner_background_ab_termoweb</item> 
     <item name="popupBackground">@drawable/menu_dropdown_panel_termoweb</item> 
     <item name="dropDownSelector">@drawable/selectable_background_termoweb</item> 
    </style> 


    <style name="ProgressBar.Termoweb" parent="@style/Widget.AppCompat.ProgressBar.Horizontal"> 
     <item name="progressDrawable">@drawable/progress_horizontal_termoweb</item> 
    </style> 


    <style name="ActionButton.CloseMode.Termoweb" parent="@style/Widget.AppCompat.ActionButton.CloseMode"> 
     <item name="background">@drawable/btn_cab_done_termoweb</item> 
    </style> 


    <!-- this style is only referenced in a Light.DarkActionBar based theme --> 
    <style name="Theme.Termoweb.Widget" parent="@style/Theme.AppCompat"> 
     <item name="popupMenuStyle">@style/PopupMenu.Termoweb</item> 
     <item name="dropDownListViewStyle">@style/DropDownListView.Termoweb</item> 
    </style> 
</resources> 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.cidaut.termoweb" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.Termoweb" > 
     <activity 
      android:name="com.cidaut.termoweb.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Odpowiedz

53

Więc jak mam rozwiązać ten problem:

  1. Importuj obsługuje bibliotekę jako projekt z "sdk/extras/a ndroid/support/v7/appcompat ".
  2. Biblioteka referencyjna w projekcie (dla Eclipse, "Właściwości - Android - Dodaj").
  3. Projekty budowlane (dla Eclipse, "Projekty - Build All"). Upewnij się, że masz "android.support.v7.appcompat" w głównym folderze gen projektu.
  4. Jeśli to nie zadziałało - oczyść i odbuduj projekt.
+4

Byłem tam, zrobiłem to. To nie zadziała. – razielsarafan

+3

Czy jesteś całkowicie pewien, że masz "android.support.v7.appcompat.R.java" w swoim folderze gen? Bez niego to nie zadziała – BoredT

+1

Jestem całkowicie i absolutnie pewny, że mam R.java w folderze genów v7. – razielsarafan

1

Myślę, że powinieneś zmienić swoją wersję docelową na 18 w manifeście.

android:targetSdkVersion="18" 
+0

Już to zrobiłeś. Brak szczęścia. – razielsarafan

4

Oprócz odpowiedzi BoredT za Dodałem tę linię do Res/wartości/styles.xml

<style name="AppTheme" parent="@style/Theme.AppCompat.Light"> 
14

Zrobiłem następujące pracował dla mnie.

  • Usuń słoik z folderu libs.
  • Zaimportuj sdk \ extras \ android \ support \ v7 \ appcompat \ project do swojego obszaru roboczego zaćmienia.
  • Upewnij się, że Android-support-v4.jar jest taki sam w twoim projekcie.
  • Dodaj appcompat jako bibliotekę do swojego projektu.

upewnić się, że w yout manifest.xml swoją działalność ma prawidłową Theme

<activity 
     android:name="***.*****.******" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.AppCompat.Light" 
     > 

Powodzenia;)

+4

+1 za to, że działanie musi używać kompozycji "Theme.AppCompat" lub motywu podrzędnego "Theme.AppCompat" –

1

ten sposób rozwiązać problem: odbudować Adroid-support-v7 -appcompat projektu biblioteki w twoim obszarze roboczym zaćmienia. Następnie ponownie zbuduj swój własny projekt.

1

Jak importować projekt jako bibliotekę w Androidzie?Śledź blog porady jako odniesienie: http://showlabor.blogspot.com.br/2013/05/actionbarsherlock-in-android-studio-01.html

Kolejne pytanie, również pomogło: Error implementing Support Library Action Bar

Poniższy rysunek przedstawia strukturę importowanego projektu. To jest kopiowane do katalogu głównego mojego projektu i umieszczane w katalogu "biblioteki": https://dl.dropboxusercontent.com/u/67269258/Tuto/tree.PNG

Oprócz montażu powyższej struktury. W '' settings.glade musiałem dodać nowy projekt:

include ':FreeMusic', ':libraries:ActionBarCompat:appcompat' 

Wewnątrz projektu biblioteki, dodaje plik 'build.gradle' Znajduje się w: Biblioteki/ActionBarCompat/AppCompat

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.5.+' 
    } 
} 

apply plugin: 'android-library' 

dependencies { 
    compile files(
     'libs/android-support-v4.jar', 
     'libs/android-support-v7-appcompat.jar' 
    ) 
} 
android { 
    compileSdkVersion 18 
    buildToolsVersion "18.0.1" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 16 
    } 
    sourceSets { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 
      resources.srcDirs = ['src'] 
      aidl.srcDirs = ['src'] 
      renderscript.srcDirs = ['src'] 
      res.srcDirs = ['res'] 
      assets.srcDirs = ['assets'] 
     } 

     instrumentTest.setRoot('tests') 
    } 
} 

W 'build.gradle' (projekt wewnętrzny) mojego projektu.

dependencies { 
compile project(':libraries:ActionBarCompat:appcompat') 
} 

w Android manifeście dodaje niezbędną motyw:

<activity 
android:theme="@style/Theme.AppCompat" 
android:name="es.hol.soundmedia.MainActivity" 

Po całej tej pracy. Być może łatwiejsze do skonfigurowania, ale dla mnie konto działa. Niestety nie mogę pokazać wyniku, ponieważ jestem zablokowany, ale mam nadzieję, że instrukcje będą pomocne.

1

Dla tych, którzy nie lubią konieczności ręcznego wysiłku od użytkownika w Eclipse w tym celu kompilacji od kasie, magiczna zmiana sprawia, że ​​Eclipse jest dodanie linii do project.properties jak:

android.library.reference.1=../android-support-v7-appcompat 

To wystarczy, aby zbudować swoją aplikację z mrowiska. Możesz to zrobić w samym źródle lub za pośrednictwem interfejsu użytkownika Eclipse - w dowolny sposób możesz go sprawdzić w systemie kontroli wersji i pomyślnie zbudować go ze świeżego kasy źródła, bez konieczności ręcznego wykonywania czynności.

Ale można zamiast tego uczynić ścieżkę podkatalogiem własnego projektu, jeśli lepiej pasuje, np.

android.library.reference.1=android-support-v7-appcompat 

... i ...

cp -r $SDK/extras/android/support/v7/appcompat android-support-v7-appcompat 

Zauważ, że Eclipse będzie nadal wykazują różne ostrzeżenia, aż do sub-katalog jest również dodanej [ręcznie!] Do Eclipse jako projekt roboczy. Ale kompilacja mrówki zostanie pomyślnie zbudowana bez użycia Eclipse.

2

Wykonaj kroki od Dodawanie bibliotek zasobów -> Eclipse http://developer.android.com/tools/support-library/setup.html:

  1. śledzić wszystkie czynności (wykorzystanie projektu kopia w obszarze roboczym)
  2. dodać android.library.reference.1=../android-support-v7-appcompat do project.properties
  3. korzystanie android:theme="@style/Theme.AppCompat" użyłem w znaczniku aplikacji można zastosować do poszczególnych działań, a także

Przebuduj wszystko!

+0

Rozwiązało to mój problem. Dodanie linii do pliku project.properties umożliwiło Eclipse wygenerowanie R.java. – Leon

0

Sprawdź R.java dla appcompat v7 jar jest obecny w wygenerowanych folderach aplikacji