Por que o Eclipse adiciona automaticamente o suporte da biblioteca appcompat v7 sempre que eu crio um novo projeto?

217

Por que o Eclipse adiciona automaticamente appcompat v7suporte à biblioteca sempre que eu crio um novo projeto?

Estou criando um projeto simples que MainActivitydeve se estender Activity, mas não. O Eclipse adiciona automaticamente suporte à barra de ação.

Como crio um projeto simples sem a appcompatbiblioteca? Para sua informação, baixei a versão mais recente do ADT com tudo atualizado recentemente. Estou usando o Windows 7 x64.

Digite a descrição da imagem aqui

Talha Q
fonte

Respostas:

105

Conforme declarado na Visão geral da biblioteca de suporte do Android , é considerado uma boa prática incluir a biblioteca de suporte por padrão devido à grande diversidade de dispositivos e à fragmentação existente entre as diferentes versões do Android (e, portanto, das APIs fornecidas).

Essa é a razão pela qual as ferramentas de modelos de código do Android incluídas no Eclipse através da Android Development Tools (ADT)integração delas por padrão.

Observei que você tem como alvo API 15sua amostra, mas o SDK mínimo exigido para o seu pacote é API 10o qual as bibliotecas de compatibilidade podem fornecer uma quantidade enorme de APIs compatíveis com versões anteriores. Um exemplo seria a capacidade de usar o Fragment APIque apareceu no API 11 (Android 3.0 Honeycomb) em um dispositivo que executa uma versão mais antiga deste sistema.

Também é preciso observar que você pode desativar a inclusão automática da Biblioteca de Suporte por padrão.

Halim Qarroum
fonte
54
Bem, isso é BS. Eu tenho usado o eclipse no nível 10 da API nos últimos 2 meses e nunca importou a biblioteca de compatibilidade ou um layout de fragmento até que essa api kitkat apical fosse lançada. Parece que, neste ponto, a maneira mais simples de impedir que ela apareça é não criar uma Atividade automaticamente. Portanto, você precisará desmarcar a opção "criar atividade" e criar a sua quando o projeto for criado.
precisa saber é o seguinte
2
Sim, esse é o ponto, a biblioteca sempre será incluída por causa dos motivos acima.
Halim Qarroum
1
Bem, a biblioteca de suporte fornece compatibilidade com versões anteriores de vários componentes do Android SDK. Não apenas para o ActionBar. Você pode encontrar várias APIs suportadas na versão mais recente da biblioteca de suporte. Você pode dar uma olhada no developer.android.com/tools/support-library/index.html para obter mais detalhes.
Halim Qarroum
1
É melhor evitar o app_compat?
Neolardo Va Dinci
2
Eita google !!! pare de aplicar patches e aplicar patches e patches, todos esses erros e versões do supportLibrary estão nos deixando loucos.
21715 Josh
59

Crie um novo Android Application Projecte desmarque Create activity na etapa dois (Configurar projeto).

songhir
fonte
Obrigado Mas a menupasta não foi criada no meu projeto.
Steve
1
A exclusão do projeto appcompat_v7 do meu espaço de trabalho e a criação de um novo projeto Android, desmarcando a opção 'Criar atividade', fizeram o truque para mim. As coisas especificadas em outras respostas não funcionaram para mim. Obrigado.
Srinivasan N
22

Por que meu eclipse adiciona automaticamente suporte à biblioteca appcompat v7 sempre que eu crio um novo projeto

Como o SDK de destino está definido como 15, em que a Barra de Ação está ativada por padrão e o SDK mínimo suportado está definido como 10. A Barra de Ação é lançada em 11, portanto, você precisa de uma biblioteca de suporte, o Eclipse a adiciona a você. Referência.

Você pode configurar as bibliotecas do projeto no caminho de construção das propriedades do projeto.

Adam Stelmaszczyk
fonte
12
Se eu configurar o SDK mínimo como 12 ou 13 eu ainda obter o mesmo comportamento do eclipse ...
mikey
18

O Eclipse criou automaticamente o appcompat_v7. Como o Kitkat Api se lançou, ele adiciona automaticamente appcompat_v7e fragment_main.xml.

Melhores maneiras de resolver isso:

  1. Em primeiro lugar no projeto Right click->properties->Android,. Aqui você pode ver o red marked appcompatcolocado Reference. Clique nele e remova-o. Em seguida, marque o nome do destino correto em Project Build Target.

  2. Exclua fragment_main.xml e o arquivo Appcompat criado no seu Eclipse .

  3. Edite e altere seu activity_main.xml como estes:

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

    <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
    
        </style>
    
        <!-- Application theme. -->
        <style name="AppTheme" parent="AppBaseTheme">
    
        </style>
    
    </resources>
  5. Em res / values-v11 / styles.xml, você precisa alterar assim:

    <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
        </style>
    
    </resources>
  6. Em res / values-v14 / styles.xml, você precisa mudar assim:

      <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
        </style>
    
        <style name="AppTheme" parent="AppBaseTheme">
        </style>
    
    </resources>
  7. Mude seu menu / main.xml como estes:

    <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. Por fim, altere seu MainActivity.java como estes:

    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, você precisa fazer isso para criar um novo projeto

Steve
fonte
2
O que eles estão pensando? O Eclipse não deveria ter uma solução de um clique para isso?
Pacerier 14/11/14
1
@Pacerier: Sim. Usando appcompat_v7.
David Liu
8

Está incluído porque a sua versão mínima do SDK está definida como 10. ActionBarFoi introduzida na API 11. O Eclipse a adiciona automaticamente para que seu aplicativo possa parecer mais consistente em todo o espectro de todas as versões do Android que você oferece suporte.

Ahmad
fonte
4

Se você não está direcionando as versões 2.x, pode definir sua versão sdk mínima do 4.xe criar o projeto. A liberação do Appcompat V7 não será criada.

Swapnil
fonte
4

Sou novo no Android e o projeto appcompat_v7 sempre é criado quando crio um novo projeto de aplicativo para Android me deixa desconfortável.

Esta é apenas uma caminhada. Escolha Propriedades do projeto -> Android e, na caixa Biblioteca, remova appcompat_v7_x e adicione appcompat_v7. Agora você pode excluir appcompat_v7_x.

Desmarque Criar atividade no assistente de criação de projeto não funciona, porque ao criar atividade pelo assistente, o appcompat_v7_x aparece novamente. A versão do meu ADT é v22.6.2-1085508 .
Me desculpe se meu inglês é ruim.

Lê Quang Duy
fonte
1
Se a resposta ajudou de alguma forma, por favor, marque como resposta, caso a sua dúvida não tenha sido solucionada, por favor, poste novamente.
precisa
1
Eu só quero mostrar uma maneira de remover appcompat_v7_x e não acho que seja uma pergunta. Se cometi um erro, por favor, perdoe-me porque sou novo no stackoverflow.
Lê Quang Duy
3

Desculpe meu inglês. Quando você cria um novo projeto Android, deve escolher API de alto nível, por exemplo: da API 17 à API 21, ele não terá o appcompat e é muito fácil compartilhar o projeto. Se você fez isso com a API mais baixa, basta editar no Android Manifest para ter a API superior :); depois disso, você pode excluir o Appcompat V7.

nobjta_9x_tq
fonte
2

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

As APIs do ActionBar foram adicionadas pela primeira vez no Android 3.0 (nível 11 da API), mas também estão disponíveis na Biblioteca de suporte para compatibilidade com o Android 2.1 (nível 7 da API) e superior.

Em resumo, o projeto gerado automaticamente que você está vendo modulariza o processo de adição do ActionBar às APIs 7-10.

Exemplo de ActionBar no Froyo

Consulte http://hmkcode.com/add-actionbar-to-android-2-3-x/ para obter uma explicação e tutorial simplificados sobre o tópico.

b1nary.atr0phy
fonte
0

Notei a criação da biblioteca 'appcompat' enquanto criava um novo projeto android com a versão ADT 22.6.2, mesmo quando o minSDK estava definido como 11 e o targetSDK estava definido como 19.

Isso estava acontecendo porque, no novo modelo de projeto, o android está usando alguns atributos da biblioteca de suporte. Por exemplo, se um novo projeto foi criado com a barra de ação, no main.xml do menu, é possível descobrir app:showAsAction="never"qual é da biblioteca de suporte.

  • Se o aplicativo estiver direcionado para a versão 11 e superior do Android, é possível alterar esse atributo para android:showAsActionno main.xml do menu
  • O conjunto de temas padrão também pode ser "Theme.AppCompat.Light.DarkActionBar", como mostrado abaixo (styles.xml)

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

    Nesse caso, o tema pai em style.xml deve ser alterado para "android: style / Theme.Holo.Light.DarkActionBar"

  • Além disso, se for feita referência ao Fragment, o Fragments Manager da biblioteca de suporte no código MainActivity.java, eles deverão ser adequadamente alterados para Fragment, FragmentManager do SDK.
Jeevan
fonte