问题描述
|
我有一个使用jnigraphics的应用程序,但我需要它可用于Android 2.1(因为〜25%的用户仍然拥有该功能。)我正在尝试将其捆绑在一起,但是在链接方面遇到困难。
我的Android.mk如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jnigraphics-prebuilt
LOCAL_SRC_FILES := lib/libjnigraphics.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := yyy
LOCAL_SRC_FILES := yyy.c
LOCAL_SHARED_LIBRARY := jnigraphics-prebuilt
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_LDLIBS += -lm -llog
#LOCAL_CFLAGS += -O3
include $(BUILD_SHARED_LIBRARY)
现在,它可以识别#include <android/bitmap.h>
(在添加C_INCLUDES行之前出现错误),但似乎仍未链接库,因为在构建时,我获得了对(显然)成功包含的标头中符号的未定义引用文件:
Prebuilt : libjnigraphics.so <= jni/lib/
Install : libjnigraphics.so => libs/armeabi/libjnigraphics.so
Compile thumb : yyy <= yyy.c
SharedLibrary : libyyy.so
/home/xxx/w/zzz/obj/local/armeabI/Objs/yyy/yyy.o: In function `Java_yyy_yyy_yyy_MainActivity_yyy\':
/home/xxx/w/zzz/jni/yyy.c:143: undefined reference to `AndroidBitmap_getInfo\'
更新:
解决方案是在LDLIBS -L中提供包含该库的目录,并在LDLIBS -l中提供该库的名称,例如:
LOCAL_LDLIBS += -L$(PROJECT_PATH)/libs/$(TARGET_ARCH_ABI)/ -ljnigraphics -lm -llog
您还必须在使用它的类中加载新嵌入的库,例如:
public native static byte[] doYYY(Bitmap bitmap); static {
System.loadLibrary(\"jnigraphics\");
System.loadLibrary(\"yyy\");
}
非常感谢Richard Puckett提供此解决方案。
更新2:
供应商(以及像CY这样的固件模块)可能会干扰此API,因此不应依赖它。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)