Proyek saya pada awalnya tidak dimaksudkan untuk Android, dan asetnya diatur di sepanjang struktur direktori berikut (saya harap seni ASCII merender dengan cukup baik):
/
+- 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/
game/android/jni
Direktori saya hampir kosong karena Android.mk
menunjuk ke jalur relatif file sumber di engine/src
dan game/src
. Sebenarnya, itu bahkan termasuk Makefile
s yang tepat sehingga saya tidak perlu memodifikasi Android.mk
ketika saya menambah atau menghapus file sumber ke proyek.
Keduanya engine
dan game
menyediakan aset yang perlu dikirim bersama Android build. Saya ingin build.xml
merujuk ke aset ini tanpa harus menyalinnya secara manual. Aturan yang menyalin aset saat membangun kemudian menghapusnya akan diterima, tetapi tentu saja saya lebih suka solusi salinan nol. Apakah ini masuk akal? Bagaimana orang lain memecahkan masalah pembangunan lintas platform ini?
sumber
res
atauassets
) adalah persis apa yang tidak ingin saya lakukan. Seperti yang saya katakan dalam pertanyaan, keduanyaengine
dangame
memberikan aset yang ingin saya kirimkan.assets
direktori, memungkinkan Anda untuk melestarikan struktur direktori spesifik game. Adapun Windows symlinks: windows7home.net/how-to-create-symbolic-link-in-windows-7Semut membangun properti "asset.dir" bertanggung jawab untuk menyediakan direktori nama aset. Ini "aset" secara default, tetapi Anda dapat mengubahnya menjadi seperti "../asset". Ini mengubah jalur seluruh direktori, tetapi jika Anda memiliki sumber daya khusus Android, Anda masih dapat menggunakan direktori "res".
sumber
Betapa aneh bahwa jawaban lain di sini tidak menjawab pertanyaan Anda ... mereka semua menganggap Anda hanya menginginkan satu direktori aset, atau merujuk ke res / bukannya aset /.
Saya juga memerlukan lebih dari satu direktori aset.
Saya berkelahi dengan
<aapt>
modul semut selama berjam-jam dan akhirnya menyerah dan menyadari ada cara yang jauh lebih mudah.Saya menyalin
<target name="-package-resources"...>
tag dari file master build yangant
menggunakan,,android_sdk_dir/tools/ant/build.xml
dan menempelkan tag ke proyek sayabuild.xml
(Anda harus menempelkan tag tepat sebelum masterbuild.xml
dimasukkan, seperti komentar di akhir proyek yang dibuat sebelumnyabuild.xml
menjelaskan), kemudian menambahkan bagian kedua untuk sekadar mengekszip
untuk menambahkan aset ke file .ap_ (yang${out.absolute.dir}/${resource.package.file.name}
saat itu ada di file semut):Metode ini memiliki keuntungan bahwa Anda lebih bebas untuk menentukan struktur direktori dari aset Anda di pohon sumber dan di apk (karena Anda dapat
exec
zip
beberapa kali dengan argumen yang berbeda, dan bahkan membungkuszip
dalam skrip yang berjalanzip
dari beberapa direktori saat ini di Anda pohon sumber). Anda juga memiliki kontrol kompresi per file (zip memiliki opsi -0 untuk menekan kompresi) dan tidak perlu menggunakan tag nocompress terbatas per ekstensi hanya.Catatan
ant
xml ini hadir SEBELUM zipalign dalam proses pembuatan semut, jadi kami masih mendapatkan arsip "kompatibel-zip" yang memenuhi kebutuhan pelurusan APK dan Android Java.Dalam kasus saya, saya memiliki aplikasi berbasis NDK dan saya ingin mengakses aset ini hanya dari kode C (di mana setiap jalur apk OK). Jika Anda perlu menggunakan panggilan aset Java Android standar untuk mengakses item ini, saya tidak yakin apakah item tersebut harus berada di jalur di dalam zip yang bernama aset / atau tidak. Jika demikian, Anda dapat menyesuaikan trik di atas dengan
exec
memasukkan skrip yangcd
ke folder hierarki sumber yang relevan, kemudian jalankanzip
.sumber
Dari atas kepala saya, saya tidak berpikir Anda dapat menggunakan apa pun di luar res /, tetapi jika Anda ingin menghindari biaya tambahan untuk siklus dev Anda dengan salinan, Anda dapat mencoba memindahkannya atau bahkan mungkin menggunakan symlink ...
sumber
engine
direktori, yang berada dalam repositori terpisah. Symlinks mungkin dapat diterima tetapi saya tidak yakin mereka akan bekerja dengan baik pada Windows dan kemudian masih ada masalah dengan mereka disinkronkan secara otomatis olehbuild.xml
.Jika Anda menggunakan proyek Maven sebagai lawan dari proyek Ant, Anda dapat dengan mudah mendefinisikan kembali folder res menjadi apa pun yang Anda inginkan melalui opsi konfigurasi resourceDirectory android: apk mojo di plugin android-maven-plugin .
Sedihnya, kecuali jika Anda bersedia bermigrasi dari menggunakan Semut ke menggunakan Maven, jawaban ini mungkin tidak banyak membantu Anda ...
sumber
Jika Anda menggunakan OS unix, Anda dapat menautkannya dengan keras, dan memberi tahu kontrol versi Anda untuk mengabaikannya
res/
direktori.sumber