Pourquoi Eclipse ajoute-t-il automatiquement la prise en charge de la bibliothèque appcompat v7 chaque fois que je crée un nouveau projet?


217

Pourquoi Eclipse ajoute-t-il automatiquement la appcompat v7prise en charge de la bibliothèque chaque fois que je crée un nouveau projet?

Je crée un projet simple qui MainActivitydevrait s'étendre Activity, mais ce n'est pas le cas. Eclipse ajoute automatiquement la prise en charge de la barre d'actions.

Comment créer un projet simple sans la appcompatbibliothèque? Pour info, j'ai téléchargé la dernière version d'ADT avec tout mis à jour récemment. J'utilise Windows 7 x64.

Entrez la description de l'image ici

Réponses:


105

Comme indiqué dans la vue d'ensemble de la bibliothèque de support d'Android , il est considéré comme une bonne pratique d'inclure la bibliothèque de support par défaut en raison de la grande diversité des appareils et de la fragmentation qui existe entre les différentes versions d'Android (et donc des API fournies).

C'est la raison pour laquelle les outils de modèles de code Android inclus dans Eclipse via les Android Development Tools (ADT)intègrent par défaut.

J'ai noté que vous ciblez API 15dans votre exemple, mais le SDK minimal requis pour votre package est API 10, pour lequel les bibliothèques de compatibilité peuvent fournir une énorme quantité d'API rétrocompatibles. Un exemple serait la possibilité d'utiliser le Fragment APIqui apparaît sur API 11 (Android 3.0 Honeycomb) sur un appareil qui exécute une ancienne version de ce système.

Il est également à noter que vous pouvez désactiver l'inclusion automatique de la bibliothèque de support par défaut.


54
C'est bien BS. J'utilise eclipse au niveau API 10 depuis 2 mois et ce n'est jamais importé la bibliothèque de compatibilité ou une disposition de fragment jusqu'à ce que cette api kitkat flippante soit sortie. Il semble à ce stade que le moyen le plus simple de l'empêcher d'apparaître ne soit pas de créer une activité automatiquement. Vous devrez donc décocher «créer une activité» et créer la vôtre une fois le projet créé.
user3223214

2
Oui, c'est le point, la bibliothèque sera toujours incluse pour les raisons ci-dessus.
Halim Qarroum

1
Eh bien, la bibliothèque de support offre une compatibilité descendante pour de nombreux composants du SDK Android. Pas seulement pour l'ActionBar. Vous pouvez trouver tout un tas d'API prises en charge dans la dernière version de la bibliothèque de support. Vous voudrez peut-être jeter un œil à developer.android.com/tools/support-library/index.html pour plus de détails.
Halim Qarroum

1
Vaut-il mieux éviter l'app_compat?
Neolardo Va Dinci

2
Jeez google !!! arrêtez les correctifs et les correctifs et les correctifs, tous ces tas d'erreurs et de versions de supportLibrary nous rendent fous.
Josh

59

Créez un nouveau Android Application Projectet décochez Create activity à l'étape deux (Configurer le projet).


Merci Mais le menudossier n'a pas été créé dans mon projet.
Steve

1
Supprimer le projet appcompat_v7 de mon espace de travail et créer un nouveau projet Android en décochant l'option «Créer une activité» a fait l'affaire pour moi. Les choses spécifiées dans d'autres réponses n'ont pas fonctionné pour moi. Merci.
Srinivasan N

22

Pourquoi mon eclipse ajoute automatiquement la prise en charge de la bibliothèque appcompat v7 chaque fois que je crée un nouveau projet

Parce que votre SDK cible est défini sur 15, dans lequel la barre d'actions est activée par défaut et votre SDK minimum pris en charge est défini sur 10. La barre d'actions sort en 11, vous avez donc besoin d'une bibliothèque de support, Eclipse l'ajoute pour vous. Référence.

Vous pouvez configurer les bibliothèques de projet dans le chemin de génération des propriétés du projet.


12
Si je configure le sdk minimum à 12 ou 13, j'obtiens toujours le même comportement depuis eclipse ...
mikey

18

Eclipse a automatiquement créé l'appcompat_v7.Parce que Kitkat Api s'est lancé, il ajoute automatiquement appcompat_v7et fragment_main.xml.

Meilleures façons de résoudre ces problèmes:

  1. Tout d'abord dans le projet, Right click->properties->Android.Vous pouvez voir le red marked appcompatplacé dans Reference. Cliquez dessus et supprimez-le, puis cochez le bon nom de cible dans Project Build Target.

  2. Supprimez le fichier fragment_main.xml et Appcompat créé dans votre Eclipse .

  3. Modifiez et modifiez votre activity_main.xml comme suit:

    <?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. Dans res / values ​​/ styles.xml:

    <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
    
        </style>
    
        <!-- Application theme. -->
        <style name="AppTheme" parent="AppBaseTheme">
    
        </style>
    
    </resources>
  5. Dans res / values-v11 / styles.xml, vous devez changer comme ceci:

    <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
        </style>
    
    </resources>
  6. Dans res / values-v14 / styles.xml, vous devez changer comme ceci:

      <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
        </style>
    
        <style name="AppTheme" parent="AppBaseTheme">
        </style>
    
    </resources>
  7. Modifiez votre menu / main.xml comme suit :

    <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. Enfin, changez votre MainActivity.java comme ceci:

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

Comme vous devez le faire pour créer un nouveau projet


2
Que pensent-ils? Eclipse ne devrait-il pas avoir une solution en un clic pour cela?
Pacerier

1
@Pacerier: Ouais. En utilisant appcompat_v7.
David Liu

8

Il est inclus car votre version minimale du SDK est définie sur 10. La a ActionBarété introduite dans l'API 11. Eclipse l'ajoute automatiquement afin que votre application puisse paraître plus cohérente sur l'ensemble du spectre de toutes les versions Android que vous prenez en charge.


4

Si vous ne ciblez pas les versions 2.x, vous pouvez définir votre version sdk minimale de 4.x, puis créer un projet. La bibliothèque Appcompat V7 ne sera pas créée.


4

Je suis nouveau avec Android et le projet appcompat_v7 est toujours créé lorsque je crée un nouveau projet d'application Android me met tellement mal à l'aise.

C'est juste une promenade. Choisissez Propriétés du projet -> Android puis dans la zone Bibliothèque, supprimez simplement appcompat_v7_x et ajoutez appcompat_v7. Vous pouvez maintenant supprimer appcompat_v7_x.

La case à cocher Créer une activité dans l'assistant de création de projet ne fonctionne pas, car lors de la création d'une activité par l'assistant, l' appcompat_v7_x réapparaît . La version de mon ADT est la v22.6.2-1085508 .
Je suis désolé si mon anglais est mauvais.


1
Découvrez autant de réponses ici. Cette section est pour la réponse. Vous avez posté une question dans la section réponse.
Talha Q

1
Je veux juste montrer un moyen de supprimer appcompat_v7_x et je ne pense pas que ce soit une question. Si j'ai fait une erreur, veuillez me pardonner car je suis nouveau avec stackoverflow.
Lê Quang Duy

3

Désolé avec mon anglais, lorsque vous créez un nouveau projet Android, vous devez choisir une API de haut niveau, par exemple: de l'API 17 à l'API 21, il n'aura pas d'application compatible et très facile à partager le projet. Si vous l'avez fait avec une API inférieure, vous modifiez simplement dans le manifeste Android pour avoir une API supérieure :), après cela, vous pouvez supprimer Appcompat V7.


2

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

Les API ActionBar ont été ajoutées pour la première fois dans Android 3.0 (API niveau 11) mais elles sont également disponibles dans la bibliothèque de support pour la compatibilité avec Android 2.1 (API niveau 7) et au-dessus.

En bref, ce projet généré automatiquement que vous voyez modularise le processus d'ajout de l'ActionBar aux API 7-10.

Exemple d'ActionBar sur Froyo

Voir http://hmkcode.com/add-actionbar-to-android-2-3-x/ pour une explication simplifiée et un tutoriel sur le sujet.


0

J'ai remarqué la création de la bibliothèque «appcompat» lors de la création d'un nouveau projet Android avec la version ADT 22.6.2, même lorsque le minSDK était réglé sur 11 et targetSDK était réglé sur 19

Cela se produisait car, dans le nouveau modèle de projet, Android utilise certains attributs qui proviennent de la bibliothèque de support. Par exemple, si un nouveau projet a été créé avec la barre d'action, alors dans le menu main.xml, on pourrait trouver celui app:showAsAction="never"qui provient de la bibliothèque de support.

  • Si l'application est destinée à la version Android 11 et supérieure, on peut changer cet attribut en android:showAsActiondans le menu principal.xml
  • Le jeu de thèmes par défaut peut également être "Theme.AppCompat.Light.DarkActionBar" comme indiqué ci-dessous (styles.xml)

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

    Dans ce cas, le thème parent dans style.xml doit être changé en "android: style / Theme.Holo.Light.DarkActionBar"

  • En plus de cela, si la référence à Fragment, Fragments Manager de la bibliothèque de support a été faite dans le code de MainActivity.java, ceux-ci doivent être correctement modifiés en Fragment, FragmentManager du SDK.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.