Inicialmente, meu projeto não se destinava ao Android e seus ativos estão organizados ao longo da seguinte estrutura de diretórios (espero que a arte ASCII seja razoavelmente bem):
/
+- engine/
| +- src/
| | enginefile1.cpp
| | ...
| `- textures/
| texture1.tex
| ...
+- game/
| +- src/
| | gamefile1.cpp
| | ...
| +- textures/
| | gametexture1.tex
| | ...
| +- ios/
| | [various iOS-specific files]
| `- android/
| | build.xml
| | AndroidManifest.xml
| +- jni/
| | Android.mk
| +- assets/
| [other Android-specific files]
`- othergame/
Meu game/android/jni
diretório está quase vazio porque Android.mk
aponta para os caminhos relativos dos arquivos de origem em engine/src
e game/src
. Na verdade, ele inclui os Makefile
s apropriados para que eu nunca precise modificar Android.mk
quando adiciono ou removo um arquivo de origem no projeto.
Ambos engine
e game
fornecem ativos que precisam ser enviados com a versão do Android. Eu gostaria de me build.xml
referir a esses ativos sem precisar copiá-los manualmente. Uma regra que copie os ativos no momento da criação e os exclua seria aceitável, mas é claro que eu preferiria uma solução de cópia zero. Isso faz sentido? Como outras pessoas resolveram esse problema de construção de plataforma cruzada?
fonte
res
ou nãoassets
) é precisamente o que eu não quero fazer. Como eu disse na pergunta, tantoengine
egame
fornecer activos que eu quero para enviar.assets
diretório, permitindo preservar qualquer estrutura de diretório específica do jogo. Quanto aos links simbólicos do Windows: windows7home.net/how-to-create-symbolic-link-in-windows-7A propriedade de construção da formiga "asset.dir" é responsável por fornecer o nome do diretório de ativos. Por padrão, são "ativos", mas você pode alterá-lo para algo como "../assets". Isso altera o caminho do diretório inteiro, mas se você tiver recursos específicos do Android, ainda poderá usar o diretório "res".
fonte
Que estranho as outras respostas aqui não responderem à sua pergunta ... todas elas assumem que você deseja apenas um diretório de ativos ou se refere a res / em vez de assets /.
Também preciso de mais de um diretório de ativos.
Lutei com o
<aapt>
módulo ant por horas e horas e finalmente desisti e percebi que havia uma maneira muito mais fácil.Copiei a
<target name="-package-resources"...>
tag do arquivo de construção mestre queant
usa,android_sdk_dir/tools/ant/build.xml
e colei a tag no meu projetobuild.xml
(você deve colar a tag imediatamente antes dabuild.xml
inclusão do mestre , comobuild.xml
explicam os comentários no final do projeto pré-fabricado ) e, em seguida, adicionei uma segunda seção para simplesmente execzip
para adicionar os ativos ao arquivo .ap_ (que está${out.absolute.dir}/${resource.package.file.name}
nesse ponto no arquivo ant):Esse método tem a vantagem de você ser mais livre para definir a estrutura de diretórios de seus ativos na árvore de origem e no apk (pois é possível
exec
zip
várias vezes com argumentos diferentes e até envolverzip
um script que é executado azip
partir de vários diretórios atuais em seu diretório). árvore de origem). Você também tem o controle de compactação por arquivo (o zip tem uma opção -0 para suprimir a compactação) e não precisa usar a tag nocompress limitada por extensão apenas.Observe que esse
ant
xml vem ANTES do zipalign no processo de criação de formigas, por isso ainda temos um arquivo "compatível com zip" que atende às necessidades de alinhamento de APKs e Java Android.No meu caso, eu tenho um aplicativo baseado em NDK e desejo acessar esses ativos apenas do código C (onde qualquer caminho do apk estiver OK). Se você precisar usar as chamadas padrão dos ativos Java Android para acessar esses itens, não tenho certeza se eles devem ou não estar em um caminho dentro do zip denominado ativos / não.
exec
Nesse caso, você pode adaptar o truque acima, inserindo um scriptcd
na pasta da árvore de origem relevante e executandozip
.fonte
Em primeiro lugar, acho que você não pode usar nada fora do res /, mas se você estiver procurando evitar custos adicionais ao seu ciclo de desenvolvimento com uma cópia, tente movê-los ou talvez até usar um link simbólico ...
fonte
engine
diretório, que está em um repositório separado. Os links simbólicos podem ser aceitáveis, mas não tenho certeza de que funcionariam bem no Windows e ainda há o problema de sincronizá-los automaticamentebuild.xml
.Se você estivesse usando um projeto Maven em vez de um projeto Ant, poderia facilmente redefinir a pasta res para o que quisesse, através da opção de configuração resourceDirectory do android: apk mojo no android-maven-plugin .
Infelizmente, a menos que você esteja disposto a migrar do Ant para o Maven, essa resposta pode não ajudá-lo muito ...
fonte
Se você estiver em um sistema operacional unix, poderá vinculá-los com força e dizer ao seu controle de versão para ignorar o
res/
diretório.fonte