在Android NDK中使用pngquantlib (libimagequant)

Use pngquant lib (libimagequant) in Android NDK

本文关键字:pngquantlib libimagequant Android NDK      更新时间:2023-10-16

我正在尝试使用png量化库在pngquant.org/lib在我的Android项目中使用NDK r10(64位)在OS x上

我在编译库方面取得了进展。我现在遇到的问题是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项目感兴趣。

任何帮助都非常感谢。

很抱歉更改了问题,但我原来问的问题中有一些错误的事实。

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

当为Android构建时,因为你有多个目标架构,并且工具链有点复杂,所以最好使用NDK中的NDK -build脚本。

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

原来的库是使用配置脚本,但不是扩展这些,我重写NDK Makefiles直接编译所有的库源,具有相同的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。使用libimagequant来添加你自己的原生库。包括美元(CLEAR_VARS)LOCAL_MODULE:= yourlibLOCAL_SRC_FILES:= yoursources.cLOCAL_C_INCLUDES:= pngquant/libLOCAL_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);