Android Studio下编译lame

本文详细介绍了如何在Windows和Ubuntu系统中通过下载lame开源库并实现实录转码为mp3的过程,解决了在Android Studio ndk功能试验状态下的若干问题,并对关键步骤进行了优化。

在项目中要实装lame的开源库实现录音转码mp3的功能。

期间遇到了诸多问题,在win和ubuntu下来回切。Android Studio本身的ndk功能还处于试验状态(2.1).

最终成功解决。


1.首先下载lame的源码。需要自备梯子。

http://lame.sourceforge.net/download.php

http://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz

下载好之后解压。将libmp3lame/ 目录拷贝到项目下的jni目录下,同时将将 lame-x.xx.x/include/ 目录下的 lame.h 也复制到 jni/libmp3lame/中


2.在jni文件夹下创建Application.mk和Android.mk文件

这里不赘述,重点在于如果是x86_64的话需要在Application.mk中加上

APP_CFLAGS += -DSTDC_HEADERS
否则会有错误
undefined reference to `bcopy'
collect2: error: ld returned 1 exit status
 
 
3.修改源代码
fft.c中去掉#include “vector/lame_intrin.h”。这个是用Intel CPU的特性进行优化, ARM上用不到。
set_get.h中将#include改成#include “lame.h”。
utils.h中将extern ieee754_float32_t fast_log2(ieee754_float32_t x);用extern float fast_log2(float x);替换。
 
4.build
这个时候在终端里切换到jni目录,执行ndk-build就可以了。前提是将ndk-build的目录添加到了系统环境变量中

### 编译 LAME 库用于 Android 平台 为了在 Android 上成功编译并集成 LAME MP3 编解码器库,需遵循特定配置流程以确保兼容性和稳定性。 #### 配置 NDK 开发环境 安装最新版本的 Android Studio 和配套的 NDK 工具链是必要的前提条件。通过 SDK Manager 安装所需组件,并确认已设置好 `$ANDROID_NDK_HOME` 环境变量指向NDK路径[^1]。 #### 创建 JNI 接口层 创建一个新的 C/C++ 项目,在 `app/src/main/cpp/` 下放置源文件。编辑 `CMakeLists.txt` 文件来指定构建选项: ```cmake add_library( lame SHARED IMPORTED ) set_target_properties(lame PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libmp3lame.so ) include_directories(${CMAKE_SOURCE_DIR}/jni/lame/include) file(GLOB SOURCES "src/*.c") add_library(jni_lame SHARED ${SOURCES}) find_library(log-lib log) target_link_libraries( jni_lame ${log-lib} lame ) ``` #### 修改 Application.mk 添加必要宏定义 在项目的 `jni/Application.mk` 中加入如下指令防止链接时遇到标准函数未定义的问题: ```makefile APP_PLATFORM := android-21 APP_STL := c++_static APP_CFLAGS += -DSTDC_HEADERS=1 ``` 此操作可以有效解决类似 `undefined reference to 'bcopy'` 的错误提示[^2]。 #### 构建过程自动化脚本 编写 shell 脚本来简化多架构支持下的 so 文件生成工作。下面是一个简单的例子: ```bash #!/bin/bash export ANDROID_NDK=/path/to/android-ndk-r25c export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/ for arch in armeabi-v7a arm64-v8a x86 x86_64; do mkdir -p build/$arch && cd $_ cmake \ -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=${arch} \ -DANDROID_PLATFORM=android-21 \ ../../.. make clean ; make cp libmp3lame.so ../../../libs/${arch}/ cd ../.. done ``` 完成上述步骤后即可获得适用于不同 CPU 架构的目标二进制文件(`*.so`),将其复制到应用模块中的适当位置以便后续打包发布。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值