Android打包,通過命令行來控制C++代碼的宏 參數傳遞流程 實現

參數傳遞流程

實現

gradle對命令行參數的響應

Android默認的C++構建方式

在默認的Android構建方式時,是支持debug類型,構建debug包時:./gradlew assembleDebug

對於C++構建配置如下:

android {
    buildTypes {
        release {
            minifyEnabled false
        }
        debug {
            externalNativeBuild {
                cmake{
                    arguments '-DCMAKE_BUILD_TYPE=DEBUG'
                }
            }
        }
    }
    externalNativeBuild {
        cmake {
            path "./src/CMakeLists.txt"
        }
    }
    packagingOptions {
        //        exclude 'lib/*/libc++_shared.so'
        doNotStrip "**.so"
    }
}

只需在debug類型下,加入自定義的一個參數CMAKE_BUILD_TYPE,那麼這個參數就能傳入CMakeList。

自定義的打包任務

自定義的,不符合Android默認規則的gradle任務,需要自定義一個參數:
假設如下:./gradlew assembleRelease -PcppDebug

那麼gradle如下:

def cppDebug = project.hasProperty('cppDebug')

// 自定義C++構建時,傳入參數
arguments '-DCMAKE_BUILD_TYPE=' + (cppDebug ? 'DEBUG' : 'RELEASE')

CMakeList接受參數,生成代碼內的宏

# debugif (CMAKE_BUILD_TYPE STREQUAL DEBUG)
    message('當前編譯開啓了DEBUG宏!!!')
    add_definitions(-DDEBUG)
endif ()

C++代碼文件內使用宏

#ifdef DEBUG
// 配置了debug,就會輸出日誌
#pragma message("Warning:debug編譯時!")
#endif
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章