Posts

Showing posts from May, 2012

How to use Makefile wildcards/globbing on Android NDK JNI

Here is a short little thing I ran into a few days ago.  Many of you may know how a normal Android Makefile looks, something like this: LOCAL_PATH := $( call  my-dir) MY_PATH := $(LOCAL_PATH) TARGET_ABI       := android-4-armeabi include   $(CLEAR_VARS) LOCAL_MODULE     := libmain LOCAL_C_INCLUDES := \    $(LOCAL_PATH) /Box2D \    $(LOCAL_PATH) /libpng \    $(LOCAL_PATH) /libzip \ LOCAL_CFLAGS := \    -g3 \    -ggdb \    -gstabs+ \    -DANDROID_NDK \ # Look here! LOCAL_SRC_FILES := \   main.cpp    \   cool_file.cpp    \    LOCAL_LDLIBS := -lGLESv1_CM -llog -lz LOCAL_STATIC_LIBRARIES := libBox2D libzip libpng include   $(BUILD_SHARED_LIBRARY) Ok, notice the section  LOCAL_SRC_FILES  .  If you have many files in your project this could grow huge.  O(N) where N is the number of files.  I am way to lazy to type all that (though vim does this with :read !ls jni/, but still). I want a better solution. Makefile Wildcards: Ah, remember Makefile wildcards

Development on Android NDK Tutorial - Gluing C++ Native Code to Java

Image
Too busy to draw this time.. for now here's a picture of an Android Toy Ok, in this post I am going to talk about how to join C++ native code to a thin Android Java code layer.  I am not going to be doing all native code, as I think the easiest route is to use the Android higher level convenience SDK for loading resources/file I/O, setting up OpenGL context and other state management. I won't be using any IDEs or anything else to complicate things.  This is as easy as it can get, you get the source and type "make" (I assume you are on a system with GNU make, and your environment is setup correctly.  Linux is easiest, but it should run fine on ANY system that can run Make, even Windows!). So the code will be structured like this: -----------------------------------  Android SDK OS Layer code -----------------------------------   Java App Thin Layer to Android OS -----------------------------------   Native C++ code called by Java   for each fra