Android项目通过NDK整合libjpg与libpng
2016-03-26 21:36
656 查看
libjpg与libpng是处理图片的两个非常重要的库,其中libjpg是处理jpg图片解压与压缩的利器,但是不足的是,libjpg只能处理jpg相关的图或位图,所以若遇到png图片则需要通过另外一个库,libpng来处理。所以通常项目需要整合两个库来完成图片的各种需求。
为了将libjpeg与libpng和项目编译成一个动态链接库,这里我们将libjpeg与libpng编译成静态库,引入进项目之中。
1、目录结构
我们为了统一编译,会将libjpeg与libpng同时放在项目中,libpng编译的时候需要zlib支持,所以目录结构为:
2、libjpeg库
这里我们使用的是libjpeg-turbo库。
下载libjpeg-turbo:
然后将clone出来的项目文件夹中的所有文件复制到
3、png库
我们在libpng官网上下载libpng项目及关联的zlib项目。
解压zlib项目,并将项目所有文件复制到
然后解压libpng项目,此时不能直接将所有文件复制到项目中,否则在编译的时候会找不到
然后将项目文件夹下所有文件复制到
3、在项目中添加libjpeg与libpng
操作完前两部以后就可以将libjpeg与libpng的静态链接库引入项目中协同编译了。
修改主项目预编译文件
然后为了在编译项目时同时编译三个库,我们需要将libjpeg,libpng与zlib的预编译文件引入到主项目预编译文件中:
此时已经可以在主项目的C文件中引用libjpeg或libpng的头文件进行开发了。
为了将libjpeg与libpng和项目编译成一个动态链接库,这里我们将libjpeg与libpng编译成静态库,引入进项目之中。
1、目录结构
我们为了统一编译,会将libjpeg与libpng同时放在项目中,libpng编译的时候需要zlib支持,所以目录结构为:
-jni ----jpeg ---------*.c *.h ---------Android.mk -----png -----------*.c *.h ----------Android.mk -----zlib -----------*.c *.h ----------Android.mk -----Android.mk
2、libjpeg库
这里我们使用的是libjpeg-turbo库。
下载libjpeg-turbo:
git clone git://git.linaro.org/people/tomgall/libjpeg-turbo/libjpeg-turbo.git -b linaro-android
然后将clone出来的项目文件夹中的所有文件复制到
jni/jpeg/目录下。修改
Android.mk文件,找到
libjpeg.so注释,将
include $(BUILD_SHARED_LIBRARY)改成
include $(BUILD_STATIC_LIBRARY)
3、png库
我们在libpng官网上下载libpng项目及关联的zlib项目。
解压zlib项目,并将项目所有文件复制到
/jni/zlib/中。在zlib文件夹中添加Android.mk预编译脚本:
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= zlib LOCAL_SRC_FILES:= \ adler32.c \ compress.c \ crc32.c \ deflate.c \ gzclose.c \ gzlib.c \ gzread.c \ gzwrite.c \ infback.c \ inflate.c \ inftrees.c \ inffast.c \ trees.c \ uncompr.c \ zutil.c LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) include $(BUILD_STATIC_LIBRARY)
然后解压libpng项目,此时不能直接将所有文件复制到项目中,否则在编译的时候会找不到
pnglibconf.h头文件,需要将
scripts\pnglibconf.h.prebuilt复制到libpng项目根目录下重命名为
pnglibconf.h。
cd cd libpng-1.6.21/ cp scripts\pnglibconf.h.prebuilt ../pnglibconf.h
然后将项目文件夹下所有文件复制到
jni/png/文件夹下,并添加预编译文件
Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libpng LOCAL_SRC_FILES :=\ png.c \ pngerror.c \ pngget.c \ pngmem.c \ pngpread.c \ pngread.c \ pngrio.c \ pngrtran.c \ pngrutil.c \ pngset.c \ pngtest.c \ pngtrans.c \ pngwio.c \ pngwrite.c \ pngwtran.c \ pngwutil.c LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/. include $(BUILD_STATIC_LIBRARY)
3、在项目中添加libjpeg与libpng
操作完前两部以后就可以将libjpeg与libpng的静态链接库引入项目中协同编译了。
修改主项目预编译文件
Android.MK,增加静态类库引用:
LOCAL_STATIC_LIBRARIES := libjpeg LOCAL_STATIC_LIBRARIES += libpng LOCAL_STATIC_LIBRARIES += zlib LOCAL_C_INCLUDES += $(LOCAL_PATH)/jpeg LOCAL_C_INCLUDES += $(LOCAL_PATH)/png LOCAL_C_INCLUDES += $(LOCAL_PATH)/zlib
然后为了在编译项目时同时编译三个库,我们需要将libjpeg,libpng与zlib的预编译文件引入到主项目预编译文件中:
#在预编译文件最后添加 include $(LOCAL_PATH)/jpeg/Android.mk $(LOCAL_PATH)/png/Android.mk $(LOCAL_PATH)/zlib/Android.mk
此时已经可以在主项目的C文件中引用libjpeg或libpng的头文件进行开发了。
相关文章推荐
- android 事件机制
- Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
- Android——AS的Refactor下拉菜单Rename的作用
- 用的最多的Android Studio 快捷键
- JNI学习二之(C源码中Log输出及常见错误)
- Android之aidl文件在AndroidStudio中的使用
- AndroidStudio快捷键汇总
- Android中Handler消息机制浅谈
- Android-布局之FrameLayout
- android之Androidstudio下查找sha1
- 安卓 jni 开发错误 UnsatisfiedLinkError: Native method not found
- Android Studio 下安卓 jni 开发错误 undefined reference to AndroidBitmap_getInfo
- Android应用界面开发_学习笔记_第四周
- Android开源库
- Android之自定义属性
- android Studio 使用技巧
- android中MVP模式的小案例(一)
- android中惯用的颜色值
- android系统编译kernel时出错:file not recognized: File truncated
- android表情Gson EditText TextView