如何将我的.so库复制到Android设备?

如何将我的.so库复制到Android设备?,android,java-native-interface,shared-libraries,android-ndk,Android,Java Native Interface,Shared Libraries,Android Ndk,总而言之,不是我所有的libs/armeabi/*。因此当我运行我的应用程序时,文件被复制到设备上。我会尽力解释的 目录结构 我正在尝试将ffmpeg安装到Android上,因此NDK的结构如下: jni ├── Android.mk ├── bambuser_ffmpeg │   ├── Android.mk │   ├── libavcodec.so │   ├── libavcore.so │   ├── libavdevice.so │   ├── libavfilter.so │  

总而言之,不是我所有的
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\u ffmpeg
中的
Android.mk
文件显示:

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
但是,在设备本身上,只有我的
libffmpeg.so
文件。它位于
at.ac.univie.gameclient/lib/libffmpeg.so中,并自动复制到那里。其他
.so
文件在哪里?如何将它们发送到设备


而且,仅仅手动复制它们显然不是我想要的解决方案。

在上传应用程序之前,您是否绝对确定所有库都在那里。是的,我看到你写了它们在那里,但是当你构建jni项目时,它会删除libs dir中所有现有的文件。因此,在上传前刷新,只是为了再次检查。

@好吧,要从格式不好的问题中脱颖而出:在上传应用程序之前,请绝对确保所有库都在那里。是的,我看到你写了它们在那里,但是当你构建jni项目时,它会删除libs dir中所有现有的文件。所以在上传之前刷新一下,只是为了再次检查。你是怎么得到这些文件的。那么文件呢?我正在尝试使用windows和cygwin-1.7.9编译ffmpeg,我不知道如何生成。所以文件形成ffmpeg?请帮助。@Ewoks我没有正确构建JNI项目。我构建并刷新了整个东西和所有的.so文件,正如预期的那样。
libs
└── armeabi
    ├── libavcodec.so
    ├── libavcore.so
    ├── libavdevice.so
    ├── libavfilter.so
    ├── libavformat.so
    ├── libavutil.so
    ├── libffmpeg.so
    └── libswscale.so