diff options
-rw-r--r-- | platform/android/config.cmake | 2 | ||||
-rwxr-xr-x | platform/android/src/jni.cpp | 4 | ||||
-rw-r--r-- | platform/android/src/logger.cpp | 33 | ||||
-rw-r--r-- | platform/android/src/logger.hpp | 24 | ||||
-rw-r--r-- | platform/android/src/logging_android.cpp | 29 |
5 files changed, 67 insertions, 25 deletions
diff --git a/platform/android/config.cmake b/platform/android/config.cmake index fa26987e5a..de83372373 100644 --- a/platform/android/config.cmake +++ b/platform/android/config.cmake @@ -43,6 +43,8 @@ macro(mbgl_platform_core) PRIVATE platform/android/src/text/local_glyph_rasterizer_jni.hpp PRIVATE platform/android/src/logging_android.cpp PRIVATE platform/android/src/thread.cpp + PRIVATE platform/android/src/logger.cpp + PRIVATE platform/android/src/logger.hpp PRIVATE platform/default/string_stdlib.cpp PRIVATE platform/default/bidi.cpp PRIVATE platform/default/thread_local.cpp diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index beb2c14eb3..a6fae08dc5 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -49,6 +49,7 @@ #include "text/collator_jni.hpp" #include "text/local_glyph_rasterizer_jni.hpp" #include "java/lang.hpp" +#include "logger.hpp" namespace mbgl { namespace android { @@ -191,6 +192,9 @@ void registerNatives(JavaVM *vm) { LocalGlyphRasterizer::registerNative(env); Locale::registerNative(env); Collator::registerNative(env); + + // log + Logger::registerNative(env); } } // namespace android diff --git a/platform/android/src/logger.cpp b/platform/android/src/logger.cpp new file mode 100644 index 0000000000..a0d36fb2d4 --- /dev/null +++ b/platform/android/src/logger.cpp @@ -0,0 +1,33 @@ +#include "logger.hpp" +#include "java_types.hpp" + +namespace mbgl { +namespace android { + +void Logger::registerNative(jni::JNIEnv& env) { + _class = *jni::Class<Logger>::Find(env).NewGlobalRef(env).release(); +} + +jni::Class<Logger> Logger::_class; + +void Logger::log(jni::JNIEnv& env, EventSeverity severity, const std::string &msg) { + auto message = jni::Make<jni::String>(env, msg); + using Signature = void(jni::String); + + if(severity == EventSeverity::Debug){ + auto method = _class.GetStaticMethod<Signature>(env, "d"); + _class.Call(env, method, message); + }else if(severity == EventSeverity::Info){ + auto method = _class.GetStaticMethod<Signature>(env, "i"); + _class.Call(env, method, message); + }else if(severity == EventSeverity::Warning){ + auto method = _class.GetStaticMethod<Signature>(env, "w"); + _class.Call(env, method, message); + }else{ + auto method = _class.GetStaticMethod<Signature>(env, "e"); + _class.Call(env, method, message); + } +} + +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/logger.hpp b/platform/android/src/logger.hpp new file mode 100644 index 0000000000..d4805fccd8 --- /dev/null +++ b/platform/android/src/logger.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include <mbgl/util/event.hpp> +#include <jni/jni.hpp> +#include "bitmap.hpp" + +namespace mbgl { +namespace android { + +class Logger { +public: + static constexpr auto Name() { + return "com/mapbox/mapboxsdk/log/Logger"; + }; + static void registerNative(jni::JNIEnv&); + + static void log(jni::JNIEnv&, EventSeverity severity, const std::string &msg); + +private: + static jni::Class<Logger> _class; +}; + +} // namespace android +} // namespace mbgl
\ No newline at end of file diff --git a/platform/android/src/logging_android.cpp b/platform/android/src/logging_android.cpp index 2e025c059f..c92c613a21 100644 --- a/platform/android/src/logging_android.cpp +++ b/platform/android/src/logging_android.cpp @@ -1,34 +1,13 @@ #include <mbgl/util/logging.hpp> -#include <android/log.h> +#include "logger.hpp" +#include "attach_env.hpp" namespace mbgl { -namespace { - -int severityToPriority(EventSeverity severity) { - switch(severity) { - case EventSeverity::Debug: - return ANDROID_LOG_DEBUG; - - case EventSeverity::Info: - return ANDROID_LOG_INFO; - - case EventSeverity::Warning: - return ANDROID_LOG_WARN; - - case EventSeverity::Error: - return ANDROID_LOG_ERROR; - - default: - return ANDROID_LOG_VERBOSE; - } -} - -} // namespace - void Log::platformRecord(EventSeverity severity, const std::string &msg) { - __android_log_print(severityToPriority(severity), "mbgl", "%s", msg.c_str()); + auto env{ android::AttachEnv() }; + android::Logger::log(*env, severity, msg); } } |