如何使用 NDK 将 Lame 3.99.5 添加到 Android Studio?

How to add Lame 3.99.5 to Android Studio using NDK?

我是 Android NDK 的新手。我需要使用 NDK 将 Lame 库添加到 Android Studio。我开始研究并找出一些有用的东西 link:

Lame MP3 Encoder compile for Android

How to link the “lame” mp3 encoder shared object to an Android studio project

我成功了,但只构建了 "armeabi"。我怎样才能像这样构建另一个:"arm64-v8a"、"armeabi-v7a"、"mips"、"mips64"、"x86"、"x86_64"?

提前致谢!

在使用 Android Studio + Lame + NDK 卡住了 3 天之后。我想出如何做到这一点:

第 1 步:

下载 NDK:http://developer.android.com/ndk/downloads/index.html

下载 Lame 库:http://lame.sourceforge.net/download.php

我的 Android Studio 1.5.1

我的NDK:android-ndk-r10e(需要设置路径才能使用)

我的 Lame 库:3.99.5

注意:下载后的 lame 库格式可能为 .gz 而不是 .tar.gz。在这种情况下,请随意将其更改为 .tar.gz 并使用 7zip(两次)将其解压缩。

第 2 步:

例如,您的项目是 "AudioRecorder"。在其中创建一个文件夹名称 "jni"。 AudioRecorder/jni.

将所有 libmp3lame 文件夹(在 lame 3.99.5 中)复制到 jni(您应该将其名称替换为 lame-3.99。5_libmp3lame)。

将lame.h复制到AudioRecorder/jni/libmp3lame.

第 3 步:

在 AudioRecorder/jni 中创建 Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LAME_LIBMP3_DIR := lame-3.99.5_libmp3lame
LOCAL_LDLIBS    := -llog
LOCAL_MODULE    := mp3lame
LOCAL_CFLAGS    += -ffast-math -I $(LAME_LIBMP3_DIR)
LOCAL_SRC_FILES := $(LAME_LIBMP3_DIR)/bitstream.c \
                   $(LAME_LIBMP3_DIR)/fft.c \
                   $(LAME_LIBMP3_DIR)/id3tag.c \
                   $(LAME_LIBMP3_DIR)/mpglib_interface.c \
                   $(LAME_LIBMP3_DIR)/presets.c \
                   $(LAME_LIBMP3_DIR)/quantize.c \
                   $(LAME_LIBMP3_DIR)/reservoir.c \
                   $(LAME_LIBMP3_DIR)/tables.c \
                   $(LAME_LIBMP3_DIR)/util.c \
                   $(LAME_LIBMP3_DIR)/VbrTag.c \
                   $(LAME_LIBMP3_DIR)/encoder.c \
                   $(LAME_LIBMP3_DIR)/gain_analysis.c \
                   $(LAME_LIBMP3_DIR)/lame.c \
                   $(LAME_LIBMP3_DIR)/newmdct.c \
                   $(LAME_LIBMP3_DIR)/psymodel.c \
                   $(LAME_LIBMP3_DIR)/quantize_pvt.c \
                   $(LAME_LIBMP3_DIR)/set_get.c \
                   $(LAME_LIBMP3_DIR)/takehiro.c \
                   $(LAME_LIBMP3_DIR)/vbrquantize.c \
                   $(LAME_LIBMP3_DIR)/version.c \
include $(BUILD_SHARED_LIBRARY)

第 4 步:

删除 Makefile.am、Makefile.in、logoe.ico、depcomp、lame.rc 和 i386 目录。

第 5 步:

编辑文件jni/lame-3.99.5_libmp3lame/util.h,并替换定义

外部 ieee754_float32_t fast_log2(ieee754_float32_t x);

有了这个

外部浮动 fast_log2(浮动 x);

第 6 步:

移出,按住shift键+右击AudioRecorder文件夹选择打开命令行window:

"ndk-build"(到 运行 NDK 构建)

"ndk-build clean"(清除所有内置的 NDK)

第 7 步:

您可能会遇到这样的错误:

"Cannot recognize <lame.h>"

将所有“#include”替换为“#include "lame.h"”

"incompatible implicit declaration of built-in function 'xyz'"

将 和 添加到任何有问题的文件(尝试在文件顶部第一个评论下方添加)。

"undefined reference to 'index'"

转到文件 "id3tag.c" 和 "machine.h" 评论“#define strchr 索引”

第 8 步:

在 AudioRecorder/jni 中创建 Application.mk:

APP_ABI := all

如果没有Application.mk和"APP_ABI := all",NDK只构建"armeabi" 添加应用程序将构建的文件:

"arm64-v8a"

"armeabi"

"armeabi-v7a"

"mips"

"mips64"

"x86"

"x86_64"

第 9 步:

成功构建 NDK 后,现在您应该有 2 个新文件夹

"AudioRecorder/libs"

"AudioRecorder/obj"

在"AudioRecord\app\src\main"中创建"jniLibs"并将"AudioRecorder/libs"中的所有文件夹复制到其中。

希望对您有所帮助。 :)