【问题标题】:Use pngquant lib (libimagequant) in Android NDK在 Android NDK 中使用 pngquant 库 (libimagequant)
【发布时间】:2014-08-04 10:09:43
【问题描述】:

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

我在编译库方面取得了进展。我现在遇到的问题是 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 很抱歉更改问题,但我提出的原始问题包含一些不正确的事实。

【问题讨论】:

  • 好吧,如果你正在编译一个 C++ 源文件,你就不能使用 C 特定的标志,反之亦然。

标签: android c++ c android-ndk


【解决方案1】:

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

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

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

原始库使用配置脚本,但我没有扩展这些脚本,而是重写了 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 的源代码: 包括 $(CLEAR_VARS) LOCAL_MODULE := 你的库 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)

【讨论】:

  • 谢谢,我会试试的
【解决方案2】:

如果您只想使用默认设置的这个库,我已经创建了一个simple Android library 可能适合您的目的。

在你的 build.gradle 中:

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

在您的 Android 应用中:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2015-04-26
    • 1970-01-01
    • 2012-10-27
    相关资源
    最近更新 更多