Quando devo usar os ativos em vez dos recursos brutos no Android?


151

Estou no meio dos meus estudos do Android e acabei de cobrir os recursos Assets e Raw. Estou tentando entender o motivo do uso de recursos brutos x ativos.

  1. Ambos fornecem um fluxo de entrada de recurso não compilado.

  2. Parece que os ativos fornecem muito mais flexibilidade e funcionalidade do que os recursos brutos.

    uma. Você pode criar estruturas de pastas sob, assetsmas não sobraw

    b. Você pode listar todos os recursos dinamicamente na assetspasta, mas não na rawpasta.

Então, por que eu usaria recursos brutos no Android?


Respostas:


182

As principais diferenças entre a rawpasta e a assetspasta.

  • Como raw é uma subpasta de Recursos (res), o Android gera automaticamente um IDpara qualquer arquivo localizado dentro dele. Em IDseguida, ele é armazenado no R classque atuará como uma referência a um arquivo, o que significa que pode ser acessado facilmente de outras classes e métodos do Android e até mesmo em arquivos XML do Android. Usar o ID gerado automaticamente é a maneira mais rápida de acessar um arquivo no Android.

  • A assetspasta é um diretório "apêndice" . A classe R não gera IDs para os arquivos colocados lá, o que é menos compatível com algumas classes e métodos do Android. O acesso ao arquivo na assetspasta é mais lento, pois você precisará identificá-lo com base em uma String . No entanto, algumas operações são mais fáceis de colocar os arquivos nessa pasta, como copiar um arquivo de banco de dados na memória do sistema. Não existe uma maneira (fácil) de criar uma referência XML do Android para arquivos dentro da pasta Assets.


4
@ user370305 Olá, a limitação de 1 MB ainda existe para o novo sistema operacional Android agora? Não consigo encontrar nenhuma documentação que fale sobre isso. Você tem alguma idéia de onde posso encontrá-lo?
GMsoF 22/11/12

6
@GMsoF - Não existe nenhum documento específico para isso. Mas tenho alguns links úteis para você. 1. blog.rossgreenhalf.com/2010/12/13/android-file-size-limits 2. stackoverflow.com/questions/11276112/… 3. stackoverflow.com/questions/6809651/… 4. elinux.org/Android_aapt e 5. android-developers.blogspot.in/2012/03/… Basta seguir conforme sr.
user370305

2
@GMsoF - Existem muitos truques para colocar o tamanho do arquivo maior que 1 mb no /assetdiretório.
user370305

10
Eu nunca tive uma restrição de tamanho de arquivo para a pasta assets. você tem certeza de que existe isso?
desenvolvedor android

2
Sim, antes do Android 2.2 ou 2.3, qualquer arquivo de ativo compactado com tamanho descompactado acima de 1 MB não pode ser lido no APK. O que é mencionado aqui groups.google.com/forum/#!topic/android-developers/lguGFJD-JRs
user370305

33

Na documentação do Android , o raw/diretório é usado para:

Arquivos arbitrários para salvar em sua forma bruta. Para abrir esses recursos com um InputStream bruto , chame Resources.openRawResource () com o ID do recurso, que é R.raw.filename .

No entanto, se você precisar acessar nomes de arquivos originais e hierarquia de arquivos, considere salvar alguns recursos no assets/diretório (em vez de res / raw /) . Os arquivos nos ativos / não recebem um ID do recurso, portanto, você pode lê-los apenas usando o AssetManager .


Em uma linha, os arquivos no raw/diretório não são compilados pela plataforma , recebem um ID de recurso e não podem ser agrupados em subpastas; se você desejar, use o assets/diretório.


1
Os arquivos não processados ​​são a melhor opção se você deseja copiar um arquivo grande para a pasta de armazenamento?
live-love

@ 40-Love Não há restrições quanto ao tamanho do arquivo para o Android 2.3 e superior, a menos que você esteja suportando versões anteriores. Você pode escolher qualquer pasta de armazenamento, dependendo de seus requisitos. Uma grande distinção é a maneira como esses arquivos são acessados.
Prince

1

Adicionando às respostas dadas acima ...

/ res / strings, / res / layout, / res / xml etc etc tudo é compilado em formato binário. Mas se você colocar arquivos, incluindo arquivos XML, no diretório / res / raw /, eles não serão compilados no formato binário.

Uma grande vantagem do uso de ativos sobre os recursos brutos é o file:///android_asset/ Uri prefixo Isso é útil para carregar um ativo em um WebView. Por exemplo, para acessar um ativo localizado em assets / foo / index.html dentro do seu projeto, você pode chamar o loadUrl("file:///android_asset/foo/index.html")carregamento desse HTML no WebView.


Você pode usar o file:///android_res/prefixo para apontar para um recurso bruto.
androidguy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.