Android打包,通过命令行来控制C++代码的宏

参数传递流程

Android打包,通过命令行来控制C++代码的宏_第1张图片
image.png

实现

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

你可能感兴趣的:(Android打包,通过命令行来控制C++代码的宏)