如何阻止Android Studio索引第三方库的头文件
如何阻止Android Studio索引第三方库的头文件
我太懂这种被漫长索引卡死的滋味了——32G内存+5GHz处理器还要等15-20分钟,完全没法顺畅用IDE的功能,太闹心了!标记文件夹为「Excluded」没用的话,咱们可以从**CMake配置(核心解决)和Android Studio IDE设置(补充优化)**两个方向入手,结合你的项目情况给你具体方案:
一、从CMake配置入手(最关键的一步)
Android Studio的索引逻辑高度依赖CMake的配置,如果你把第三方库当作项目源码的一部分引入(比如用add_subdirectory),IDE就会默认去索引它们。咱们要做的是明确告诉CMake和IDE:这些是外部系统级依赖,不需要索引。
1. 调整Eigen的引入方式
你现在用add_subdirectory(eigen)会让CMake把Eigen当作项目源码处理,自然触发索引。改成直接指定头文件路径并加上SYSTEM关键字(标记为系统级依赖):
# 替换原来的add_subdirectory(eigen) if (NOT TARGET Eigen3::Eigen) # 优先用find_package查找Eigen find_package(Eigen3 REQUIRED NO_MODULE) # 如果find_package找不到,手动指定头文件目录(记得加SYSTEM) # target_include_directories(my_library SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/eigen) endif ()
2. 优化OpenCV的引入
你已经用了find_package(OpenCV REQUIRED),只需要给OpenCV的头文件加上SYSTEM标记,就能阻止IDE索引:
set(OpenCV_DIR path/to/opencv-android-sdk/OpenCV-android-sdk/sdk/native/jni) find_package(OpenCV REQUIRED) # 重新设置OpenCV头文件为系统级 target_include_directories(my_library SYSTEM PUBLIC ${OpenCV_INCLUDE_DIRS})
3. Boost的配置优化
同样,给Boost的头文件加上SYSTEM关键字,明确标记为外部依赖:
target_include_directories(my_library SYSTEM PUBLIC ${Boost_DIR}/include )
你已经把Boost作为IMPORTED静态库引入,这很好——IMPORTED库默认不会触发IDE的索引逻辑。
二、Android Studio IDE层面的补充优化
除了CMake,还可以在IDE里做一些设置,进一步减少不必要的索引:
- 打开
File > Settings > Build, Execution, Deployment > Compiler > CMake,在「CMake options」里添加:-DCMAKE_EXPORT_COMPILE_COMMANDS=OFF,关闭编译命令导出,减少IDE的索引依据。 - 打开
File > Settings > Editor > File Types,找到「Ignored Files and Folders」,添加第三方库的文件夹路径(比如eigen/,opencv-android-sdk/,boost/),让IDE直接忽略这些文件夹的文件。 - 如果修改后还是有残留索引,可以尝试
File > Invalidate Caches... > Invalidate and Restart,清空旧的索引缓存,让新配置生效。
三、修改后的完整CMake示例(结合你的原有代码)
# path/to/my_library/CMakeLists.txt add_library(my_library /path/to/stuff.cpp ) if (ANDROID) ### Eigen ### if (NOT TARGET Eigen3::Eigen) find_package(Eigen3 REQUIRED NO_MODULE) # 若find_package失败,启用下面这行手动指定 # target_include_directories(my_library SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/eigen) endif () if (NOT TARGET prmcl) add_subdirectory(prmcl/library) endif () ### OpenCV ### set(OpenCV_DIR path/to/opencv-android-sdk/OpenCV-android-sdk/sdk/native/jni) find_package(OpenCV REQUIRED) target_include_directories(my_library SYSTEM PUBLIC ${OpenCV_INCLUDE_DIRS}) ### Boost ### set(Boost_DIR path/to/boost/${CMAKE_ANDROID_ARCH_ABI}) add_library(boost_math STATIC IMPORTED) set_target_properties(boost_math PROPERTIES IMPORTED_LOCATION ${Boost_DIR}/lib/libboost_math_c99.a) set(Boost_LIBRARIES boost_math) target_include_directories(my_library SYSTEM PUBLIC ${Boost_DIR}/include ) target_link_libraries(my_library ${OpenCV_LIBS} ${Boost_LIBRARIES} Eigen3::Eigen ) endif ()
备注:内容来源于stack exchange,提问作者Roman Stadlhuber
相关产品推荐
相关产品推荐

