ndk报错记录

  1. CMake was unable to find a build program corresponding to “Ninja”. CMAKE_MAK

解决办法:可能是由于android studio版本高,与gradle版本低导致不匹配,升级gradle版本就行

  1. 已经配置 abiFilters ‘armeabi-v7a’ 打出的apk运行后说找不到对应的so文件,导致崩溃
externalNativeBuild {
            cmake {
                cppFlags ""
                abiFilters 'armeabi-v7a'
            }
        }

解决办法:

 externalNativeBuild {
            ndk{
                abiFilters 'armeabi-v7a'
            }

            cmake {
                cppFlags ""
                abiFilters 'armeabi-v7a'
            }
        }

cmake 指定的配置信息为编译时的,ndk指定的是打包时的,所以他俩都应该进行配置

  1. CMakeLists.txt配置完成后,运行报错找不到对应的so,文件或者头文件
    比如:
cmake_minimum_required(VERSION 3.4.1)
//引入指定目录下的CMakeLists.txt
add_subdirectory(src/main/cpp/librtmp)

add_library(
             native-lib

             SHARED

             src/main/cpp/native-lib.cpp
             src/main/cpp/VideoChannel.cpp)

include_directories(src/main/cpp/include)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/src/main/cpp/libs/${ANDROID_ABI}")
target_link_libraries(
                       native-lib
                       rtmp
                       x264
            log)`

解决办法:请仔细查看当前CMakeLists.txt当前路径,${CMAKE_SOURCE_DIR}指的是CMakeLists.txt当前的路径,所以可能是路径有问题,需要进行调整

  1. 有时候编译报找不到一些常用的库文件,比如libz.so等

解决办法:
1.可以在cppFlags 进行参数配置 添加 -lz 指定添加libz.so库

cppFlags "-std=c++11 -lz"

2.在CMakeLists.txt里进行配置(推荐方案)

target_link_libraries( # Specifies the target library.
        native-lib
        avformat avcodec avfilter avutil swresample swscale
        z android OpenSLES
        ${log-lib})

这里的 z 和 android 都是ndk系统本身就提供了,只需要引入就行

你可能感兴趣的:(复习总结)