android编译lame

2024-01-23 17:40
文章标签 编译 android lame

本文主要是介绍android编译lame,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

android编译lame

编译环境

AndroidStudio2.2,如果没有安装ndk,点开File->Setting,选中AndroidSDK,根据官方文档,勾选中CMake,LLDB和NDK三项安装。

ndk安装

CMake用于使用cmake脚本编译(官方例子采用此方式编译),而我编译选择了采用NDK编译。

编译过程

需要去lame官网去下载lame包,最新版本为3.99.5,新建一个android工程,命名为Mp3LameEncoder,然后在app/src/main文件夹下新建一个jni文件夹,将lame官网下载的压缩包解压,把解压后的libmp3lame复制到jni目录下,同时将include目录下的lame.h也拷贝到jni/libmp3lame目录下,同时删除depcomp、lame.rc、logoe.ico、Makefile.am、Makefile.in、i386文件夹和vector文件夹下的非.h .c文件,这样,前期处理就做好了。

下一步就是要去编写Android.mk文件去编译了,Android.mk文件如下

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LAME_LIBMP3_DIR := libmp3lameLOCAL_MODULE    := mp3lame
LOCAL_SRC_FILES     := \$(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 \LOCAL_LDLIBS := -lloginclude $(BUILD_SHARED_LIBRARY)

编译中的问题

编译中会报各种各样的错误,下面把我遇到的错误及解决方法总结如下:

没有ieee754_float32类型

解决办法: 将util.h的
extern ieee754_float32_t fast_log2(ieee754_float32_t x);
字段改为extern float fast_log2(float x);

提示要将set_get.h文件中的#include
报错undefined reference to ‘bcopy’ undefined reference to ‘index’

error3

解决办法: 这个是最坑爹的,很多文档都没有提到,这里要修改id3tag.c和machine.h,将HAVE_STRCHR和HAVE_MEMCPY的ifdef结构注释掉。

id3tag.c
error3
machine.h
error3

然后在采用ndk-build命令进行编译,就可以顺利完成。

这里也可以在工程项目的build.gradle文件中配置,同时在ModuleSetting中指定NDK路径
gradle编译
然后Build->Make Project就可以自动编译,无需打开命令行窗口敲命令了

这篇关于android编译lame的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/637026

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现