【Android 内存优化】libjpeg-turbo 函数库交叉编译与使用 ( 交叉编译脚本编写 | 函数库头文件拷贝 | 构建脚本配置 | Android Studio 测试函数库 )(一)

简介: 【Android 内存优化】libjpeg-turbo 函数库交叉编译与使用 ( 交叉编译脚本编写 | 函数库头文件拷贝 | 构建脚本配置 | Android Studio 测试函数库 )(一)

一、交叉编译 Shell 脚本参考


交叉编译脚本参考 : 之前已经做过两个函数库的交叉编译脚本 , FFMPEG 和 x264 开源库 , 而且都是使用 configure 生成 Makefile 文件 ;



① FFMPEG 函数库的交叉编译脚本 : 【Android FFMPEG 开发】FFMPEG 交叉编译配置 ( 下载 | 配置脚本 | 输出路径 | 函数库配置 | 程序配置 | 组件配置 | 编码解码配置 | 交叉编译配置 | 最终脚本 ) 十一、交叉编译配置 Shell 脚本 ( 重点 )


② x264 函数库的交叉编译脚本 : 【Android RTMP】Android Studio 集成 x264 开源库 ( Ubuntu 交叉编译 | Android Studio 导入函数库 ) 二、 x264 交叉编译


参考上述交叉编译脚本 , 编写 libjpeg-turbo 函数库 的交叉编译脚本 ; ( 上述编译脚本仅做参考 )



发现 libjpeg-turbo 源码路径下的 BUILDING.md 文件中有预置好的交叉编译脚本示例 ;






二、NDK r16b 版本配置


NDK 配置 : 交叉编译 libjpeg-turbo 只能使用 NDK r16b 或者之前的版本 , 这里使用 r16b 版本 ;



① NDK 官方主页 : 点击该链接进入界面


② NDK 下载地址 : 点击该链接进入界面


③ 停止维护版本下载地址 : 旧版本 NDK 下载地址 , 这里在该地址中下载 Android NDK,修订版 16b(2017 年 12 月)版本 , 编译要求使用 NDK r16b 或者之前的版本 ;


④ 直接下载地址 : android-ndk-r16b-linux-x86_64.zip , 这是 Linux 64 位 NDK 下载地址 ;






三、libjpeg-turbo 交叉编译 Shell 脚本


1. 需要配置的选项 :



① NDK 路径 : /root/NDK/android-ndk-r16b , 将 NDK 下载后 , 解压的路径 ;


② 交叉编译工具链 : gcc , 官方让在 gcc , g++ , clang 中三选一 ; 这是 C 语言项目 , 选择 gcc 即可 ;


③ 最低 Android 版本 : 16 即可 , 基本没有低于 16 版本的手机 ;


④ 编译结果输出目录 : /root/picture_compress/libjpeg-turbo-2.0.5/android


⑤ 源文件目录 : /root/picture_compress/libjpeg-turbo-2.0.5




2. 替换上述配置 , 生成下面的配置文件 :


# 设置 NDK 的目录 , 这里使用 ndk-r16b 版本
NDK_PATH=/root/NDK/android-ndk-r16b
# 设置 NDK 的交叉编译工具链 , 这里特别注明 , 只能使用 NDK r16b 或者之前的版本 
TOOLCHAIN=gcc
# Android 的最低兼容版本 
ANDROID_VERSION=16
# 进入最终编译生成编译结果目录
cd /root/picture_compress/libjpeg-turbo-2.0.5/android
# 设置 源码目录 最后的 /root/picture_compress/libjpeg-turbo-2.0.5 就是源文件所在目录
cmake -G"Unix Makefiles" \
  -DANDROID_ABI=armeabi-v7a \
  -DANDROID_ARM_MODE=arm \
  -DANDROID_PLATFORM=android-${ANDROID_VERSION} \
  -DANDROID_TOOLCHAIN=${TOOLCHAIN} \
  -DCMAKE_ASM_FLAGS="--target=arm-linux-androideabi${ANDROID_VERSION}" \
  -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}/build/cmake/android.toolchain.cmake \
  /root/picture_compress/libjpeg-turbo-2.0.5
make





四、执行 libjpeg-turbo 交叉编译 Shell 脚本 开始编译


1. 创建编译脚本 : 在 /root/picture_compress/libjpeg-turbo-2.0.5 目录下创建 build.sh , 将上述 交叉编译 Shell 脚本信息拷贝到该文件中 ;



2. 修改权限 , 然后执行编译脚本 :


$ chmod -R 777 build.sh
$ ./build.sh




3. 生成的静态库与头文件查看 : 服了 , 编译后的结果都散的 , 不像 FFMPEG , x264 等 , 编译后 , 头文件都在 include 中 , 静态库 动态库都整整齐齐的放在对应文件中 ;



① 静态库 : 静态库在 /root/picture_compress/libjpeg-turbo-2.0.5/android 目录中生成 ;


② 头文件 : 需要自己去源码中找头文件 , 有些在 /root/picture_compress/libjpeg-turbo-2.0.5/android 目录中 , 有些在 /root/picture_compress/libjpeg-turbo-2.0.5/ 目录中 , 下图中画红框的拷贝出来 ;


③ 项目里扒 : 嫌麻烦的直接从 GitHub 中的 PictureCompress 项目 里面扒也可以 ;


image.png






五、拷贝函数库头文件到 Android Studio


1. 拷贝静态库 : 将上述函数库 libturbojpeg.a 拷贝到 src/main/cpp/libs/armeabi-v7a 目录中 ;



2. 拷贝头文件 : 将上述 jconfig.h , jerror.h , jmorecfg.h , jpeglib.h , turbojpeg.h 头文件拷贝到 src/main/cpp/include 目录中 ;



3. 拷贝结果展示 :


image.png





目录
相关文章
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
34 3
|
1月前
|
存储 前端开发 Java
Android MVVM架构模式下如何避免内存泄漏
Android采用MVVM架构开发项目,如何避免内存泄漏风险?怎样避免内存泄漏?
89 1
|
9天前
|
Android开发 开发者
Android性能优化——内存管理的艺术
Android性能优化——内存管理的艺术
|
1月前
|
资源调度
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
37 2
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
|
28天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
5天前
|
开发框架 安全 .NET
.NET使用Moq开源模拟库简化单元测试
.NET使用Moq开源模拟库简化单元测试~
|
1月前
|
编解码 Android开发 UED
构建高效Android应用:从内存优化到用户体验
【10月更文挑战第11天】本文探讨了如何通过内存优化和用户体验改进来构建高效的Android应用。介绍了使用弱引用来减少内存占用、懒加载资源以降低启动时内存消耗、利用Kotlin协程进行异步处理以保持UI流畅,以及采用响应式设计适配不同屏幕尺寸等具体技术手段。
49 2
|
18天前
|
资源调度 前端开发 JavaScript
React 测试库 React Testing Library
【10月更文挑战第22天】本文介绍了 React Testing Library 的基本概念和使用方法,包括安装、基本用法、常见问题及解决方法。通过代码案例详细解释了如何测试 React 组件,帮助开发者提高应用质量和稳定性。
29 0
|
1月前
|
存储 程序员 编译器
C语言——动态内存管理与内存操作函数
C语言——动态内存管理与内存操作函数
|
1月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
158 1