图片压缩—开发属于自己的SDK(一)
前言:
之前一直在学习NDK开发,到目前为止自己的项目中还没有真正用到NDK东西,学了不用等于没学,而且还浪费自己的时间,趁着自己没事的时候自己搞一波NDK的东西,顺便把它弄成SDK,方便以后项目的移植使用。
相信大家平时项目中用的很多鲁班压缩、Android系统自带的压缩、区别我就不在这里细讲了。
我想说的的是:基于JPEG第三方库压缩,好了废话少说,去编译库吧!
Step1:下载NDK(Linux)
1、下载链接:
页面链接:https://developer.android.com/ndk/downloads/
NDK-r19c:https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip
2、解压下载下来NDK最新稳定版 (r19c):
unzip android-ndk-r19c-linux-x86_64.zip
Step2:下载LibJpeg库(Linux)
1、下载链接:
页面链接:https://libjpeg-turbo.org/
下载链接(最新版本2.0.2):https://github.com/libjpeg-turbo/libjpeg-turbo/archive/2.0.2.tar.gz
2、解压LibJpeg库:
tar xvf 2.0.2.tar.gz
3、How to compile?(编译流程)
编译文档 编译要求
备注:编译针对于所有的系统要求:1、CMake 版本>=2.8.12
2、如果需要编译x86、x86-64CPU架构需要安装NASM或者YASM(NASM版本>=2.10)
3、在编译文档找到适合自己的CPU架构编译脚本(本文是编译CPU架构是:armeabi-va7 备注:基本上兼容市面上绝大部分手机了)
# Set these variables to suit your needs
#配置NDK的路径
NDK_PATH={full path to the NDK directory-- for example,
/opt/android/android-ndk-r16b}
#编译的方式
#gcc:需要NDK-r16b以及更早以前版本
#clang:需要NDK-r17c以及更新的版本
TOOLCHAIN={"gcc" or "clang"-- "gcc" must be used with NDK r16b and earlier,
and "clang" must be used with NDK r17c and later}
#配置编译好的库支持Android最低版本
ANDROID_VERSION={the minimum version of Android to support-- for example,
"16", "19", etc.}
cd {build_directory}
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 \
[additional CMake flags] {source_directory}
make
Step3:CMake下载安装(Linux)
1、页面连接:https://cmake.org/download/
2、下载链接:https://github.com/Kitware/CMake/releases/download/v3.14.3/cmake-3.14.3.tar.gz
3、解压CMake
tar zxvf cmake-3.14.3.tar.gz
4、进入到解压好的cmake-3.14.3文件夹
执行操作:
1、./bootstarp
2、make install
cmake --version能看到版本号表示安装成功了
CMake安装成功.png
Step4:开始编译libjpeg库
1、进入 libjpeg-turbo-2.0.2文件夹
cd libjpeg-turbo-2.0.2/
2、创建build.sh编译脚本
vim build.sh
3、编译的脚本
#!/bin/bash
# Set these variables to suit your needs
NDK_PATH=../android-ndk-r19c
TOOLCHAIN=clang
ANDROID_VERSION=18
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 \
make
保存并退出当前脚本文件!!!
4、给build.sh加读写权限
chmod +x build.sh
5、执行build.sh脚本
./build.sh
一切顺利,你会看到当前libjpeg-turbo-2.0.2文件夹多了libjpeg.a、libjpeg.so等文件。说明编译成功了!
Step6:导出相关的文件
导出命令:
sz libturbojpeg.a
其他文件依次类推:
jconfig.h、jerror.h、jmorecfg.h、jpeglib.h、turbojpeg.h
这里已经将libjpeg的可执行文件编译好了。接下来应该创建NDK工程并配置CMake等相关信息了。下一篇文章介绍怎么配置CMake.