Remova todos os recursos não utilizados de um projeto Android

386

Quero remover todos os layouts, strings, drawables, cores, etc. não utilizados do meu diretório de res do Android. Existem ferramentas que me fornecerão uma lista de arquivos e eu posso remover do meu repositório e elementos dentro de arquivos específicos (por exemplo, entradas de sequência não utilizadas) que não são mais usadas?

Steve Prentice
fonte

Respostas:

734

Você pode pesquisar facilmente recursos não utilizados no Android Studio. Basta pressionar CtrlAltShiftie digitar " recursos não utilizados " (sem aspas). Isso executará fiapos. Maneira super fácil de executar comandos lint (e outras coisas do IDE).

OU

No menu do Android Studio > Refatorar > Remover recursos não utilizados ...

Selecione os recursos que você deseja remover. Você pode excluir os recursos que deseja manter clicando com o botão direito do mouse no item do recurso.

Use Do Refactor para remover todos os recursos de uma só vez.

Atualização: use OptionShiftifor mac

bakua
fonte
55
cmd + Alt + Shift para mac
Jesus Dimrix
5
@MikeMilla Clique com o botão direito do mouse nos arquivos que deseja excluir e clique na opção que diz "Aplicar correções de fiapos". Para excluir vários arquivos de uma só vez, selecione-os.
Saket Jain
28
Esteja ciente de que o uso dessa abordagem também removerá qualquer recurso usado programaticamente.
precisa saber é o seguinte
23
Quebrou todo o meu projecto ... Não é um movimento tão sábio
egorikem
7
Com o AS 3.0, esse recurso remove alguns arquivos de layout usados. É melhor fazer um backup ou confirmação do git antes de tentar isso.
StoneLam 30/01
99

Desde o ADT 16, você pode usar o Android Lint . É uma ferramenta realmente incrível.

O Android Lint é uma nova ferramenta para o ADT 16 (e Tools 16) que verifica as fontes de projetos do Android em busca de possíveis erros.

Aqui estão alguns exemplos dos tipos de erros que ele procura:

  • Traduções ausentes (e não utilizadas)
  • Problemas de desempenho do layout (todos os problemas que a ferramenta antiga layoutopt costumava encontrar e muito mais)
  • Recursos não utilizados
  • Tamanhos de matriz inconsistentes (quando matrizes são definidas em várias configurações)
  • Problemas de acessibilidade e internacionalização (cadeias codificadas, falta de descrição do conteúdo, etc.)
  • Problemas com ícones (como densidades ausentes, ícones duplicados, tamanhos incorretos etc.)
  • Problemas de usabilidade (como não especificar um tipo de entrada em um campo de texto)
  • Erros de manifesto e muito mais.

No entanto, há alguns problemas (não sei se eles já foram corrigidos) e se você deseja excluir centenas de recursos supostamente não utilizados, recomendo compilar manualmente o projeto várias vezes durante a remoção de recursos para garantir que o Lint não remova algo necessário.

Andrei Buneyeu
fonte
10
Eu não confiaria muito no que o Lint está propondo como recursos não utilizados, especialmente se você fizer muitas pesquisas de recursos no seu código, e não no xml. Nesse caso, o Lint encontrará muitos recursos que não estão sendo usados ​​enquanto realmente estão.
MrJre
61
No Android Studio, você pode Analyze > Inspect Code...encontrar várias coisas, incluindo declarações e métodos não utilizados .
Joshua Pinter
8
Um exemplo, se você quiser usar a linha de comando:lint --check UnusedResources <project-path>
espinchi
41
Mas como excluí-los?
Martin Pfeffer
11
Existe uma maneira de excluir todos Extra Translationsjuntos / automaticamente?
rishabhmhjn
41

Como o Suporte ao ADT no Eclipse terminou, precisamos usar o Android Studio.

No Android Studio 2.0 ou superior, use Refactor > Remove Unused Resources...

insira a descrição da imagem aqui

dieter
fonte
2
Parece que desta forma remove os recursos usados programaticamente
THZ
11
Não se esqueça de revisar na próxima etapa, caso contrário, alguns arquivos usados ​​também serão excluídos.
Karan Sharma
38

O sistema de compilação Gradle para Android suporta "encolhimento de recursos": a remoção automática de recursos que não são utilizados, no momento da compilação, no aplicativo empacotado. Além de remover recursos em seu projeto que não são realmente necessários em tempo de execução, isso também remove recursos das bibliotecas de que você depende, se eles não forem realmente necessários para o seu aplicativo.

Para ativar isso, adicione a linha shrinkResources true no seu arquivo gradle.

   android {
        ...

        buildTypes {
            release {
                minifyEnabled true //Important step
                shrinkResources true
            }
   }
}

Verifique a documentação oficial aqui,

http://tools.android.com/tech-docs/new-build-system/resource-shrinking

Prokash Sarkar
fonte
2
shrinkResources precisa que o proguard esteja ativado. Eu hv problemas permitindo proguard :-(
Tixeon
shrinkResources é tomado em consideração apenas se minifyEnabled é verdade minifyEnabled true
Eldhopj
16

Abrimos o código-fonte de uma ferramenta que remove todos os recursos não utilizados no seu projeto Android com base na saída do fiapo. Pode ser encontrado aqui: https://github.com/KeepSafe/android-resource-remover

philipp
fonte
como eu uso isso para remover recursos não utilizados do meu projeto android studio.
Yamini 5/08
15

Cuidado se você estiver usando vários sabores ao executar o fiapo. O fiapo pode fornecer recursos falsos não utilizados, dependendo do sabor que você selecionou.

MRodrigues
fonte
Como evitar isso?
NickUnuchek 22/02/19
Até agora, não descobri uma maneira de fazê-lo. Exceto executando fiapos para cada sabor e depois marcando os itens não utilizados nos dois sabores.
MRodrigues 27/02/19
8

No Android Studio 2.0 e superior, no menu, selecione Refatorar -> clique em Remover recursos não utilizados ...

(ou)

atalho também disponível

Pressione Ctlr + Alt + Shift + i uma caixa de diálogo será exibida e digite não utilizado , você encontrará várias opções para selecionar e remover recursos não utilizados

Ramesh R
fonte
7

No Android Studio,

Analisar -> Executar inspeção por nome

(Atalho para Mac shift + command + option + i, Ctrl + Shift + A no Windows / Linux).

E digite 'recursos não utilizados'.

Dessa forma, você pode remover recursos não utilizados, variáveis, símbolos, localização, bibliotecas .etc.

Selecione a inspeção desejada na lista e selecione o escopo da inspeção -> OK insira a descrição da imagem aqui

Lins Louis
fonte
6

Atenção Os desenvolvedores do Android Wear : "Remover recursos não utilizados" excluirão o arquivo xml no qual você declara o nome do recurso (res / values ​​/ wear.xml) e o telefone não poderá se conectar ao relógio. Passei horas tentando descobrir esse bug no meu aplicativo.

steliosf
fonte
E também remove ícones redondos do mipmap, por exemplo.
Artem
Corrigir. Em geral, 'Remover recursos não utilizados' não deve ser recomendado, pois pode criar muitos erros não rastreáveis.
Steliosf #
4

Para verificar string.xml.

É fácil (pelo menos na minha versão do Eclipse)

No Eclipse para Android (eu tenho a versão v22.6.2-1085508)

  • Clique esquerdo no nome do projeto em "Package Explorer"
  • Selecione "Ferramentas Android".
  • Selecione "Run Lint: verifique se há erros comuns".

Agora, quando você abrir o arquivo strings.xml, verá que a seqüência não utilizada está destacada.

Você pode corrigir outros problemas em potencial.

Gabriel Klein
fonte
Uma boa solução, amigo. Ele também permite executar fiapos para verificações selecionadas - exatamente o que eu precisava ... (PS quase o mesmo com o Android Studio: clique com o botão direito no Project Explorer, selecione Analisar , selecione Inspecionar código ou Executar inspeção por nome ): D
Trinimon
Isso não ajuda muito na remoção dessas strings não utilizadas. Você sugere removê-los manualmente como antes?
Stan
"Lint" é realmente uma excelente maneira de "limpar seu projeto". Você ainda precisa removê-los manualmente, mas eles são destacados e você vê imediatamente que eles não são usados. São alguns minutos de trabalho para um projeto de tamanho médio. :)
Gabriel Klein
3

Talvez o Andround Unused Resources útil seja um aplicativo Java que varrerá seu projeto em busca de recursos não utilizados. Recursos não utilizados desnecessariamente ocupam espaço, aumentam o tempo de compilação e desorganizam a lista de preenchimento automático do IDE.

Para usá-lo, verifique se o diretório de trabalho é a raiz do seu projeto Android e execute:

java -jar AndroidUnusedResources.jar

https://code.google.com/p/android-unused-resources/

user1632014
fonte
11
onde quer que eu colocá-lo continua dizendo que não é a raiz do projeto correta
kingston
2

Quando definimos os recursos de redução como verdadeiros, também podemos definir quais recursos queremos manter e quais não adicionei arquivo xml na pasta res / raw denominada keep.xml

Antes de continuar gerando uma única compilação assinada e check-in, a ferramenta analisador apk que mostrará drawable-xhdpi-v4 possui messenger_button_send_round_shadow.png que eu quero remover para este teste

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
       tools:shrinkMode="strict"
       tools:discard="@drawable/com_facebook_button_icon_blue.png,
       @drawable/com_facebook_button_icon_white.png,
       @drawable/com_facebook_button_like_icon_selected.png,
       @drawable/messenger_button_send_round_shadow.png,
       @drawable/messenger_*"  />

fazendo messenger_ * todos os arquivos iniciados a partir do nome messenger na pasta drawable serão removidos ou o contrário é que eu defini um arquivo específico a ser removido

para que você possa remover os arquivos da biblioteca, também é possível remover layouts por @ nome do layout / layout, se o drawable tiver sido usado pelo layout e assim por diante ....

Parth Dave
fonte
1

Há realmente excelentes respostas aqui sugerindo boas ferramentas

Mas se você pretende remover png-drawables (ou outros arquivos de imagem ), considere também mover todas as pastas drawable-xxxx do projeto para uma pasta temporária, faça uma reconstrução de tudo e dê uma olhada na compilação lista de mensagens que informará quais estão faltando.

Isso pode ser especialmente útil se você deseja obter uma visão geral de quais recursos você está usando efetivamente e talvez substituí-los por uma fonte de ícone ou recursos svg, possivelmente com a ajuda da biblioteca Android Iconics .

Daniel F
fonte
isso consome tempo, mas eu concordo que isso também é uma solução. Eu estou fazendo isso agora
Dika
0

O Android Assets Viewer foi projetado para ajudar a inspecionar visualmente os gráficos compactados (como desenháveis) dentro do seu .apk (você também pode fazer o upload de um arquivo zip da sua pasta res, se preferir):

http://www.cellebellum.net/AndroidAssetsViewer/

Portanto, para remover recursos não utilizados, isso pode funcionar bem em conjunto com as verificações do Lint para ajudar a garantir que tudo o que deveria estar lá exista. Também ajuda a identificar alguns outros problemas em potencial com seus drawables: balde errado, gráfico errado etc.

Straya
fonte
0

Depois de executar o Lint no Android Studio e encontrar todos os recursos não utilizados, você pode clicar em um deles na guia Inspeção. Ele fornece alguns detalhes sobre o problema e algumas opções para corrigi-lo. Um deles é remover todos os recursos não utilizados. A seleção dessa opção exclui todos os recursos não utilizados.

rohans310
fonte