
O Google I / O 2018 introduziu uma substituição para as bibliotecas de suporte existentes - AndroidX
Inicialmente, as bibliotecas de suporte foram projetadas para compatibilidade com versões anteriores de novas APIs e estavam intimamente relacionadas ao sistema operacional. As bibliotecas de suporte foram desenvolvidas em ramificações internas, que periodicamente foram mescladas no Android Open Source Project (AOSP). Essa abordagem limitou a solicitação de recebimento de mesclagem da comunidade a pequenos períodos de tempo quando o código AOSP e o código interno do Google foram sincronizados. Além disso, para trabalhar com bibliotecas de suporte, era necessário distribuir todo o código da plataforma, e isso representa mais de 40 GB de código-fonte. Para minha unidade de 250 GB, isso é bastante.
A funcionalidade atual das bibliotecas de suporte é muito mais ampla que a ideia original. Por exemplo, foi implementado um componente para simplificar o desenvolvimento da interface do usuário AppCompat, um componente para trabalhar com bancos de dados de salas, um componente para tarefas em segundo plano do WorkManager. Muitas dessas bibliotecas são inicialmente compatíveis com versões anteriores e estão pouco vinculadas à API do Android. O número no número da biblioteca de suporte indica o nível mínimo de API que ele suporta. Por exemplo, support-v7 suporta a API Android versão 7 e superior. No entanto, a partir da versão 26.0.0, as bibliotecas de suporte oferecem suporte à API Android 14 e superior. Uma dor separada é a necessidade de atualizar simultaneamente todas as bibliotecas de suporte. Tudo isso indica que as bibliotecas de suporte se tornaram obsoletas e precisam repensar.
A equipe de desenvolvimento passou vários anos isolando as bibliotecas de suporte em um pequeno projeto separado com o qual você pode trabalhar usando o Android Studio e o Gradle. O desenvolvimento foi movido para um ramo separado, que recentemente se tornou público. Bibliotecas atualizadas são chamadas AndroidX. Outra diferença importante entre as novas bibliotecas é a possibilidade de atualizações independentes. O Google promete compatibilidade binária no âmbito de uma versão principal, o que permitirá o uso da reciclerview versão 1.0 e AppCompat versão 1.9 no mesmo projeto.
Na minha opinião, este é o passo certo e lógico no desenvolvimento de bibliotecas de suporte. Eu tive que personalizar severamente os componentes das bibliotecas de suporte várias vezes, o que levou à necessidade de criar o pacote com.android.support no meu projeto ... para acessar classes / métodos / campos privados do pacote.
Agora, proponho "hackear" algumas bibliotecas da família AndroidX comigo. Como tutorial, escolhi o CardView. Vou influenciar o comportamento do CardView sem fazer nenhuma alteração no código que o utiliza.
Precisamos de: Um computador executando Linux ou MacOS (Windows não é suportado), Android SDK, opcionalmente Android Studio (usei a versão 3.1.3)
E as janelas?Para baixar as fontes, é recomendável usar o utilitário de recompra , que não está disponível para Windows. As fontes também podem ser baixadas usando o git, por exemplo, assim: git clone --single-branch -b androidx-master-dev https://android.googlesource.com/platform/frameworks/support
No entanto, nesse caso, eles não Download de utilitários e dependências compiladas. Eu não verifiquei o quão crítico é construir
Para começar, preparei um pequeno exemplo usando o AndroidX.
Destaques:
Usando AndroidX
def cardViewVer = '1.0.0-beta01' dependencies { implementation "androidx.cardview:cardview:$cardViewVer" }
<?xml version="1.0" encoding="utf-8"?> <FrameLayout 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" tools:context=".MainActivity"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="32dp" android:layout_marginEnd="32dp" android:layout_marginLeft="32dp" android:layout_marginRight="32dp" android:layout_marginStart="32dp" android:layout_marginTop="32dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </androidx.cardview.widget.CardView> </FrameLayout>
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
Como resultado, obtemos o seguinte aplicativo:

Vamos ao AndroidX
Primeiro, você precisa instalar o utilitário repo, criado para simplificar o trabalho com o git no contexto do android.
Criamos uma pasta de trabalho para nossas manipulações, embora você também possa usar o diretório inicial.
mkdir androidX
Instale o utilitário
d androidX mkdir bin curl https://storage.googleapis.com/git-repo-downloads/repo > ./bin/repo chmod a+x ./bin/repo PATH={some_path}/androidX/bin/:$PATH
Deixe-me explicar o que acabamos de fazer:
Na pasta androidX, criamos a pasta repo, onde baixamos o arquivo em https://storage.googleapis.com/git-repo-downloads/repo , tornamos o arquivo executável e adicionamos a pasta bin ao PATH como parte da sessão atual do terminal.
No meu caso, o último comando ficou assim: PATH = ~ / Work / projects / androidX / bin /: $ PATH
Faça o download da fonte AndroidX:
Crie a pasta androidX / androidX-source e atualize-a
mkdir androidX-source cd androidX-source
Inicializamos o repositório local. Ele baixa cerca de 16 megabytes de dados sobre ramificações existentes no repositório.
repo init -u https://android.googlesource.com/platform/manifest -b androidx-master-dev
No processo, o nome e o email do usuário serão retirados da configuração global do show, no meu caso, era assim:
Your identity is: Andrew <me@example.com> If you want to change this, please re-run 'repo init' with --config-name , . . Testing colorized output (for 'repo diff', 'repo status'): black red green yellow blue magenta cyan white bold dim ul reverse Enable color display in this user account (y/N)?
Eu respondi afirmativamente à última pergunta.
No final, recebemos uma mensagem
repo has been initialized in /Users/{user}/Work/projects/androidX/androidX-source
Em seguida, baixe a fonte diretamente (cerca de 3 gigabytes)
repo sync -j8 -c
Podemos abrir as fontes baixadas no Android Studio ou em qualquer outro editor. A pasta raiz do projeto gradle está localizada em: androidX/androidX-source/frameworks/support/
Existem muitos módulos com recursos diferentes e vários aplicativos de teste. Podemos montá-los e instalá-los para verificar o desempenho.
Abra a classe androidx.cardview.widget.RoundRectRrawDrawable no módulo cardview
Adicione uma piada inofensiva ao método onDraw
canvas.drawText(“Hacked!”, 100, 100, paint);
Patch completo
Para o projeto, é descrita a tarefa de classificação createArchive, que coletará as bibliotecas androidX e as colocará no repositório maven local. Endereço do repositório: androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo
Para usá-lo, você deve especificar o caminho no arquivo de construção raiz.
maven { url 'androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo' }
Observe que a versão montada pode ser mais recente que no repositório do Google. No momento da redação deste artigo, compilei uma biblioteca androidX versão 1.0.0-rc01. Você pode visualizar a versão da biblioteca compilada no repositório maven local: androidX/androidX-source/out/host/gradle/frameworks/support/build/support_repo/androidx/cardview/cardview/maven-metadata.xml
Exemplo atualizado
Vamos reconstruir nosso aplicativo e ver a seguinte imagem:

AndroidX corrigido com sucesso!
O que isso nos dá:
- Podemos corrigir problemas críticos sem esperar uma atualização do Google. A propósito, a equipe do AndroidX aceita solicitações de recebimento.
- Personalize fortemente a biblioteca androidX.
Links relacionados:
Documentação da biblioteca de suporte
Postagem do blog do desenvolvedor
Guia de contribuição para AndroidX
Rastreador de tarefas AndroidX
Fontes AndroidX