Android Studio中预编译libbanana.so加载失败问题求助
解决Android Studio预编译SO库加载失败问题
问题原因
你的ace.so在编译时被写入了本地开发环境中libbanana.so的绝对路径,而运行时APK解压后的库路径与该本地路径不匹配,导致系统无法找到依赖的libbanana.so。
解决方案
修改main/cpp/CMakeLists.txt,为导入的banana库添加IMPORTED_NO_SONAME属性,让CMake在链接时只记录库名而非本地路径:
add_library(ace SHARED ace.cpp) add_library(banana SHARED IMPORTED) set_target_properties(banana PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libbanana.so IMPORTED_NO_SONAME ON # 关键配置:不写入本地路径,仅记录库名 ) target_link_libraries(ace banana)
原理说明
IMPORTED_NO_SONAME ON会告诉CMake,该预编译库不使用SONAME(共享对象名称),链接生成的ace.so只会记录依赖库的名称(libbanana.so),而非本地开发路径。- 运行时,Android系统会自动将APK中
lib/${ANDROID_ABI}目录加入系统库搜索路径,因此能正确找到打包进去的libbanana.so。
额外验证步骤
- 清理并重新构建项目:执行
Build > Clean Project,再Build > Rebuild Project,确保新的CMake配置生效。 - 再次检查APK中的
lib/arm64-v8a目录,确认libbanana.so和ace.so都已正确打包。
内容的提问来源于stack exchange,提问作者eve
相关产品推荐
相关产品推荐

