1. 程式人生 > >NDK開發中小技巧

NDK開發中小技巧

  1. LOG日誌工具類 將執行時判斷是否debug 放入AndroidLog.h中判斷,在AndroidLog.h中修改即可區分是否列印日誌

#ifndef MYMUSIC_ANDROIDLOG_H
#define MYMUSIC_ANDROIDLOG_H


#include "android/log.h"

#define LOG_DEBUG true //日誌開關,true為開,其它為關
#define TAG "jniLib"//標籤

#define LOGD(FORMAT,...) if(LOG_DEBUG) __android_log_print(ANDROID_LOG_DEBUG,TAG,FORMAT,##__VA_ARGS__);
#define LOGE(FORMAT,...) if(LOG_DEBUG) __android_log_print(ANDROID_LOG_ERROR,TAG,FORMAT,##__VA_ARGS__); #endif //MYMUSIC_ANDROIDLOG_H
  1. CMakelists 中 使用GLOB關鍵字 把cpp 資料夾下的所有c 和c++檔案都編譯,省卻了每新增一個c或者cpp檔案就需要在CMakelists中新增.

#需要編譯的檔案 組
file(GLOB my_source src/main/cpp/*.cpp src/main/cpp/*.c)
include_directories(src/main/cpp/include)
add_library( # Sets the name of the library.
        native-lib
        SHARED
        ${my_source})
  1. 假如出現在標頭檔案不讓賦值為NULL的情況.
    xyyyplayer/src/main/cpp/XYCallJava.h:16:20: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
    JavaVM *javaVM = NULL

解決方式 在CMakelist中 新增下面程式碼 使其支援c++11

# cmakelists 設定c++11
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11"
COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") elseif(COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") else() message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") endif() # cmakelists 設定c++11 -----
  1. null