Here’s something that is actually quite nice about Android development: the linking of resources into source code. There is an extra build step that takes all the resource files in your project and generates a class called R which contains references to those files.
For example, you can add icon.png and then use R.drawable.icon in your source code to load it.
I decided to do something similar for my C++ project. I have made a small demo and put it on GitHub.
TestCppLinkResources
A simple example of creating Android-like enumeration of resource files that allows easier referencing from source code.
GitHub project here (Xcode project)
What it does
At build time, it gets a list of all .png and .ogg files in the Resources directory and generates a header file that contains a Resources class with the following structure:
Resources::Images::Count – number of images found Resources::Images::List – a NULL terminated array containing the filenames Resources::Images::* – each individual file is contained as a char* variable
Same goes for Resources::Sounds and any other group of files you choose to include (just edit the script).
Advantages
- Reference checks at compile time, not runtime.
- Autocomplete for resource names in the code editor.
How it works in Xcode
There’s an extra “Run script” build step added to the project which runs LinkResources.sh. That generates a new version of Resources.h. Note that Resources.cpp is also required but it doesn’t change very often so for this example I wrote it by hand.
LinkResources.sh – I admit – is a bit of a mess, but it works and it should be easy to add more file types.