¿Por qué Eclipse agrega automáticamente el soporte de la biblioteca appcompat v7 cada vez que creo un nuevo proyecto?

217

¿Por qué Eclipse agrega automáticamente appcompat v7soporte de biblioteca cada vez que creo un nuevo proyecto?

Estoy creando un proyecto simple que MainActivitydebería extenderse Activity, pero no lo hace. Eclipse agrega automáticamente soporte de barra de acción.

¿Cómo creo un proyecto simple sin la appcompatbiblioteca? Para su información, he descargado la última versión de ADT con todo actualizado recientemente. Estoy usando Window 7 x64.

Ingrese la descripción de la imagen aquí

Talha Q
fuente

Respuestas:

105

Como se indica en la Descripción general de la biblioteca de soporte de Android , se considera una buena práctica incluir la biblioteca de soporte de forma predeterminada debido a la gran diversidad de dispositivos y la fragmentación que existe entre las diferentes versiones de Android (y, por lo tanto, de las API proporcionadas).

Esta es la razón por la cual las herramientas de plantillas de código de Android incluidas en Eclipse a través de las Android Development Tools (ADT)integran de forma predeterminada.

API 15Noté que apunta a su muestra, pero el SDK mínimo requerido para su paquete es API 10, para lo cual las bibliotecas de compatibilidad pueden proporcionar una gran cantidad de API compatibles con versiones anteriores. Un ejemplo sería la capacidad de usar el Fragment APIque aparece en API 11 (Android 3.0 Honeycomb) en un dispositivo que ejecuta una versión anterior de este sistema.

También debe tenerse en cuenta que puede desactivar la inclusión automática de la Biblioteca de soporte de forma predeterminada.

Halim Qarroum
fuente
54
Bueno, eso es BS. He estado usando eclipse en el nivel API 10 durante los últimos 2 meses y nunca importó la biblioteca de compatibilidad o un diseño de fragmentos hasta que salió esta maldita API kitkat. Parece que en este punto la forma más simple de evitar que aparezca es no crear una Actividad automáticamente. Por lo tanto, deberá desmarcar "crear actividad" y crear la suya propia cuando se haya creado el proyecto.
user3223214
2
Sí, ese es el punto, la biblioteca siempre se incluirá debido a las razones anteriores.
Halim Qarroum
1
Bueno, la biblioteca de soporte proporciona compatibilidad con versiones anteriores de numerosos componentes del SDK de Android. No solo para ActionBar. Puede encontrar un montón de API compatibles en la última versión de la biblioteca de soporte. Es posible que desee consultar developer.android.com/tools/support-library/index.html para obtener más detalles.
Halim Qarroum
1
¿Es mejor evitar el app_compat?
Neolardo Va Dinci
2
Por dios google !!! Deje de parchear y parchear y parchar, todo este montón de soporte Los errores y versiones de la biblioteca nos están volviendo locos.
Josh
59

Cree un nuevo Android Application Projecty desmarque Create activity en el paso dos (Configurar proyecto).

songhir
fuente
Gracias Pero la menucarpeta no se creó en mi proyecto.
Steve
1
Eliminar el proyecto appcompat_v7 de mi espacio de trabajo y crear un nuevo proyecto de Android desmarcando la opción 'Crear actividad' me sirvió. Las cosas especificadas en otras respuestas no funcionaron para mí. Gracias.
Srinivasan N
22

¿Por qué mi eclipse agrega automáticamente soporte para la biblioteca appcompat v7 cada vez que creo un nuevo proyecto?

Debido a que su SDK de destino está configurado en 15, en el que la Barra de acción está activada de manera predeterminada y su SDK mínimo admitido está configurado en 10. La Barra de acción sale en 11, por lo que necesita una biblioteca de soporte, Eclipse la agrega por usted. Referencia.

Puede configurar bibliotecas de proyectos en la ruta de compilación de las propiedades del proyecto.

Adam Stelmaszczyk
fuente
12
Si configuro el SDK mínimo como 12 o 13, sigo teniendo el mismo comportamiento del eclipse ...
mikey
18

Eclipse creó automáticamente el appcompat_v7. Debido a que Kitkat Api se lanzó, se agrega automáticamente appcompat_v7y fragment_main.xml.

Las mejores formas de resolver estos:

  1. En primer lugar en el proyecto, allí Right click->properties->Androidpuedes ver el red marked appcompatpuesto Reference. Haga clic en eso y elimínelo. Luego marque el nombre del objetivo correcto Project Build Target.

  2. Elimine fragment_main.xml y el archivo Appcompat creado en su Eclipse .

  3. Edite y cambie su activity_main.xml de la siguiente manera:

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

    <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
    
        </style>
    
        <!-- Application theme. -->
        <style name="AppTheme" parent="AppBaseTheme">
    
        </style>
    
    </resources>
    
  5. En res / values-v11 / styles.xml tienes que cambiar así:

    <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
        </style>
    
    </resources>
    
  6. En res / values-v14 / styles.xml tienes que cambiar así:

      <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
        </style>
    
        <style name="AppTheme" parent="AppBaseTheme">
        </style>
    
    </resources>
    
  7. Cambie su menu / main.xml de esta manera:

    <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 cambie su MainActivity.java de la siguiente manera:

    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 tienes que hacerlo para crear un nuevo proyecto

Steve
fuente
2
¿Qué están pensando? ¿No debería Eclipse tener una solución de un solo clic para esto?
Pacerier
1
@Pacerier: Sí. Mediante el uso de appcompat_v7.
David Liu el
8

Se incluye porque su versión mínima de SDK está establecida en 10. La ActionBarse introdujo en API 11. Eclipse la agrega automáticamente para que su aplicación pueda verse más consistente en todo el espectro de todas las versiones de Android que admite.

Ahmad
fuente
4

Si no está apuntando a versiones 2.x, puede establecer su versión sdk mínima de 4.xy luego crear un proyecto. Appcompat V7 lib no se creará.

Swapnil
fuente
4

Soy nuevo con Android y el proyecto appcompat_v7 siempre se crea cuando creo un nuevo proyecto de aplicación de Android que me hace sentir muy incómodo.

Esto es solo un paseo. Elija Propiedades del proyecto -> Android y luego en el cuadro Biblioteca simplemente elimine appcompat_v7_x y agregue appcompat_v7. Ahora puede eliminar appcompat_v7_x.

Desmarque Crear actividad en el asistente de creación de proyectos no funciona, porque al crear actividad por asistente, la aplicacióncompat_v7_x aparece nuevamente. La versión de mi ADT es v22.6.2-1085508 .
Lo siento si mi inglés es malo.

Lê Quang Duy
fuente
1
Echa un vistazo a tantas respuestas aquí. Esta sección es para responder. Has publicado preguntas en la sección de respuestas.
Talha Q
1
Solo quiero mostrar una forma de eliminar appcompat_v7_x y no creo que sea una pregunta. Si cometí un error, por favor, perdóname porque soy nuevo en stackoverflow.
Lê Quang Duy
3

Lo siento con mi inglés, cuando creas un nuevo proyecto de Android, debes elegir una API de alto nivel, por ejemplo: de la API 17 a la API 21, no tendrá un proyecto de aplicación compatible y será muy fácil de compartir. Si lo hizo con una API inferior, simplemente edite en el Manifiesto de Android para tener una API superior :), después de eso, puede eliminar Appcompat V7.

nobjta_9x_tq
fuente
2

De acuerdo con http://developer.android.com/guide/topics/ui/actionbar.html

Las API de ActionBar se agregaron por primera vez en Android 3.0 (API nivel 11) pero también están disponibles en la Biblioteca de soporte para compatibilidad con Android 2.1 (API nivel 7) y superior.

En resumen, ese proyecto generado automáticamente que está viendo modulariza el proceso de agregar ActionBar a las API 7-10.

Ejemplo de ActionBar en Froyo

Consulte http://hmkcode.com/add-actionbar-to-android-2-3-x/ para obtener una explicación simplificada y un tutorial sobre el tema.

b1nary.atr0phy
fuente
0

Noté la creación de la biblioteca 'appcompat' al crear un nuevo proyecto de Android con la versión ADT 22.6.2, incluso cuando el minSDK se configuró en 11 y targetSDK se configuró en 19

Esto sucedía porque, en la nueva plantilla de proyecto, Android está utilizando algunos atributos que provienen de la biblioteca de soporte. Por ejemplo, si se creó un nuevo proyecto con la barra de acción, en el menú main.xml se podría encontrar app:showAsAction="never"cuál es de la biblioteca de soporte.

  • Si la aplicación está dirigida a la versión de Android 11 y superior, entonces uno puede cambiar este atributo a android:showAsActionen main.xml del menú
  • También el conjunto de temas predeterminado podría ser "Theme.AppCompat.Light.DarkActionBar" como se muestra a continuación (styles.xml)

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

    En este caso, el tema principal en style.xml debe cambiarse a "android: style / Theme.Holo.Light.DarkActionBar"

  • Además de esto, si se hizo referencia a Fragment, Fragments Manager de la biblioteca de soporte en el código de MainActivity.java, estos deben cambiarse apropiadamente a Fragment, FragmentManager del SDK.
Jeevan
fuente