summaryrefslogtreecommitdiffstats
path: root/Android/jni
diff options
context:
space:
mode:
authorfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-08-19 18:43:47 +0200
committerfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-08-19 18:43:47 +0200
commit01a4ab77266016278b0c192574718b2e04406161 (patch)
tree0d8c0d527b66f329eb6d446b56f81506a909d7d1 /Android/jni
parentAndroid: Go away gen folder! You're nothing but trouble (for now) (diff)
downloadcuberite-01a4ab77266016278b0c192574718b2e04406161.tar
cuberite-01a4ab77266016278b0c192574718b2e04406161.tar.gz
cuberite-01a4ab77266016278b0c192574718b2e04406161.tar.bz2
cuberite-01a4ab77266016278b0c192574718b2e04406161.tar.lz
cuberite-01a4ab77266016278b0c192574718b2e04406161.tar.xz
cuberite-01a4ab77266016278b0c192574718b2e04406161.tar.zst
cuberite-01a4ab77266016278b0c192574718b2e04406161.zip
Diffstat (limited to 'Android/jni')
-rw-r--r--Android/jni/Android.mk44
-rw-r--r--Android/jni/Application.mk4
-rw-r--r--Android/jni/ToJava.cpp3
-rw-r--r--Android/jni/ToJava.h59
-rw-r--r--Android/jni/app-android.cpp119
5 files changed, 229 insertions, 0 deletions
diff --git a/Android/jni/Android.mk b/Android/jni/Android.mk
new file mode 100644
index 000000000..6fd8d3a14
--- /dev/null
+++ b/Android/jni/Android.mk
@@ -0,0 +1,44 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := mcserver
+
+
+
+LOCAL_SRC_FILES := $(shell find ../lua-5.1.4 ../jsoncpp-src-0.5.0 ../zlib-1.2.7 ../source ../squirrel_3_0_1_stable ../tolua++-1.0.93 ../iniFile ../WebServer '(' -name '*.cpp' -o -name '*.c' ')')
+LOCAL_SRC_FILES := $(filter-out %SquirrelFunctions.cpp %SquirrelBindings.cpp %cPlugin_Squirrel.cpp %cSquirrelCommandBinder.cpp %minigzip.c %lua.c %tolua.c %toluabind.c %LeakFinder.cpp %StackWalker.cpp %example.c,$(LOCAL_SRC_FILES))
+LOCAL_SRC_FILES := $(patsubst %.cpp,../%.cpp,$(LOCAL_SRC_FILES))
+LOCAL_SRC_FILES := $(patsubst %.c,../%.c,$(LOCAL_SRC_FILES))
+LOCAL_SRC_FILES += app-android.cpp ToJava.cpp
+
+LOCAL_CFLAGS := -DANDROID_NDK \
+ -ffast-math \
+ -O3 \
+ -funroll-loops \
+ -mfloat-abi=softfp -mfpu=neon \
+
+
+LOCAL_STATIC_LIBRARIES := cpufeatures
+
+LOCAL_C_INCLUDES := ../source \
+ ../source/md5 \
+ ../WebServer \
+ ../source/packets \
+ ../source/items \
+ ../source/blocks \
+ ../tolua++-1.0.93/src/lib \
+ ../lua-5.1.4/src \
+ ../zlib-1.2.7 \
+ ../iniFile \
+ ../tolua++-1.0.93/include \
+ ../jsoncpp-src-0.5.0/include \
+ ../jsoncpp-src-0.5.0/src/lib_json \
+ ../squirrel_3_0_1_stable/include \
+ ../squirrel_3_0_1_stable \
+ ../squirrel_3_0_1_stable/sqrat \
+
+
+LOCAL_LDLIBS := -ldl -llog
+
+include $(BUILD_SHARED_LIBRARY)
+$(call import-module,cpufeatures)
diff --git a/Android/jni/Application.mk b/Android/jni/Application.mk
new file mode 100644
index 000000000..c68dfe204
--- /dev/null
+++ b/Android/jni/Application.mk
@@ -0,0 +1,4 @@
+# Build both ARMv5TE and ARMv7-A machine code.
+APP_MODULES := mcserver
+# APP_ABI := armeabi armeabi-v7a
+APP_STL := stlport_static \ No newline at end of file
diff --git a/Android/jni/ToJava.cpp b/Android/jni/ToJava.cpp
new file mode 100644
index 000000000..10d4e84a0
--- /dev/null
+++ b/Android/jni/ToJava.cpp
@@ -0,0 +1,3 @@
+#include "Globals.h"
+
+#include "ToJava.h" \ No newline at end of file
diff --git a/Android/jni/ToJava.h b/Android/jni/ToJava.h
new file mode 100644
index 000000000..bc10f01e3
--- /dev/null
+++ b/Android/jni/ToJava.h
@@ -0,0 +1,59 @@
+#pragma once
+
+#include <jni.h>
+#include <android/log.h>
+extern JNIEnv* g_CurrentJNIEnv;
+extern JavaVM* g_JavaVM;
+extern jobject g_JavaThread;
+//extern jobject g_JavaActivity;
+
+//__android_log_vprint(ANDROID_LOG_ERROR,"MCServer", a_Format, argList);
+
+static void CallJavaFunction_Void_String( jobject a_Object, const std::string & a_FunctionName, const std::string & a_StringParam )
+{
+ JNIEnv * oldEnv = g_CurrentJNIEnv;
+ int status = g_JavaVM->AttachCurrentThread(&g_CurrentJNIEnv, NULL);
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "STATUS: %i old: %p new: %p", status, oldEnv, g_CurrentJNIEnv );
+ jstring str = g_CurrentJNIEnv->NewStringUTF( a_StringParam.c_str() );
+
+
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "JNIEnv: %i Object: %i", g_CurrentJNIEnv, a_Object );
+ jclass cls = g_CurrentJNIEnv->GetObjectClass( a_Object );
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jclass: %i", cls );
+ jmethodID mid = g_CurrentJNIEnv->GetMethodID( cls, a_FunctionName.c_str(), "(Ljava/lang/String;)V"); // void a_FunctionName( String )
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jmethodID: %i", mid );
+ if (mid != 0)
+ {
+
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() );
+ g_CurrentJNIEnv->CallVoidMethod( a_Object, mid, str );
+ }
+ else
+ {
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "It was 0, derp" );
+ }
+
+ if( oldEnv != g_CurrentJNIEnv )
+ {
+ g_JavaVM->DetachCurrentThread();
+ }
+}
+
+
+static void CallJavaFunction_Void_Void( jobject a_Object, const std::string & a_FunctionName )
+{
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "JNIEnv: %i Object: %i", g_CurrentJNIEnv, a_Object );
+ jclass cls = g_CurrentJNIEnv->GetObjectClass( a_Object );
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jclass: %i", cls );
+ jmethodID mid = g_CurrentJNIEnv->GetMethodID( cls, a_FunctionName.c_str(), "()V"); // void a_FunctionName( String )
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "jmethodID: %i", mid );
+ if (mid != 0)
+ {
+ //__android_log_print(ANDROID_LOG_ERROR,"MCServer", "Going to call right NOW! %s", a_FunctionName.c_str() );
+ g_CurrentJNIEnv->CallVoidMethod( a_Object, mid );
+ }
+ else
+ {
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "It was 0, derp" );
+ }
+} \ No newline at end of file
diff --git a/Android/jni/app-android.cpp b/Android/jni/app-android.cpp
new file mode 100644
index 000000000..a6fb1baf2
--- /dev/null
+++ b/Android/jni/app-android.cpp
@@ -0,0 +1,119 @@
+#include "Globals.h"
+
+#include <jni.h>
+#include <sys/time.h>
+#include <time.h>
+#include <stdint.h>
+
+#include <stdlib.h>
+#include <math.h>
+#include <float.h>
+#include <assert.h>
+
+#include "cCriticalSection.h"
+#include "cRoot.h"
+#include "cMakeDir.h"
+#include "ToJava.h"
+
+#include <android/log.h>
+
+cCriticalSection g_CriticalSection;
+
+JNIEnv* g_CurrentJNIEnv = 0;
+jobject g_JavaThread = 0;
+JavaVM* g_JavaVM = 0;
+//jobject g_JavaActivity = 0;
+
+cRoot * pRoot = NULL;
+
+
+class cMainThread :
+ public cIsThread
+{
+public:
+ cMainThread() :
+ cIsThread("cMainThread")
+ {
+ //Start();
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "cMainThread");
+ }
+
+ void Stop(void)
+ {
+ m_ShouldTerminate = true;
+ Wait();
+ }
+
+protected:
+
+ virtual void Execute(void) override
+ {
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "Execute");
+ pRoot = new cRoot();
+ pRoot->Start();
+ delete pRoot;
+ }
+
+} ;
+
+cMainThread * pMainThread = NULL;
+
+jint JNI_OnLoad(JavaVM* vm, void* reserved)
+{
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "JNI_OnLoad JNI_OnLoad JNI_OnLoad JNI_OnLoad");
+ g_JavaVM = vm;
+ return JNI_VERSION_1_4;
+}
+
+/* Called when program/activity is created */
+extern "C" void Java_com_mcserver_MCServerActivity_NativeOnCreate( JNIEnv* env, jobject thiz )
+{
+ g_CriticalSection.Lock();
+ g_CurrentJNIEnv = env;
+ g_JavaThread = thiz;
+ //if( !cLogger::GetSingletonPtr() ) new cLogger();
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "Logging from C++!");
+ g_CriticalSection.Unlock();
+
+ //CallJavaFunction_Void_Void(g_JavaActivity, "TestTest" );
+ //CallJavaFunction_Void_String(g_JavaThread, "AddToLog", "herpderpderp!!" );
+
+ mkdir("/sdcard/mcserver", S_IRWXU | S_IRWXG | S_IRWXO);
+
+// __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "Before mainthread");
+// pMainThread = new cMainThread();
+// pMainThread->Start();
+// __android_log_print(ANDROID_LOG_ERROR,"MCServer", "%s", "AFter mainthread");
+
+ pRoot = new cRoot();
+ pRoot->Start();
+ delete pRoot; pRoot = NULL;
+}
+
+
+
+
+
+extern "C" void Java_com_mcserver_MCServerActivity_NativeCleanUp( JNIEnv* env, jobject thiz )
+{
+ g_CriticalSection.Lock();
+ g_CurrentJNIEnv = env;
+ g_JavaThread = thiz;
+ g_CriticalSection.Unlock();
+
+ __android_log_print(ANDROID_LOG_ERROR,"MCServer", "pRoot: %p", pRoot);
+ if( pRoot != NULL )
+ {
+ pRoot->ServerCommand("stop");
+ }
+// pMainThread->Stop();
+// delete pMainThread; pMainThread = NULL;
+}
+
+
+
+
+extern "C" jboolean Java_com_mcserver_MCServerActivity_NativeIsServerRunning( JNIEnv* env, jobject thiz )
+{
+ return pRoot != NULL;
+} \ No newline at end of file