打log¶
前面我们知道如何使用将字符串传入和传出本地(native)方法。
本文讲述如何在NDK中使用log。
打log是比较常见的一种调试手段。借助log我们可以了解应用运行的状态,获取到一些感兴趣的信息。
一般我们会用android.util.Log类来打log。比如Log.d(TAG, "RustFisher");
也可以直接在C++代码中使用log。
回头看字符串例子示例工程中的reverseString
方法。
首先在CMakeLists.txt
中,把log相关库log-lib
引入。
第一步是find_library
,填入log-lib
。
最后是在target_link_libraries
中,把log-lib
和连接到我们的模块fisher-pole
。
find_library( # Defines the name of the path variable that stores the
# location of the NDK library.
log-lib
# Specifies the name of the NDK library that
# CMake needs to locate.
log )
add_library( # Specifies the name of the library.
fisher-pole
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
tom.cpp jerry.cpp baseparam.cpp)
target_link_libraries( # Specifies the target library.
fisher-pole
# Links the log library to the target library.
${log-lib} )
修改完CMakeLists.txt
后,直接转向cpp文件。
文件添加引用和声明。
调用int __android_log_print(int prio, const char* tag, const char* fmt, ...)
方法打log。
以jerry.cpp
为例,在我们感兴趣的地方打上log
extern "C"
JNIEXPORT jstring JNICALL
Java_com_rustfisher_fishpole_worker_Jerry_reverseString(JNIEnv *env, jobject thiz, jstring input) {
const char *inputPtr = env->GetStringUTFChars(input, NULL);
int len1 = env->GetStringLength(input);
int len2 = strlen(inputPtr);
__android_log_print(ANDROID_LOG_INFO, tag, "[reverseString] input: %s", inputPtr);
__android_log_print(ANDROID_LOG_INFO, tag, "[reverseString] GetStringLength: %d, strlen: %d",
len1, len2);
char *out = new char[len1]{};
__android_log_print(ANDROID_LOG_INFO, tag, "[reverseString] origin out: %s", out);
for (int i = 0; i < len1; i++) {
out[i] = inputPtr[len1 - i - 1];
}
__android_log_print(ANDROID_LOG_INFO, tag, "[reverseString] result: %s", out);
jstring res = env->NewStringUTF(out);
delete[] out;
env->ReleaseStringChars(input, reinterpret_cast<const jchar *>(inputPtr));
return res;
}
运行起来可以看到结果。
代码在这 https://gitee.com/rustfisher/AndroidTutorial
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~