美文网首页
Linux交叉编译Android可用的LAME库

Linux交叉编译Android可用的LAME库

作者: itfitness | 来源:发表于2022-01-18 17:20 被阅读0次

目录

Lame简介

LAME是目前非常优秀的一种MP3编码引擎,在业界,转码成MP3格式的音频文件时,最常用的编码器就是LAME库。当达到320Kbit/s以上时,LAME编码出来的音频质量几乎可以和CD的音质相媲美,并且还能保证整个音频文件的体积非常小,因此若要在移动端平台上编码MP3文件,使用LAME便成为唯一的选择。

编译步骤

1.下载Lame源码

下载地址:https://sourceforge.net/projects/lame/

2.下载NDK

这里需要使用低版本的NDK供后面的编译脚本使用,这里我用的r15c版本,下载地址:https://github.com/android/ndk/wiki/Unsupported-Downloads

3.编写编译脚本

交叉编译脚本如下(其中NDK_ROOT需要配置你自己的NDK路径):

#!/bin/bash

NDK_ROOT=/home/itfitness/Android/NDK/android-ndk-r15c-linux-x86_64/android-ndk-r15c
PREBUILT=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
PLATFORM=$NDK_ROOT/platforms/android-26/arch-arm
export PATH=$PATH:$PREBUILT/bin:$PLATFORM/usr/include

export LDFLAGS="-L$PLATFORM/usr/lib -L$PREBUILT/arm-linux-androideabi/lib -march=armv7-a"
export CFLAGS="-I$PLATFORM/usr/include -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -ffast-math -O2"

export CPPFLAGS="$CFALGS"
export CFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS"
export LDFLAGS="$LDFLAGS"

export AS=$PREBUILT/bin/arm-linux-androideabi-as
export LD=$PREBUILT/bin/arm-linux-androideabi-ld
export CXX="$PREBUILT/bin/arm-linux-androideabi-g++ --sysroot=${PLATFORM}"
export CC="$PREBUILT/bin/arm-linux-androideabi-gcc --sysroot=${PLATFORM} -march=armv7-a "
export NM=$PREBUILT/bin/arm-linux-androideabi-nm
export STRIP=$PREBUILT/bin/arm-linux-androideabi-strip
export RANLIB=$PREBUILT/bin/arm-linux-androideabi-ranlib
export AR=$PREBUILT/bin/arm-linux-androideabi-ar

./configure --host=arm-linux \
--disable-shared \
--disable-frontend \
--enable-static \
--prefix=`pwd`/armv7a/

make clean
make
make install

4.执行脚本

这里我编写的脚本名为lameNdk.sh

./lameNdk.sh

这时可能会提示你权限不足需要你将可执行权限给脚本加上

chmod +x ./lameNdk.sh

然后执行编译,编译成功后文件在如下目录


5.引入项目

将include目录拷贝到cpp目录下



将lib下的libmp3lame.a拷贝到项目libs目录下的armeabi-v7a目录




然后调整app下的build.gradle
defaultConfig {
        ...省略部分代码
        externalNativeBuild {
            //配置自己写的代码生成的架构类型
            cmake {
                cppFlags ''
                abiFilters 'armeabi-v7a'
            }
        }
        ndk{
            //配置第三方库的架构类型,由于我们这里只有armeabi-v7a的因此只配置了它
            abiFilters 'armeabi-v7a'
        }
    }
sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

CMakeLists.txt调整如下:

cmake_minimum_required(VERSION 3.10.2)
project("lamedemo")
#导入头文件(可以让项目找到头文件,这样才能调用函数)
include_directories("${CMAKE_SOURCE_DIR}/include")
#配置动态链接库所在的目录
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}../../../../libs/${ANDROID_ABI}")
add_library( # Sets the name of the library.
        lamedemo

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        native-lib.cpp)
find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)
target_link_libraries( # Specifies the target library.
        lamedemo
        mp3lame
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})
6.测试集成是否成功

通过获取版本号来判断是否集成成功,C代码如下:

#include <jni.h>
#include <string>
#include "lame/lame.h"
extern "C" JNIEXPORT jstring JNICALL
Java_com_itfitness_lamedemo_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    //此处输出lame的版本号
    return env->NewStringUTF(get_lame_version());
}

集成成功的话,效果如下,显示Lame的版本号:


案例源码

https://gitee.com/itfitness/lame-demo

相关文章

  • Linux交叉编译Android可用的LAME库

    目录 Lame简介 LAME是目前非常优秀的一种MP3编码引擎,在业界,转码成MP3格式的音频文件时,最常用的编码...

  • Mono Android编译步骤

    本文简要描述在Linux下进行交叉编译Unity 2017.4版本的Android Mono库(libmono.s...

  • NDK - gcc与makefile

    Android开发时,有时候需要移植第三方库进项目,需要对第三方库进行交叉编译生成Android可用的动态库或者静...

  • gcc/g++与makefile

    了解c/c++编译器的基本使用,能够在后续移植第三方框架进行交叉编译时(编译android可用的库),清楚的了解应...

  • 交叉编译必知--gcc/g++详细讲解

    了解c/c++编译器的基本使用,能够在后续移植第三方框架进行交叉编译时(编译android可用的库),清楚的了解应...

  • Android交叉编译入门

    通过这篇文章了解c/c++编译器的基本使用,能够在后续移植第三方框架进行交叉编译时(编译android可用的库),...

  • 在Linux下交叉编译生成iOS工具链的指导手册

    1.前言 公司要求在Linux系统上实现交叉编译并动态下发Android和iOS的静态库或者动态库,而其中最为关...

  • WebRTC arm-linux库编译

    安装交叉编译工具 WebRTC的工程已经支持arm-linux平台库的编译 编译环境ubuntu14.04 然后执...

  • 编译ffmpeg configure详解

    如果是编译Mac OS或linux的ffmpeg库,是比较简单的,不存在交叉编译。直接在Mac OS 或linux...

  • Linux环境Golang配置

    Linux配置方式1 Linux配置方式2 设置 goproxy 使用 go module 交叉编译 交叉编译依赖...

网友评论

      本文标题:Linux交叉编译Android可用的LAME库

      本文链接:https://www.haomeiwen.com/subject/idwkhrtx.html