Как получить мои библиотеки .so, скопированные на устройство Android?

Подводя итог в одной строке: Не все мои libs/armeabi/*.so файлы копируются на устройство при запуске моего приложения. Я попытаюсь объяснить.

Структура каталога

Я пытаюсь получить ffmpeg на Android и поэтому имеет следующую структуру для NDK:

 jni ├── Android.mk ├── bambuser_ffmpeg │  ├── Android.mk │  ├── libavcodec.so │  ├── libavcore.so │  ├── libavdevice.so │  ├── libavfilter.so │  ├── libavformat.so │  ├── libavutil.so │  └── libswscale.so └── video ├── Android.mk ├── at_ac_univie_gameclient_video_VideoGLSurfaceView.c ├── at_ac_univie_gameclient_video_VideoGLSurfaceView.h └── at_ac_univie_gameclient_video_VideoGLSurfaceView_GLRenderer.h 

Файлы Android.mk

Файл Android.mk в bambuser_ffmpeg говорит:

 include $(CLEAR_VARS) LOCAL_MODULE := bambuser-libavcodec LOCAL_SRC_FILES := libavcodec.so include $(PREBUILT_SHARED_LIBRARY) # and so on, for all of the above .so files 

Второй файл Android.mk имеет следующее:

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ffmpeg LOCAL_STATIC_LIBRARIES := bambuser-libavcodec bambuser-libavcore bambuser-libavdevice bambuser-libavfilter bambuser-libavformat bambuser-libavutil bambuser-libswscale LOCAL_SRC_FILES := at_ac_univie_gameclient_video_VideoGLSurfaceView.c LOCAL_C_INCLUDES := $(LOCAL_PATH)/../bambuser_ffmpeg/ LOCAL_LDLIBS := -L$(LOCAL_PATH)/../bambuser_ffmpeg -lavcodec -lavcore -lavdevice -lavfilter -lavformat -lavutil -lswscale -llog -lz -lGLESv1_CM include $(BUILD_SHARED_LIBRARY) 

Вывод

Итак, когда я запускаю ./ndk-build , я получаю этот вывод. Выглядит хорошо, не так ли?

 Prebuilt : libavcodec.so <= jni/bambuser_ffmpeg/ Install : libavcodec.so => libs/armeabi/libavcodec.so Prebuilt : libavcore.so <= jni/bambuser_ffmpeg/ Install : libavcore.so => libs/armeabi/libavcore.so Prebuilt : libavdevice.so <= jni/bambuser_ffmpeg/ Install : libavdevice.so => libs/armeabi/libavdevice.so Prebuilt : libavfilter.so <= jni/bambuser_ffmpeg/ Install : libavfilter.so => libs/armeabi/libavfilter.so Prebuilt : libavformat.so <= jni/bambuser_ffmpeg/ Install : libavformat.so => libs/armeabi/libavformat.so Prebuilt : libavutil.so <= jni/bambuser_ffmpeg/ Install : libavutil.so => libs/armeabi/libavutil.so Prebuilt : libswscale.so <= jni/bambuser_ffmpeg/ Install : libswscale.so => libs/armeabi/libswscale.so Install : libffmpeg.so => libs/armeabi/libffmpeg.so 

проблема

Когда я запустил приложение для Android, он попытается загрузить libffmpeg.so . Конечно, мой локальный каталог libs содержит все необходимые библиотеки, поскольку они были созданы / скопированы раньше:

 libs └── armeabi ├── libavcodec.so ├── libavcore.so ├── libavdevice.so ├── libavfilter.so ├── libavformat.so ├── libavutil.so ├── libffmpeg.so └── libswscale.so 

Однако на самом устройстве есть только файл libffmpeg.so . Он находится в at.ac.univie.gameclient/lib/libffmpeg.so и автоматически копируется там. Где находятся другие .so файлы и как их получить на устройстве?

Кроме того, просто ручное копирование их, конечно, не является моим желаемым решением.

Вы абсолютно уверены, что перед загрузкой приложения все ваши библиотеки существуют. Да, я видел, что вы написали, что они есть, но когда вы строите проект jni, он удаляет все ваши существующие файлы в каталоге libs. Итак, обновите, прежде чем загружать его, чтобы дважды проверить.

Intereting Posts