Как я могу ссылаться на jnigraphics в Android 2.1? - PullRequest
2 голосов
/ 27 мая 2011

У меня есть приложение, которое использует 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");
}

Большое спасибо Ричарду Пукетту за это решение.

Обновление 2:

Возможно, что поставщики (имодов прошивки типа CY) может помешать остроумиеh этот API, поэтому от него не следует зависеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...