libpng升级

最近维护 2.2.6 版本的andorid工程,google提示升级 libpng,
按照:http://xiao.terrygo.win/2016/06/17/Google-Play-warnings/所说的方法进行编译.so出包,
升级 libpng 库成功.记录一下:
原来cocos2dx版本: 2.2.6
使用cocos2dx版本: 3.11.1
操作步骤:

  1. 从cocos2d-x-3.11.1\external\png\include\android里面的 png.h, pngconf.h, pnglibconf.h
    三个头文件复制到cocos2d-x-2.2.6\cocos2dx\platform\third_party\android\prebuilt\libpng\include下
    (将原来的头文件都删掉).
  2. 从cocos2d-x-3.11.1\external\png\prebuilt\android下面把 armeabi, armeabi-v7a, x86
    这个3个文件夹下的 libpng.a 放到cocos2d-x-2.2.6\cocos2dx\platform\third_party\android\prebuilt\libpng\libs下
    对应文件中.
    注意:(不要复制3.11.1的 make文件,不要修改2.2.26的 make文件)
  3. 在cocos2d-x-2.2.6\cocos2dx\platform\third_party\android\prebuilt目录下创建 zlib文件夹(注意一定要叫 zlib).
  4. 在2.2.6创建好的 zlib文件加下,参考 libpng目录下的格式:

    5)从cocos2d-x-3.11.1\external\zlib\include里面把 zconf.h, zlib.h文件拷贝到
    cocos2d-x-2.2.3\cocos2dx\platform\third_party\android\prebuilt\zlib\include下
    6)从cocos2d-x-3.11.1\external\zlib\prebuilt\android下把armeabi,armeabi-v7a,x86这3个文件夹下的 libz.a拷贝到
    cocos2d-x-2.2.3\cocos2dx\platform\third_party\android\prebuilt\zlib\libs对应目录
  5. 修改cocos2d-x-2.2.3\cocos2dx\platform\third_party\android\prebuilt\zlib\Android.mk
    ===================================================================
    LOCAL_PATH := $(call my-dir)

include (CLEAR_VARS)** **LOCAL_MODULE := cocos_zlib_static** **LOCAL_MODULE_FILENAME := zlib** **LOCAL_SRC_FILES := libs/(TARGET_ARCH_ABI)/libz.a
LOCAL_EXPORT_C_INCLUDES := (LOCAL_PATH)/include** **include (PREBUILT_STATIC_LIBRARY)

  1. 修改cocos2d-x-2.2.3\cocos2dx\Android.m:
    ===================================================================
    LOCAL_WHOLE_STATIC_LIBRARIES := cocos_libpng_static
    LOCAL_WHOLE_STATIC_LIBRARIES += cocos_jpeg_static
    LOCAL_WHOLE_STATIC_LIBRARIES += cocos_libxml2_static
    LOCAL_WHOLE_STATIC_LIBRARIES += cocos_libtiff_static
    LOCAL_WHOLE_STATIC_LIBRARIES += cocos_libwebp_static
    LOCAL_WHOLE_STATIC_LIBRARIES += cocos_zlib_static

# define the macro to compile through support/zip_support/ioapi.c
LOCAL_CFLAGS := -Wno-psabi -DUSE_FILE32API
LOCAL_EXPORT_CFLAGS := -Wno-psabi -DUSE_FILE32API

include $(BUILD_STATIC_LIBRARY)

(call import-module,libjpeg)** **(call import-module,libpng)
(call import-module,libtiff)** **(call import-module,libwebp)
$(call import-module,zlib)

编译生成 .so,在打 apk的包
使用命令:
unzip -p pro.android.xx.apk | strings | grep "libpng"
查看你的包的 libpng版本.

1赞

这个已经解决了,参考这个github issue

error: …/…/…/Engine/cocos2d/cocos2dx/platform/third_party/android/prebuilt//zlib/libs/armeabi/libz.a(adler32.o): multiple definition of ‘adler32’
E:/PhoneProject/SVN_Project/GameCore/Android/proj.android/release_jni/obj/local/armeabi/libcocos2d.a(adler32.o): previous definition here
error: …/…/…/Engine/cocos2d/cocos2dx/platform/third_party/android/prebuilt//zlib/libs/armeabi/libz.a(adler32.o): multiple definition of ‘adler32_combine’
E:/PhoneProject/SVN_Project/GameCore/Android/proj.android/release_jni/obj/local/armeabi/libcocos2d.a(adler32.o): previous definition here
error: …/…/…/Engine/cocos2d/cocos2dx/platform/third_party/android/prebuilt//zlib/libs/armeabi/libz.a(crc32.o): multiple definition of ‘get_crc_table’
E:/PhoneProject/SVN_Project/GameCore/Android/proj.android/release_jni/obj/local/armeabi/libcocos2d.a(crc32.o): previous definition here
error: …/…/…/Engine/cocos2d/cocos2dx/platform/third_party/android/prebuilt//zlib/libs/armeabi/libz.a(crc32.o): multiple definition of ‘crc32’
E:/PhoneProject/SVN_Project/GameCore/Android/proj.android/release_jni/obj/local/armeabi/libcocos2d.a(crc32.o): previous definition here
error: …/…/…/Engine/cocos2d/cocos2dx/platform/third_party/android/prebuilt//zlib/libs/armeabi/libz.a(crc32.o): multiple definition of ‘crc32_combine’
E:/PhoneProject/SVN_Project/GameCore/Android/proj.android/release_jni/obj/local/armeabi/libcocos2d.a(crc32.o): previous definition here
error: …/…/…/Engine/cocos2d/cocos2dx/platform/third_party/android/prebuilt//zlib/libs/armeabi/libz.a(deflate.o): multiple definition of ‘deflateSetDictionary’
E:/PhoneProject/SVN_Project/GameCore/Android/proj.android/release_jni/obj/local/armeabi/libcocos2d.a(deflate.o): previous definition here

你好我按照您的方式修改 但是出现这个错误 请问下怎么修改?

是否修改了.mk文件呢?

你好,我用那个方法试了但是还是报错/Users/PandaSoul/Documents/All_Cocos2d/cocos/All_Cocos2d/cocos2dx/aiyangcheng/pro.android-studio/app/…/…/libs/cocos2dx/platform/third_party/android/prebuilt/libpng/libs/armeabi/libpng.a(pngrutil.o):pngrutil.c:function png_decompress_chunk.constprop.5: error: undefined reference to ‘inflateReset2’
collect2: error: ld returned 1 exit status

引擎版本有点老,因为是12年的游戏 cocos2d-2.0-x-2.0.2

替换了libpng 和libzlib 也改了mk文件,还是报错,这个还能解决吗,重写游戏不太现实。

你好,可以帮忙回复一下吗