AndroidStudio編譯libmp3lame

第一步下載libmp3lame源碼。
https://sourceforge.net/projects/lame/files/latest/download
第二步:賦值libmp3lame和include目錄下的所有的擴展名爲c和h的文件到AndroidStudio中。

在這裏插入圖片描述

#CMakeLists.txt文件:
# 這裏指定了CMake的最低版本爲3.4.1
cmake_minimum_required(VERSION 3.4.1)
#該變量爲真時會創建完整版本的Makefile
set(CMAKE_VERBOSE_MAKEFILE on)
set(LAME_LIBMP3_DIR ${CMAKE_SOURCE_DIR}/src/main/jni/libmp3lame)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLOGTEST")
include_directories(${CMAKE_SOURCE_DIR}/src/main/jni/libmp3lame)
include_directories(${CMAKE_SOURCE_DIR}/src/main/jni)

# 這裏用來添加一個庫
add_library(# 這裏設置so庫的名稱爲native-lib
            libmp3lame
             # 這裏設置該庫爲共享
             SHARED
             #源碼文件
               ${LAME_LIBMP3_DIR}/bitstream.c
               ${LAME_LIBMP3_DIR}/encoder.c
               ${LAME_LIBMP3_DIR}/fft.c
               ${LAME_LIBMP3_DIR}/gain_analysis.c
               ${LAME_LIBMP3_DIR}/id3tag.c
               ${LAME_LIBMP3_DIR}/lame.c
               ${LAME_LIBMP3_DIR}/mpglib_interface.c
               ${LAME_LIBMP3_DIR}/newmdct.c
               ${LAME_LIBMP3_DIR}/presets.c
               ${LAME_LIBMP3_DIR}/psymodel.c
               ${LAME_LIBMP3_DIR}/quantize.c
               ${LAME_LIBMP3_DIR}/quantize_pvt.c
               ${LAME_LIBMP3_DIR}/reservoir.c
               ${LAME_LIBMP3_DIR}/set_get.c
               ${LAME_LIBMP3_DIR}/tables.c
               ${LAME_LIBMP3_DIR}/takehiro.c
               ${LAME_LIBMP3_DIR}/util.c
               ${LAME_LIBMP3_DIR}/vbrquantize.c
               ${LAME_LIBMP3_DIR}/VbrTag.c
               ${LAME_LIBMP3_DIR}/version.c
             )
 #這裏用來添加一個庫
add_library(# 這裏設置so庫的名稱爲native-lib
             eng100
             # 這裏設置該庫爲共享
             SHARED
             src/main/jni/libmp3lame.cpp
             )
# 這裏用來查找一個庫,並設置到路徑變量中去
find_library( # 設置路徑變量
              log-lib
           # 你希望CMake編譯器加載的NDK函數庫
              log )
 # 將一個庫關聯到目標函數庫中
target_link_libraries(# 目標函數庫
                        eng100
                        libmp3lame
                       # 想要在目標函數庫中使用的函數庫,其中${路徑變量}
                       ${log-lib} )

#build.gradle文件中添加:
externalNativeBuild {
            cmake {
                cFlags "-DSTDC_HEADERS"
                cppFlags "-std=c++11 -frtti -fexceptions"
                abiFilters 'arm64-v8a','armeabi-v7a','x86','x86_64'
            }
        }
 externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }

    sourceSets {
        main {
            jni.srcDirs = ['src/main/jni']
        }
    }

第三步:更改libmp3lame源碼文件,不然編譯會報錯。

 ①刪除 fft.c 文件的 47 行的 include“vector/lame_intrin.h”
 ②修改 set_get.h 文件的 24 行的 #include“lame.h”
③將 util.h 文件的 574 行的”extern ieee754_float32_t fast_log2(ieee754_float32_t x);” 替換爲 “extern float fast_log2(float x);”

第四步:編譯,生成so文件。

#c++代碼:
#include <jni.h>
#include "AndroidLog.h"
#include "lame.h"
static lame_global_flags *lame;
extern "C" JNIEXPORT void JNICALL
Java_com_wh_xy_mp3recorder_LameUtils_init(JNIEnv *env, jclass type, jint inSamplerate,
                                          jint inChannel, jint outSamplerate, jint outBitrate,
                                          jint quality) {
    LOGI("%s","Java_com_wh_xy_mp3recorder_LameUtils_init");
    if (lame != NULL) {
        lame_close(lame);
        lame = NULL;
    }
    lame = lame_init();
    lame_set_in_samplerate(lame, inSamplerate);
    lame_set_num_channels(lame, inChannel);//輸入流的聲道
    lame_set_out_samplerate(lame, outSamplerate);
    lame_set_brate(lame, outBitrate);
    lame_set_quality(lame, quality);
    lame_init_params(lame);
}

#java代碼
 static{
        System.loadLibrary("libmp3lame");
    }
    public native static void init(int inSamplerate, int inChannel,
                                   int outSamplerate, int outBitrate, int quality);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章