How to add Lame 3.99.5 to Android Studio using NDK? [closed]

三世轮回 提交于 2020-03-14 00:58:30

问题


I am new in Android NDK. I need to add the Lame library to Android Studio using NDK. I start my research and find out some useful link:

Lame MP3 Encoder compile for Android

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

I successful but only with build the "armeabi". How can I build the other like: "arm64-v8a", "armeabi-v7a", "mips", "mips64", "x86", "x86_64"?

Thank you in advance!


回答1:


After 3 days getting stuck with the Android Studio + Lame + NDK. I figure out how to do this:

Step 1:

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

Download Lame library: http://lame.sourceforge.net/download.php

My Android Studio 1.5.1

My NDK: android-ndk-r10e (you need to set path in order to use it)

My Lame library: 3.99.5

Note: lame library after download may have format .gz instead of .tar.gz. In that case, feel free to change it to .tar.gz and extract it by using 7zip (two times).

Step 2:

For example, your Project is "AudioRecorder". Create a folder name "jni" in side it. AudioRecorder/jni.

Copy all the libmp3lame folder (inside lame 3.99.5) to jni (you should replace its name to lame-3.99.5_libmp3lame).

Copy lame.h to AudioRecorder/jni/libmp3lame.

Step 3:

Create the Android.mk in AudioRecorder/jni:

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)

Step 4:

Remove Makefile.am, Makefile.in, logoe.ico, depcomp, lame.rc and i386 directory.

Step 5:

Edit file jni/lame-3.99.5_libmp3lame/util.h, and replace definition

extern ieee754_float32_t fast_log2(ieee754_float32_t x);

with this

extern float fast_log2(float x);

Step 6:

Move out, press shift + right click on the folder AudioRecorder choose open command line window:

"ndk-build" (to run NDK build)

"ndk-build clean" (to clean all built of NDK)

Step 7:

You may have some error like this:

"Cannot recognize <lame.h>"

replace all "#include " to "#include "lame.h""

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

add and to any files which have the problems (try to add at the top of the file below the first comment).

"undefined reference to 'index'"

go to files "id3tag.c" and "machine.h" comment the "#define strchr index"

Step 8:

Create the Application.mk in AudioRecorder/jni:

APP_ABI := all

If there is not Application.mk with the "APP_ABI := all", NDK only build the "armeabi" Add this file the application will build up:

"arm64-v8a"

"armeabi"

"armeabi-v7a"

"mips"

"mips64"

"x86"

"x86_64"

Step 9:

After successfully build NDK, now you should have 2 new folder

"AudioRecorder/libs"

"AudioRecorder/obj"

Create the "jniLibs" in "AudioRecord\app\src\main" and copy all folders in "AudioRecorder/libs" to it.

Hope it may help. :)



来源:https://stackoverflow.com/questions/34812738/how-to-add-lame-3-99-5-to-android-studio-using-ndk

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!