Los problemas incluyen archivos de cabecera de diferentes directorios [no problemas de ruta]

Descripción específica del problema

he olvidado C++ y c ómo usarlo correctamente, pero ahora tengo que lidiar con una clase y estoy un poco atascado.
Así que escribí un juego para iOS con cocos 2dx, pero usé la Unión Lua en lugar de C++.
Pero... Sin embargo, necesito escribir algo que use jni, así que... C/C++ estamos aquí.
Tengo archivos de cabecera y CPP como estos:
Deviceinfo Android. H:
#include <jni.h>
#include "../libs/cocos2dx/platform/android/jni/JniHelper.h"

extern "C" {

    const char* getAndroidDeviceId();

}
Deviceinfo Android. CPP:
#ifndef _DEVICE_INFO_ANDROID_
#define _DEVICE_INFO_ANDROID_

#include "DeviceInfoAndroid.h"
#include <string>

extern "C" {

const char *getAndroidDeviceId() {
    JniMethodInfo t;
    const char* retVal;
    if (JniHelper::getStaticMethodInfo(t
            , "org/cocos2dx/lib/Cocos2dxActivity" //org/cocos2dx/lib/Cocos2dxActivity
            , "getIMEI"
            , "()Ljava/lang/String;")) {
        jstring jstr;
        jstr = (jstring);
        t.env->CallStaticObjectMethod(t.classID, t.methodID);
        char *cstr;
        cstr = (char *) t.env->GetStringUTFChars(jstr, 0);
        std::string ret(cstr);
        t.env->ReleaseStringUTFChars(jstr, cstr);
        t.env->DeleteLocalRef(jstr);
        retVal = ret.c_str();
    }
    return retVal;
}
}

#endif
Sé que toda esta basura ifndef no es necesaria porque la uso en un solo lugar, y sólo en un lugar, para que no haya dependencias circulares, pero la agrego (no cambia cuando la elijo).
Así que... El camino a jni Helper. El archivo H es correcto. Se ve así:
Jni Helper. H
#ifndef __ANDROID_JNI_HELPER_H__
#define __ANDROID_JNI_HELPER_H__

#include <jni.h>
#include <string>
#include "CCPlatformMacros.h"

namespace cocos2d {

    typedef struct JniMethodInfo_
    {
        JNIEnv *    env;
        jclass      classID;
        jmethodID   methodID;
    } JniMethodInfo;

    class CC_DLL JniHelper
    {
    public:
        static JavaVM* getJavaVM();
        static void setJavaVM(JavaVM *javaVM);
        static jclass getClassID(const char *className, JNIEnv *env=0);
        static bool getStaticMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);
        static bool getMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);
        static std::string jstring2string(jstring str);

    private:
        static JavaVM *m_psJavaVM;
    };
}

#endif // __ANDROID_JNI_HELPER_H__
Sí. Ahora... Utilizo un makefile para construirlo (esto es parte de un proceso de construcción más grande, pero para este archivo en particular, se ve así (está en el mismo directorio que los archivos. H y. CPP que pegué aquí).
Android. MK
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := game_logic

LOCAL_SRC_FILES := \
AppDelegate.cpp \
DeviceInfoAndroid.cpp \
DeviceInfo.cpp \
../libs/lua/cocos2dx_support/LuaEngineImpl.cpp \
../libs/lua/cocos2dx_support/Cocos2dxLuaLoader.cpp \
../libs/lua/cocos2dx_support/LuaCocos2d.cpp \
../libs/lua/cocos2dx_support/LuaEngine.cpp \
../libs/lua/CocosDenshion_support/LuaSimpleAudioEngine.cpp \
../libs/lua/exts/luallthread/llthreads.c \
../libs/lua/exts/luasocket/auxiliar.c \
../libs/lua/exts/luasocket/buffer.c \
../libs/lua/exts/luasocket/except.c \
../libs/lua/exts/luasocket/inet.c \
../libs/lua/exts/luasocket/io.c \
../libs/lua/exts/luasocket/luasocket.c \
../libs/lua/exts/luasocket/mime.c \
../libs/lua/exts/luasocket/options.c \
../libs/lua/exts/luasocket/select.c \
../libs/lua/exts/luasocket/tcp.c \
../libs/lua/exts/luasocket/timeout.c \
../libs/lua/exts/luasocket/udp.c \
../libs/lua/exts/luasocket/unix.c \
../libs/lua/exts/luasocket/usocket.c \
../libs/lua/exts/lualoadexts.c \
../libs/lua/exts/luasocketscripts.c 

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libs/cocos2dx \
                    $(LOCAL_PATH)/../libs/cocos2dx/platform \
                    $(LOCAL_PATH)/../libs/cocos2dx/include \
                    $(LOCAL_PATH)/../libs/cocos2dx/lua_support \
                    $(LOCAL_PATH)/../libs/CocosDenshion/include \
                    $(LOCAL_PATH)/../libs/lua/lua \
                    $(LOCAL_PATH)/../libs/lua/tolua \
                    $(LOCAL_PATH)/../libs/lua/cocos2dx_support \
                    $(LOCAL_PATH)/../libs/lua/CocosDenshion_support \
    $(LOCAL_PATH)/../libs/lua/exts \
    $(LOCAL_PATH)/../libs/lua/exts/luallthread \
    $(LOCAL_PATH)/../libs/lua/exts/luasocket \
    $(LOCAL_PATH)/../libs/cocos2x/platform/android/jni \

LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/../Android/libs/$(TARGET_ARCH_ABI)) \
        -L$(call host-path, $(LOCAL_PATH)/../libs/cocos2dx/platform/third_party/android/libraries/$(TARGET_ARCH_ABI)) -lcurl \
        -lcocos2d \
        -lcocosdenshion \
        -llua

include $(BUILD_SHARED_LIBRARY)
Como puede ver, he añadido la ruta a jnihelper. Envía el archivo h a local C includes.
Traté de borrar la ruta usando sólo "jnihelper.h", pero lanzó un error indicando que el archivo no existe.
Los errores que encontré en el proceso de construcción fueron:
Compile++ thumb  : game_logic <= DeviceInfoAndroid.cpp
jni/../../Classes/DeviceInfoAndroid.cpp: In function 'const char* getAndroidDeviceId()':
jni/../../Classes/DeviceInfoAndroid.cpp:10: error: 'JniMethodInfo' was not declared in this scope
jni/../../Classes/DeviceInfoAndroid.cpp:10: error: expected ';' before 't'
jni/../../Classes/DeviceInfoAndroid.cpp:12: error: 'JniHelper' has not been declared
jni/../../Classes/DeviceInfoAndroid.cpp:12: error: 't' was not declared in this scope
jni/../../Classes/DeviceInfoAndroid.cpp:17: error: expected primary-expression before ')' token
make: *** [obj/local/armeabi/objs-debug/game_logic/DeviceInfoAndroid.o] Error 1
¿Alguna sugerencia?
¿Qué hice mal?
Sé que tengo mucho que aprender para escribir c ódigo en C++, pero como dije... No voy a escribir en C++, sólo necesito crear unas pocas líneas de código para cada tipo de dispositivo soportado en el juego. He completado una mezcla de objective - C y c++ para obtener el id del dispositivo iOs.
Editar:
Al eliminar algunos de mis comentarios, he eliminado con éxito la inclusión de deviceinfo Android. CPP. He corregido el Código anterior. Lo siento mucho. Después de editar, aquí está mi respuesta de actualización:
Jnimethodinfo existe en el espacio de nombres cocos 2D, por lo que debe referirse a:

La mejor manera de manejarlo para mí

Lo mismo ocurre con jni Helper:cocos2d::JniMethodInfo t;Espera.
Respuesta antes de editar: (ya no relevante, pero guardado aquí para referencia)
Es necesario mover include desde el archivo ab initio al archivo CPP. Deviceinfo Android. H no se incluye automáticamente en deviceinfo Android. CPP. Debe incluirlo manualmente.