slh*_*hck 7 java-native-interface android shared-libraries android-ndk
总结一行: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
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
第二个`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)
Run Code Online (Sandbox Code Playgroud)
所以,当我跑步时./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
Run Code Online (Sandbox Code Playgroud)
当我运行我的Android应用程序时,它会尝试加载libffmpeg.so.当然,我的本地libs目录包含所有需要的库,因为它们是在之前构建/复制的:
libs
??? armeabi
??? libavcodec.so
??? libavcore.so
??? libavdevice.so
??? libavfilter.so
??? libavformat.so
??? libavutil.so
??? libffmpeg.so
??? libswscale.so
Run Code Online (Sandbox Code Playgroud)
但是,在设备本身上,只有我的libffmpeg.so文件.它驻at.ac.univie.gameclient/lib/libffmpeg.so留在那里并自动复制到那里.其他.so文件在哪里以及如何将它们带到设备?
此外,只是手动复制它们显然不是我想要的解决方案.
在上传应用程序之前,您是否绝对确定所有库都已存在?是的,我看到您写道它们在那里,但是当您构建 jni 项目时,它会删除 libs 目录中的所有现有文件。因此,在上传之前请刷新以再次检查。
| 归档时间: |
|
| 查看次数: |
6190 次 |
| 最近记录: |