资讯动态

SDR++ Android编译入门:一条cmake命令产出arm64-v8a与armeabi-v7a原生版本

发布时间:2026/9/24 14:58:21 来源:尧图企业网站定制
SDR Android编译入门一条cmake命令产出arm64-v8a与armeabi-v7a原生版本【免费下载链接】SDRPlusPlusCross-Platform SDR Software项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlusSDR是一款跨平台的开源软件定义无线电。本文讲如何把SDR用NDK编译为Android原生应用让它在手机或平板上完整运行并通过OTG连接USB SDR设备。面向有基础CMake和Android开发经验的读者内容覆盖编译命令、启动机制和实际会踩的坑。一条cmake命令指定目标架构先克隆源码https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus然后在仓库根目录执行下面这条命令完成配置和构建cmake -B build-android -DOPT_BACKEND_ANDROIDON -DOPT_BACKEND_GLFWOFF \ -DCMAKE_TOOLCHAIN_FILE$ANDROID_NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABIarm64-v8a -DANDROID_PLATFORMandroid-21 cmake --build build-android -j8这条命令做三件事把编译工具链指向NDK用ANDROID_ABI选择目标架构arm64-v8a或armeabi-v7a二选一用ANDROID_PLATFORM把最低系统版本定为Android 5.0API 21。构建脚本在识别到ANDROID后会自动把C标准降到C11、C按c17编译源码不需要改动。产出是libsdrpp_core.so和一组模块so配合仓库里android/下的壳工程打包安装即可在设备上看到与桌面版一致的瀑布图和频谱界面。应用启动机制权限、资源和USB都交给了Kotlin仓库看起来很庞大但Java层实际只有一个MainActivity.kt。它继承NativeActivity启动时做三件事申请存储、网络和USB权限隐藏状态栏与导航栏实现全屏把apk assets里的res资源主题、字体、bandplan解压到应用私有目录。其余逻辑全在C一侧。android_main是原生入口它拿到应用文件目录后拼上-r参数调用sdrpp_main和桌面端走的是同一个入口配置、模块目录都挂在这个目录下。Dear ImGui界面和core/src/dsp/里的信号处理链共用同一份源码只是渲染从桌面OpenGL换成OpenGL ES 3窗口换成ANativeWindowEGL上下文固定创建为3.0版本。USB硬件的握手在Kotlin完成系统对每个USB设备弹出授权请求UsbManager拿到file descriptor后暂存为成员变量C侧通过JNI按字段名读回VID和PID。代码内置了Airspy、AirspyHF、HackRF、RTL-SDR等设备的VID/PID白名单不匹配的设备不会把descriptor交出去避免误连。音频输出由专用的android_audio_sink模块负责它按48kHz采样率建立AAudio共享流格式为32位浮点双声道缓冲区取每帧60采样点的量级。流断开比如拔插耳机时会触发错误回调并自动重建流不需要用户干预。三个最容易漏掉的编译设置第一GLFW开关必须手动关掉。OPT_BACKEND_GLFW默认是ON如果不加-DOPT_BACKEND_GLFWOFFCMake会去pkg-config查找glfw3和fftw3在Android工具链下必然失败报错还容易误导你去找系统包。⚠️ 第二处更隐蔽依赖库从硬编码的绝对路径链接。core/CMakeLists.txt的Android分支直接引用/sdr-kit/${ANDROID_ABI}/lib下的libvolk.so、libfftw3f.so、libzstd.so头文件取同级include目录。也就是说这三本书要用NDK按目标架构预编译好、放到指定目录否则链接阶段报cannot find。好消息是纠错库libcorrect默认随源码树内编译USE_INTERNAL_LIBCORRECT为ON这一项不用操心。第三是清单文件里的原生库声明。AndroidManifest.xml中需要这样一行meta-data android:nameandroid.app.lib_name android:valuesdrpp_core /它告诉系统应用启动时加载哪个so取值必须与构建产出的库名一致改名后忘记同步这一行应用会在启动时直接闪退。同一份清单还声明了读写外部存储和INTERNET三项权限网络类信号源rtl_tcp、spyserver等依赖后者。给旧32位设备出包和精简体积支持旧手机不需要改代码把ANDROID_ABI换成armeabi-v7a单独编译一套即可同时/sdr-kit/下要有一份对应的armeabi-v7a目录。两者取舍上arm64-v8a用64位寄存器和NEON指令跑大带宽采样更从容armeabi-v7a照顾旧设备。volk库会在运行时挑最优的NEON内核这部分优化对两种架构都生效。第二件事是控体积。SDR的每个信号源、解调器、声卡都是独立模块编译成独立so运行时从根目录的modules文件夹按需加载。手机上不建议全量编译保留radioFM/AM/SSB解调、rtl_tcp_source、android_audio_sink和实际要用的解码器即可全量编译会让apk明显变大旧设备还可能因内存不足在多模块下卡顿。建议的落地顺序新64位设备先出arm64-v8a版本验证通过后再补armeabi-v7a编译成功后先用file_source播放一段录制的wav确认DSP链路正常再插入USB硬件做真机测试。【免费下载链接】SDRPlusPlusCross-Platform SDR Software项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价