You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从ndk-build迁移至CMake时遭遇build.ninja错误

从ndk-build迁移到CMake构建Android共享库

嘿,我来帮你把现有的Android.mk配置转换成对应的CMake配置,一步步来,保证你能顺利完成迁移~

第一步:创建CMakeLists.txt文件

在你的JNI代码目录(一般是app/src/main/cpp)下新建一个CMakeLists.txt,把下面的内容填进去,完全对应你原来的Android.mk逻辑:

# 设置CMake最低版本,根据你用的NDK版本调整,这里选个常用的3.10.2就行
cmake_minimum_required(VERSION 3.10.2)

# 随便整个项目名,自定义就行
project(pitchYIN_build)

# 构建你的共享库pitchYIN
add_library(
    # 库名,和你Android.mk里的LOCAL_MODULE完全一致
    pitchYIN
    # 类型选SHARED,对应ndk-build里的BUILD_SHARED_LIBRARY
    SHARED
    # 源文件列表,直接照搬你原来的LOCAL_SRC_FILES
    yin.c
    yinOld.c
    DSPAlgorithms.c
    singingEvaluation.c
    myutils.c
)

# 要是你的代码依赖NDK里的系统库(比如log库用来打日志),可以加这段链接配置:
# find_library(
#     log-lib
#     log
# )
# target_link_libraries(
#     pitchYIN
#     ${log-lib}
# )

第二步:在build.gradle里配置CMake

打开模块级的app/build.gradle,把原来ndk-build的配置替换成CMake的,找到android块,添加下面的内容:

android {
    // ... 你原来的其他配置(比如compileSdk、defaultConfig里的applicationId这些)

    defaultConfig {
        // ... 其他原有配置

        externalNativeBuild {
            cmake {
                // 设置你要编译的ABI,和之前ndk-build的APP_ABI对应,比如armeabi-v7a、arm64-v8a
                abiFilters 'armeabi-v7a', 'arm64-v8a'
                // 要是需要传额外编译参数(比如定义宏、指定STL),可以加arguments,比如:
                // arguments "-DANDROID_STL=c++_shared"
            }
        }
    }

    externalNativeBuild {
        cmake {
            // 指定刚才创建的CMakeLists.txt的路径,别写错了
            path "src/main/cpp/CMakeLists.txt"
        }
    }
}

第三步:验证迁移结果

  1. 点击Android Studio右上角的「Sync Now」同步项目
  2. 构建项目,CMake会自动编译生成libpitchYIN.so,你可以在app/build/intermediates/cmake/debug/obj/下对应ABI的目录里找到它

额外小提示

  • 如果你的代码有自定义头文件目录,记得在CMakeLists.txt里用include_directories()加上,比如头文件在cpp/include下,就加:
    include_directories(./include)
    
  • 要是原来的Android.mk里有LOCAL_CFLAGS或LOCAL_LDFLAGS这类编译/链接参数,CMake里用target_compile_options()和target_link_options()来设置,比如:
    target_compile_options(pitchYIN PRIVATE -Wall -O2)
    

这样就搞定啦,CMake的配置比ndk-build更直观,也更适配现在Android Studio的构建流程~

内容的提问来源于stack exchange,提问作者Swapnil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:54:52