Android NDK 移植 libpng和libz

来源:互联网 发布:我知女人心小说阅读 编辑:程序博客网 时间:2024/06/06 19:13

环境:

Ubuntu12.04(64bit)   android-ndk-r8d  libpng-1.5.13  zlib-1.2.7


因为libpng用到了库zlib 所以也要下载来一起编译

zlib (http://www.zlib.net/)

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