在Android NDK中使用pngquant lib(libimagequant)

我想在OS X上使用NDK r10(64位)在我的Android项目中使用pngquant.org/lib上的png量化库。

我在编译库方面取得了进展。 我现在的问题是无法解析size_t类型。 我尝试包含以下文件夹:

LOCAL_C_INCLUDES := $(NDK_TOOLCHAIN)/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9/include 

但这没有用。

我会对包含pngquant的空工作Android项目感兴趣。

任何帮助都非常感谢。

NB对不起更改问题,但我提出的原始问题中有一些不正确的事实。

我没有足够的信息来直接解决您的具体问题,您是否尝试使用独立的工具链?

在为Android构建时,由于您要定位多个体系结构并且工具链有点复杂,因此最好使用NDK中的ndk-build脚本。

我在这里做了一个项目,你可以集成到你的Android项目目录: https : //github.com/android-native-libraries/pngquant-android

原始库正在使用configure脚本,但是我没有扩展这些,而是​​重写了NDK Makefile以直接编译所有的lib源,使用相同的cflags(openmp,sse …)

Android.mk:

 LOCAL_PATH := $(call my-dir) SRC_PATH := pngquant/lib include $(CLEAR_VARS) LOCAL_MODULE := imagequant LOCAL_SRC_FILES := \ $(SRC_PATH)/blur.c \ $(SRC_PATH)/libimagequant.c \ $(SRC_PATH)/mediancut.c \ $(SRC_PATH)/mempool.c \ $(SRC_PATH)/nearest.c \ $(SRC_PATH)/pam.c \ $(SRC_PATH)/viter.c LOCAL_C_INCLUDES := pngquant/lib LOCAL_CFLAGS += -O3 -fno-math-errno -funroll-loops -fomit-frame-pointer -Wall -std=c99 -fopenmp LOCAL_LDFLAGS += -fopenmp ifeq ($(TARGET_ARCH_ABI),x86) LOCAL_CFLAGS += -mtune=atom -msse -mfpmath=sse -mssse3 -DUSE_SSE=1 endif include $(BUILD_SHARED_LIBRARY) 

您可以扩展此Android.mk文件以使用您的源添加您自己的本机库,使用libimagequant:include $(CLEAR_VARS)LOCAL_MODULE:= yourlib LOCAL_SRC_FILES:= yoursources.c LOCAL_C_INCLUDES:= pngquant / lib LOCAL_SHARED_LIBRARIES:= imagequant

 LOCAL_CFLAGS += -O3 -fno-math-errno -funroll-loops -fomit-frame-pointer -Wall -std=c99 -fopenmp LOCAL_LDFLAGS += -fopenmp ifeq ($(TARGET_ARCH_ABI),x86) LOCAL_CFLAGS += -mtune=atom -msse -mfpmath=sse -mssse3 -DUSE_SSE=1 endif include $(BUILD_SHARED_LIBRARY) 

如果您只想将此库与默认设置一起使用,我已经制作了一个可以满足您用途的简单Android库 。

在build.gradle中:

 dependencies { compile 'com.ndahlquist:pngquant-android:0.2' } 

在您的Android应用中:

 File inputPngFile = getYourPng(); File outputPngFile = getOutputFile() new LibPngQuant().pngQuantFile(inputFile, outputFile);