JNI 可變印刷

2021-09-07 01:56:02 字數 2499 閱讀 6262

1.包log.h

#ifndef __multi_trace_h__

#define __multi_trace_h__

#ifdef android_ndk_build

#define log_tag "native ndk info"

#include // only use in ndk

#define loge(...) ((void)__android_log_print(android_log_error, log_tag, __va_args__))

#define logd(...) ((void)__android_log_print(android_log_debug, log_tag, __va_args__))

#define logi(...) ((void)__android_log_print(android_log_info, log_tag, __va_args__))

#define logw(...) ((void)__android_log_print(android_log_warn, log_tag, __va_args__))

#elif defined android_source_build

#define log_tag "native src info"

extern "c"

#define loge(...) log(log_error, log_tag, __va_args__)

#define logd(...) log(log_debug, log_tag, __va_args__)

#define logi(...) log(log_info, log_tag, __va_args__)

#define logw(...) log(log_warn, log_tag, __va_args__)

#elif defined ios_platform_build

#define loge printf

#define logd printf

#define logi printf

#define logw printf

#elif defined wp_platform_build

#define log_tag "native windows phone"

#define log_error "error"

#define log_debug "debug"

#define log_infor "infor"

#define log_warn "warn"

void log(const char* status, const char* tag, const char* format, ...);

#define loge(...) log(log_error, log_tag, __va_args__)

#define logd(...) log(log_debug, log_tag, __va_args__)

#define logi(...) log(log_info, log_tag, __va_args__)

#define logw(...) log(log_warn, log_tag, __va_args__)

#else

#define loge printf

#define logd printf

#define logi printf

#define logw printf

#endif

#endif

2.在 android.mk 中配置

local_path := $(call my-dir)    // 設定為當前資料夾

include $(clear_vars)    // 清空變數

local_module    := apkpatchlibrary  // 終於生成的 .so 檔案 會是次名錢夾 lib (如這個名為 lib***, 生成的.so檔案包名就是此名)

local_cflags =  -dandroid_ndk_build -d__stdc_format_macros -d__stdc_int64__     // 設定這句相當於每乙個c/c++檔案裡宣告了 ***xx(-d***xx) 

local_cxxflags := 

local_c_includes := $(local_path)

local_src_files := com_lib_utils_patch.c   // 編譯的c/c++檔案

local_ldlibs := -lz -llog  // 須要加上 這個日誌才會列印出來,-l 是固定宣告,(如:-lz標示載入系統 z.so包。 -llog標示載入系統 log.so包)

include $(build_shared_library)   // 設定宣告 動態庫

3.列印日誌。請看樣例:

這樣就能夠列印出 old, new。patch 這三個引數(變數)的值該。

jni之jni與jna的比較

j a開發過程中會遇到需要呼叫c c 動態庫 windows平台的dll和linux平台的so 的情況,可以使用jni或者jna技術。jna基於jni技術開發,主要在上層作了型別自動轉換的封裝,讓開發人員極易使用,無需jni那樣的繁雜的介面層開發。但是,jni的呼叫效率要比jna高得多,如果乙個操作...

JNI崩潰除錯

jni崩潰了,系統日誌會列印堆疊資訊,所以第一步就是取日誌 adb shell logcat v threadtime d log.txt 然後找到日誌裡面的關鍵字backtrace例如我的日誌是這樣的 12 04 06 14 38.362 3773 3773 f debug backtrace 1...

印刷微電子

印刷微電子就是基於印刷原理的電子學。傳統微電子學從單晶矽襯底材料的製備到在矽單晶體上形成電晶體與互連線所需要的薄膜沉積 光刻 刻蝕 封裝等,所涉及的工藝程式多達數百項。並且由於傳統微電子的加工裝置價值昂貴,傳統的微電子行業被一些大公司壟斷。反觀傳統的印刷行業工藝簡單,加工裝置便宜。加之pcb tft...