O que são recursos Java
Recursos Java são arquivos de dados empacotados com aplicativos e bibliotecas Java. Esses
recursos são carregados durante a execução: Class.getResource(String name)
, que retorna uma
java.net.URL
, ou Class.getResourceAsStream(String name)
, que retorna um java.io.InputStream
.
O método getResourceAsStream()
normalmente é usado quando um recurso está disponível,
já que gera uma IOException
caso ele não esteja. O método getResource()
retornará nulo se o
recurso não estiver presente. Portanto, é útil testar recursos opcionais.
Caminhos e nomes de recursos
O J2ObjC localiza recursos procurando no pacote principal do aplicativo ([NSBundle mainBundle]
),
usando o caminho relativo ou absoluto do recurso:
Caminhos relativos
O método preferido de especificar caminhos de recursos é usar caminhos relativos. Os caminhos relativos
não começam com uma barra ("/"). Ao ler um recurso com um caminho relativo, o
nome do pacote da classe é modificado, mudando os pontos ('.') no nome do pacote para
barras ("/"). Em seguida, o caminho relativo especificado na chamada de método Class.getResource(String name)
ou Class.getResourceAsStream(String name)
é anexado ao caminho do pacote.
Por exemplo, se um app tiver uma classe foo.bar.Mumble
, o caminho base de todos os recursos relativos
às classes desse pacote será /foo/bar
. Quando Mumble.class.getResource("oops/error.jpg")
é invocado, oops/error.jpg
é anexado ao caminho do pacote. Portanto, o caminho completo do recurso é
/foo/bar/oops/error.jpg
.
Caminhos absolutos
Um recurso também pode ser acessado usando um caminho absoluto, iniciando o nome do recurso com
uma barra ("/"). Os nomes dos pacotes são ignorados. Portanto, o J2ObjC localiza caminhos absolutos no
pacote principal do aplicativo usando os caminhos exatamente como especificados nas
referências Class.getResource(String name)
ou Class.getResourceAsStream(String name)
nas
fontes Java do aplicativo. No exemplo acima,
Mumble.class.getResource("/oops/error.jpg")
tem um caminho de recurso completo
de /oops/error.jpg
, ignorando o nome do pacote foo.bar
.
Como adicionar recursos a um app iOS
Para adicionar arquivos de recursos a um app iOS no Xcode, abra a guia "Build Phases" do destino. Então:
- Clique no ícone + (na guia "General") e selecione "New Copy Files Phase".
- Selecione "Recursos" como o Destino (não Recursos Java).
- Especifique o diretório dos recursos.
- Selecione + e adicione os arquivos à lista.
Independentemente de caminhos de recursos relativos ou absolutos serem usados, cada diretório de recursos requer uma fase de build de "Copiar arquivos" separada em um build do Xcode.
Exemplo
O projeto JreEmulation tem um app "JRE JUnit Tests" que executa os testes de unidade dessa biblioteca. Selecione as fases de build do destino para conferir várias fases de arquivos de cópia, uma para cada caminho relativo usado pelos recursos. Aqui, ClassTest.java carrega o mesmo recurso usando primeiro um caminho absoluto e depois um caminho relativo. O recurso do teste é incluído nesta fase de build "Copy Files":