bingoogolapple.github.io icon indicating copy to clipboard operation
bingoogolapple.github.io copied to clipboard

Android 编译 ZBar 解决中文乱码

Open bingoogolapple opened this issue 7 years ago • 3 comments

JNI 相关资料

编译 libiconv

  • 下载并解压 libiconv-1.15.tar.gz
  • cd libiconv-1.15
  • ./configure && make
  • 拷贝 libiconv-1.15 到项目的 jni 目录下

bingoogolapple avatar Jan 06 '18 19:01 bingoogolapple

准备 ZBar

  • 拷贝对应文件到指定目录 image

bingoogolapple avatar Jan 06 '18 20:01 bingoogolapple

修改文件

  • 修改 zbar/qrcode/qrdectxt.c 文件解决中文乱码 image
  • libiconv-1.15/libcharset/config.h 第 14 行「#define HAVE_LANGINFO_CODESET 1」改为「/* #define HAVE_LANGINFO_CODESET 1 */」 image
  • libiconv-1.15/libcharset/lib/localcharset.c 的 195 行「int c;」剪切到 126 行作为「get_charset_aliases (void) 方法体的第一行」 image image
  • 修改 Application.mk 的内容为 image
  • 修改 Android.mk 的内容为
#
# Android NDK makefile 
#
# build - <ndk path>/ndk-build ICONV_SRC=<iconv library src> 
# clean -  <ndk path>/ndk-build clean
#
MY_LOCAL_PATH := $(call my-dir)

# libiconv
include $(CLEAR_VARS)
ICONV_SRC := $(MY_LOCAL_PATH)/libiconv-1.15
LOCAL_PATH := $(ICONV_SRC)

LOCAL_MODULE := libiconv

LOCAL_CFLAGS := \
    -Wno-multichar \
    -D_ANDROID \
    -DLIBDIR="c" \
    -DBUILDING_LIBICONV \
    -DBUILDING_LIBCHARSET \
    -DIN_LIBRARY

LOCAL_SRC_FILES := \
	lib/iconv.c \
	libcharset/lib/localcharset.c \
	lib/relocatable.c

LOCAL_C_INCLUDES := \
	$(ICONV_SRC)/include \
	$(ICONV_SRC)/libcharset \
	$(ICONV_SRC)/libcharset/include

include $(BUILD_SHARED_LIBRARY)

LOCAL_LDLIBS := -llog -lcharset

# libzbarjni
include $(CLEAR_VARS)

LOCAL_PATH := $(MY_LOCAL_PATH)
LOCAL_MODULE := zbarjni
LOCAL_SRC_FILES := zbarjni.c \
		   zbar/img_scanner.c \
		   zbar/decoder.c \
		   zbar/image.c \
		   zbar/symbol.c \
		   zbar/convert.c \
		   zbar/config.c \
		   zbar/scanner.c \
		   zbar/error.c \
		   zbar/refcnt.c \
		   zbar/video.c \
		   zbar/video/null.c \
		   zbar/decoder/code128.c \
		   zbar/decoder/code39.c \
		   zbar/decoder/code93.c \
		   zbar/decoder/codabar.c \
		   zbar/decoder/databar.c \
		   zbar/decoder/ean.c \
		   zbar/decoder/i25.c \
		   zbar/decoder/qr_finder.c \
		   zbar/qrcode/bch15_5.c \
		   zbar/qrcode/binarize.c \
		   zbar/qrcode/isaac.c \
		   zbar/qrcode/qrdec.c \
		   zbar/qrcode/qrdectxt.c \
		   zbar/qrcode/rs.c \
		   zbar/qrcode/util.c

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include \
		    $(LOCAL_PATH)/zbar \
		    $(ICONV_SRC)/include

LOCAL_SHARED_LIBRARIES := libiconv

include $(BUILD_SHARED_LIBRARY)
  • 在模块的 build.gradle 中配置 Android.mk 路径 image

bingoogolapple avatar Jan 06 '18 20:01 bingoogolapple

生成 so 文件

image

bingoogolapple avatar Jan 06 '18 21:01 bingoogolapple