Perché Eclipse aggiunge automaticamente il supporto della libreria appcompat v7 ogni volta che creo un nuovo progetto?


217

Perché Eclipse si aggiunge automaticamente appcompat v7 supporto libreria ogni volta che creo un nuovo progetto?

Sto creando un semplice progetto di cui MainActivity dovrebbe estendersi Activity, ma non lo è. Eclipse aggiunge automaticamente il supporto della barra delle azioni.

Come faccio a creare un progetto semplice senza la appcompatlibreria? Cordiali saluti, ho scaricato l'ultima versione di ADT con tutto aggiornato di recente. Sto usando Windows 7 x64.

Inserisci qui la descrizione dell'immagine

Risposte:


105

Come indicato nella Panoramica della libreria di supporto di Android , si considera buona norma includere la libreria di supporto per impostazione predefinita a causa della grande diversità dei dispositivi e della frammentazione esistente tra le diverse versioni di Android (e quindi delle API fornite).

Questo è il motivo per cui gli strumenti dei modelli di codice Android inclusi in Eclipse Android Development Tools (ADT)li integrano per impostazione predefinita.

Ho notato che hai come target API 15l'esempio, ma l'SDK minimo richiesto per il tuo pacchetto è API 10, per il quale le librerie di compatibilità possono fornire un'enorme quantità di API compatibili con le versioni precedenti. Un esempio potrebbe essere la possibilità di utilizzare la funzione visualizzata Fragment APIsu API 11 (Android 3.0 Honeycomb) su un dispositivo che esegue una versione precedente di questo sistema.

Si noti inoltre che è possibile disattivare l'inclusione automatica della Libreria di supporto per impostazione predefinita.


54
Bene questo è BS. Ho usato eclipse a livello di API 10 negli ultimi 2 mesi e non ha mai importato la libreria di compatibilità o un layout di frammenti fino a quando non è uscito questo pazzo kitkat api. Sembra a questo punto che il modo più semplice per smettere di apparire sia quello di non creare un'attività automaticamente. Quindi dovrai deselezionare "Crea attività" e crearne uno tuo quando il progetto è stato creato.
user3223214

2
Sì, questo è il punto, la libreria sarà sempre inclusa a causa dei motivi di cui sopra.
Halim Qarroum,

1
Bene, la libreria di supporto fornisce retrocompatibilità per numerosi componenti di Android SDK. Non solo per ActionBar. Puoi trovare un sacco di API supportate nell'ultima versione della libreria di supporto. Potresti dare un'occhiata a developer.android.com/tools/support-library/index.html per ulteriori dettagli.
Halim Qarroum,

1
È meglio evitare l'app_compat?
Neolardo Va Dinci,

2
Accidenti google !!! esci da patch e patch e patch, tutto questo gruppo di supporto Gli errori e le versioni della libreria ci stanno facendo impazzire.
Josh,

59

Crea un nuovo Android Application Projecte deseleziona Create activity nel passaggio due (Configura progetto).


Grazie Ma la menucartella non è stata creata nel mio progetto.
Steve

1
L'eliminazione del progetto appcompat_v7 dal mio spazio di lavoro e la creazione di un nuovo progetto Android deselezionando l'opzione "Crea attività" mi ha aiutato. Le cose specificate in altre risposte non hanno funzionato per me. Grazie.
Srinivasan N,

22

Perché my eclipse aggiunge automaticamente il supporto per la libreria v7 di appcompat ogni volta che creo un nuovo progetto

Poiché l'SDK di destinazione è impostato su 15, in cui la barra delle azioni è attivata per impostazione predefinita e l'SDK minimo supportato è impostato su 10. La barra delle azioni viene visualizzata in 11, quindi è necessaria una libreria di supporto, Eclipse la aggiunge per te. Riferimento.

È possibile configurare le librerie di progetto nel percorso di creazione delle proprietà del progetto.


12
Se configuro il minimo sdk come 12 o 13 ottengo ancora lo stesso comportamento da eclissi ...
mikey

18

Eclipse ha creato automaticamente l'appcompat_v7. A causa del lancio di Kitkat Api si aggiunge automaticamente appcompat_v7e fragment_main.xml.

I modi migliori per risolverli:

  1. In primo luogo nel progetto, qui Right click->properties->Androidpuoi vedere il red marked appcompatposto in Reference. Fare clic su di esso e rimuoverlo, quindi selezionare il nome target corretto Project Build Target.

  2. Elimina fragment_main.xml e il file Appcompat creato in Eclipse .

  3. Modifica e modifica activity_main.xml in questo modo:

    <?xml version="1.0" encoding="utf-8"?>
    
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    
    </RelativeLayout>
  4. In res / valori / styles.xml:

    <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
    
        </style>
    
        <!-- Application theme. -->
        <style name="AppTheme" parent="AppBaseTheme">
    
        </style>
    
    </resources>
  5. In res / valori-v11 / styles.xml devi cambiare in questo modo:

    <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
        </style>
    
    </resources>
  6. In res / valori-v14 / styles.xml devi cambiare in questo modo:

      <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
        </style>
    
        <style name="AppTheme" parent="AppBaseTheme">
        </style>
    
    </resources>
  7. Cambia il tuo menu / main.xml come questi:

    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <item
            android:id="@+id/action_settings"
            android:orderInCategory="100"
            android:showAsAction="never"
            android:title="@string/action_settings"/>
    
    </menu>
  8. Finalmente cambia il tuo MainActivity.java come questi:

    import android.app.Activity;
    import android.os.Bundle;
    
    
    public class MainActivity extends Activity {
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    }
    
    }

LikeWise devi farlo per creare un nuovo progetto


2
Che cosa stanno pensando? Eclipse non dovrebbe avere una soluzione con un clic per questo?
Pacerier,

1
@Pacerier: Sì. Utilizzando appcompat_v7.
David Liu,

8

È incluso perché la tua versione minima dell'SDK è impostata su 10. È ActionBarstata introdotta in API 11. Eclipse la aggiunge automaticamente in modo che l'app possa apparire più coerente in tutto lo spettro di tutte le versioni di Android che stai supportando.


4

Se non hai come target le versioni 2.x puoi impostare la tua versione minima sdk di 4.x e quindi creare il progetto. Appcompat V7 lib non verrà creato.


4

Sono nuovo con Android e il progetto appcompat_v7 sempre creato quando creo un nuovo progetto di applicazione Android mi mette a disagio.

Questa è solo una passeggiata. Scegli Proprietà progetto -> Android, quindi nella casella Libreria basta rimuovere appcompat_v7_x e aggiungere appcompat_v7. Ora puoi eliminare appcompat_v7_x.

Deseleziona Crea attività nella procedura guidata per la creazione del progetto non funziona, poiché quando si crea l'attività tramite la procedura guidata viene visualizzata nuovamente appcompat_v7_x . La mia versione di ADT è v22.6.2-1085508 .
Mi dispiace se il mio inglese è pessimo.


1
Scopri qui sono presenti molte risposte. Questa sezione è per la risposta. Hai inserito una domanda nella sezione delle risposte.
Talha Q,

1
Voglio solo mostrare un modo per rimuovere appcompat_v7_x e non penso che questa sia una domanda. Se ho fatto un errore, ti prego di perdonarmi perché sono nuovo con StackOverflow.
Lê Quang Duy,

3

Scusami con il mio inglese, quando crei un nuovo progetto Android, dovresti scegliere api di alto livello, ad esempio: da api 17 a api 21, non avrà appcompat e molto facile condividere il progetto. Se l'hai fatto con un'API inferiore, devi solo modificare in Android Manifest per avere un'API superiore :), dopodiché puoi eliminare Appcompat V7.


2

Secondo http://developer.android.com/guide/topics/ui/actionbar.html

Le API di ActionBar sono state aggiunte per la prima volta in Android 3.0 (livello API 11) ma sono anche disponibili nella libreria di supporto per la compatibilità con Android 2.1 (livello API 7) e versioni successive.

In breve, quel progetto generato automaticamente che stai vedendo modularizza il processo di aggiunta di ActionBar alle API 7-10.

Esempio di ActionBar su Froyo

Vedi http://hmkcode.com/add-actionbar-to-android-2-3-x/ per una spiegazione semplificata e tutorial sull'argomento.


0

Ho notato la creazione della libreria 'appcompat' durante la creazione di un nuovo progetto Android con la versione ADT 22.6.2, anche quando minSDK era impostato su 11 e targetSDK era impostato 19

Ciò stava accadendo perché, nel nuovo modello di progetto, Android utilizza alcuni attributi che provengono dalla libreria di supporto. Ad esempio, se un nuovo progetto è stato creato con la barra delle azioni, nel menu main.xml è possibile trovare quello app:showAsAction="never"che proviene dalla libreria di supporto.

  • Se l'app è indirizzata alla versione Android 11 e successive, è possibile modificare questo attributo android:showAsActionin main.xml del menu
  • Anche il set di temi predefinito potrebbe essere "Theme.AppCompat.Light.DarkActionBar" come mostrato di seguito (styles.xml)

    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
           <!-- API 14 theme customizations can go here. -->
       </style> 

    In questo caso, il tema principale in style.xml deve essere modificato in "android: style / Theme.Holo.Light.DarkActionBar"

  • Inoltre, se nel riferimento a MainActivity.java è stato fatto riferimento a Fragment, Fragments Manager dalla libreria di supporto, questi devono essere opportunamente modificati in Fragment, FragmentManager dell'SDK.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.