【问题标题】:How to add Lame 3.99.5 to Android Studio using NDK? [closed]如何使用 NDK 将 Lame 3.99.5 添加到 Android Studio? [关闭]
【发布时间】:2016-04-21 03:29:32
【问题描述】:

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

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”?

提前谢谢你!

【问题讨论】:

    标签: java android c android-ndk lame


    【解决方案1】:

    在使用 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(需要设置路径才能使用)

    我的蹩脚图书馆:3.99.5

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

    第 2 步:

    例如,您的项目是“AudioRecorder”。在其中创建一个文件夹名称“jni”。录音机/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)
    

    第四步:

    删除 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);

    有了这个

    extern float fast_log2(float x);

    第 6 步:

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

    “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 index”

    第 8 步:

    在 AudioRecorder/jni 中创建 Application.mk:

    APP_ABI := all
    

    如果没有带有“APP_ABI := all”的 Application.mk,NDK 只会构建“armeabi” 添加此应用程序将构建的文件:

    “arm64-v8a”

    “阿米亚比”

    “armeabi-v7a”

    “mips”

    “mips64”

    “x86”

    “x86_64”

    第 9 步:

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

    “录音机/库”

    “录音机/obj”

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

    希望对您有所帮助。 :)

    【讨论】:

    • 感谢您的回答!但是我被困在第 7 步,仍然收到错误“内置函数‘xyz’的隐式声明不兼容”。我在文件 cmets 部分之后的顶部添加了#include "lame.h"。
    • @ErphanRajput:确保您只添加了“#include "lame.h"”并且文件中没有“#include ”。在再次构建之前使用“ndk-build clean”清理所有内容。如果还是不成功,试着把“#include "lame.h"”一点一点往下移。
    • 如果有人遇到 C 编译错误 - stackoverflow.com/a/13307523/2122712
    • 感谢您的详细教程。顺便说一句,我遇到了“未定义的索引引用”和“未定义的 bcody 引用”。这可以通过添加 C 标志“STDC_HEADERS”来解决。见stackoverflow.com/questions/27893149/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2021-03-25
    • 2014-07-30
    • 2015-12-26
    • 1970-01-01
    相关资源
    最近更新 更多