Подытоживая в одной строке: не все мои libs / armeabi / *. Поэтому
файлы копируются на устройство, когда я запустите мое приложение. Я попытаюсь объяснить.
Я пытаюсь установить 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
в 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. итак
файл. Он находится в at.ac.univie.gameclient / lib / libffmpeg.so
и был скопирован туда автоматически. Где находятся другие файлы .so
и как мне передать их на устройство?
Кроме того, очевидно, что простое копирование их вручную не является моим желаемым решением.