So, I've successfully ported my game framework to Android. It currently runs on Windows, Mac, Linux, and iOS. Android has been added to the list!
It's been an interesting adventure working with NDK, which I need to compile all the C/C++ code into a .so shared library. Suppose I make a change in the C code. Here's the steps to actually see it take effect on the device:
- Compile the library (from the command line, using ndk-build.
- Copy the library into the project into the Eclipse project, if it isn't being built there already.
cp -r libs/* /cygdrive/c/Users/Matt/workspace/MyProject/libs
- Eclipse project "Build Clean", click OK. For some reason, updating the .so files does not cause them to be transferred to the device.
- Click "Debug". Wait about 8-20 seconds, depending on if the app is already running and needs to be terminated or not.
App is now running!
What if there's a crash in the library? You have to use the addr2line utility on the unstripped version of your library. [ Reference ]
/cygdrive/c/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-addr2line.exe -C -f -e obj/local/armeabi/libmylib.so
- Type in the pc value specified in the stack trace.
This is incredibly tedious. That's about it, really. XCode 4.2 might be pretty sluggish these days, but at least the build process and simulator run at acceptable speeds, at least compared to Android.
I can really understand the popularity of the Corona engine now. Visual Studio still remains my preferred tool for main development work, and this experience has taught me to write games in such a way that the porting process is as quick and painless as possible.
Can anyone help me out with these?
- Why does copying files into my workspace not cause them to be packed into the apk file without a clean build? I would think that Eclipse would notice that the .so files have been modified.
- How do I move the compile+copy step into a build phase in Eclipse?
- Having it print the output somewhere in Eclipse and fail if there's a compilation error is even more handy.