一、CMakeLists.txt中添加CMake编译参数和C++编译器参数1、设置构建类型为Release,这将关闭debug调试信息set(CMAKE_BUILD_TYPE Release)2、-s 剥离符号表信息set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s")二、externalnativeoptions配置编译参数和编译器参数模块级build-profile.json5中externalNativeOptions参数是NDK工程C/C++文件编译配置的入口,可以通过path指定CMake脚本路径、arguments配置CMake参数、cppFlags配置C++编译器参数、abiFilters配置编译架构等。"externalNativeOptions": { "path": "./src/main/cpp/CMakeLists.txt", "arguments": "-DCMAKE_BUILD_TYPE=Release", "cppFlags": "-s", }
优化编译选项使用优化编译标志:在CMakeLists.txt或其他构建脚本中,设置编译器标志以优化生成的so文件。常用的标志包括-Os(优化大小),这可以在保证一定性能的同时减小文件大小。例如:cmakeset(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Os") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os")去除调试信息:通过去掉-g选项来去除调试信息,这可以显著减小so文件的大小。cmakeset(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")精简代码和资源检查并删除未使用的代码:利用工具(如nm、objdump)检查so文件中是否包含未使用的函数或变量,并考虑从源代码中删除这些部分。优化C++特性使用:避免使用不必要的C++高级特性,如RTTI(运行时类型信息)和异常处理,可以通过添加编译选项-fno-rtti和-fno-exceptions来禁用这些特性。控制符号的可见性隐藏非公共符号:增加编译选项-fvisibility=hidden来隐藏非公共符号,这有助于减小so文件的大小,因为链接器可以移除那些未被外部引用的符号。cmakeset(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fvisibility=hidden") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fvisibility=hidden")使用gc-sections特性去除未使用的节:在编译和链接时,使用-ffunction-sections和-fdata-sections选项,并在链接时添加-Wl,--gc-sections选项,这可以去除未使用的函数和数据节,从而减小so文件的大小。cmakeset(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ffunction-sections -fdata-sections") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffunction-sections -fdata-sections") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")压缩so库配置so压缩选项:在鸿蒙开发中,可以通过修改应用模块配置文件(如module.json5)中的compressNativeLibs字段,将值配置为true,来启用so库的压缩。这样,在打包应用时,DevEco Studio会将so库文件以压缩形式打包到包中,从而减小应用包大小。使用动态共享包HSP在多包场景下共享代码和资源:如果应用包含多个包(HAP、HSP),可以使用HSP(Harmony Shared Package)动态共享包在多个包之间共享代码和资源,从而避免重复拷贝,减小应用包大小。
一、CMakeLists.txt中添加CMake编译参数和C++编译器参数
1、设置构建类型为Release,这将关闭debug调试信息
set(CMAKE_BUILD_TYPE Release)
2、-s 剥离符号表信息
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s")
二、externalnativeoptions配置编译参数和编译器参数
模块级build-profile.json5中externalNativeOptions参数是NDK工程C/C++文件编译配置的入口,可以通过path指定CMake脚本路径、arguments配置CMake参数、cppFlags配置C++编译器参数、abiFilters配置编译架构等。
"externalNativeOptions": {
"path": "./src/main/cpp/CMakeLists.txt",
"arguments": "-DCMAKE_BUILD_TYPE=Release",
"cppFlags": "-s",
}