环境:
Ubuntu12.04(64bit) android-ndk-r8d libpng-1.5.13 zlib-1.2.7
因为libpng用到了库zlib 所以也要下载来一起编译
libpng(http://www.libpng.org/)
可以用两种方法编译源码, GNU Makefile 和 Android的 ndk-build.
本人用第一种方法未成功, 将CC改为arm-linux-androideabi-gcc不行,
这里采用的是第二种方法,部分参考网上帖子。
第一种方法例子: http://blog.csdn.net/lixinye0123/article/details/3839136
第二种方法例子:http://blog.csdn.net/gengshenghong/article/details/7016014
主要是将两个开源库编译成静态库.a文件, 供自己的代码调用, 编译成动态库.so, 最终打包进apk。
首先把libpng-1.5.13 和 zlib-1.2.7 两个文件夹放到jni下.
1. 在/jni下新建Android.mk, 内容如下:
include $(all-subdir-makefiles)
2. 在zlib-1.2.7 和libpng-1.5.13下分别新建Android.mk
zlib-1.2.7的Android.mk内容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libz
LOCAL_SRC_FILES := adler32.c compress.c crc32.c deflate.c gzclose.c gzlib.c gzread.c \
gzwrite.c infback.c inffast.c inflate.c inftrees.c trees.c uncompr.c zutil.c
include $(BUILD_STATIC_LIBRARY)
libpng-1.5.13的Android.mk内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := png.c pngerror.c pngget.c pngmem.c pngpread.c \
pngread.c pngrio.c pngrtran.c pngrutil.c pngset.c pngtrans.c \
pngwio.c pngwrite.c pngwtran.c pngwutil.c
LOCAL_MODULE := libpng
LOCAL_STATIC_LIBRARIES := libz
include $(BUILD_STATIC_LIBRARY)
自己的src代码也有一个Android.mk文件, 里面添加一行, 引用两个开源库:
LOCAL_WHOLE_STATIC_LIBRARIES := libpng libz
ndk-build编译成功后,通过png.h等头文件使用开源库里的函数, 具体参考libpng官方mannual 。
jni
├── Android.mk
├── libpng-1.5.13
│ └── Android.mk
├── src
│ ├── Android.mk
│ └── hello-jni.c
└── zlib-1.2.7
└── Android.mk