Android的NDK和放大器; FFMPEG:findLibrary返回NULL [英] Android NDK & FFMPEG : findLibrary returned null

查看:838
本文介绍了Android的NDK和放大器; FFMPEG:findLibrary返回NULL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用这建立在NDK的ffmpeg:
roman10的Andr​​oid NDK r9d - ffmpeg的教程

链接显示了如何编译,但其并不清楚如何使用它。任何人都可以指导我?谢谢你。

从我的项目的根NDK的构建后,我才得以产生。所以库中的文件/ armeabi OBJ /本地/ armeabi ..现在我得到的 findLibrary返回null ?现在做什么?

  java.lang.UnsatisfiedLinkError中:无法加载libavutil从装载机dalvik.system.PathClassLoader [DexPathList [zip文件\"/data/app/com.palak.androidffmpegroman-2.apk\"],nativeLibraryDirectories=[/data/app-lib/com.palak.androidffmpegroman-2, /供应商/ lib中/系统/ lib目录]]]:findLibrary返回NULL        在java.lang.Runtime.loadLibrary(Runtime.java:358)
        在java.lang.System.loadLibrary(System.java:526)
        在com.palak.androidffmpegroman.MainActivity< clinit>(MainActivity.java:175)
        在java.lang.Class.newInstanceImpl(本机方法)
        在java.lang.Class.newInstance(Class.java:1208)
        在android.app.Instrumentation.newActivity(Instrumentation.java:1061)
        在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2101)
        在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
        在android.app.ActivityThread.access $ 800(ActivityThread.java:135)
        在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)
        在android.os.Handler.dispatchMessage(Handler.java:102)
        在android.os.Looper.loop(Looper.java:136)
        在android.app.ActivityThread.main(ActivityThread.java:5001)
        在java.lang.reflect.Method.invokeNative(本机方法)
        在java.lang.reflect.Method.invoke(Method.java:515)
        在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
        在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        在dalvik.system.NativeStart.main(本机方法)

我的项目结构:

我的 build_android.sh

 #!/斌/庆典
NDK = $ HOME / NDK / Android的NDK-r10d
SYSROOT = $ NDK /平台/ Android的19 /弓臂/
工具链= $ NDK /工具链/ ARM-Linux的androideabi-4.8 / prebuilt / Linux的x86的
功能build_one
{
须藤的./configure \\
     - preFIX = $preFIX \\
    --enable-共享\\
    --disable静电\\
    --disable-DOC \\
    --disable-ffmpeg的\\
    --disable-ffplay \\
    --disable-ffprobe \\
    --disable-ffserver的\\
    --disable-avdevice \\
    --disable-DOC \\
    --disable-symver命令\\
    --cross- preFIX = $工具链/斌/ ARM-Linux的androideabi- \\
    --target-OS = Linux的\\
    --arch =手臂\\
    --enable-交叉编译\\
    --sysroot = $ SYSROOT \\
    --extra-CFLAGS = - 锇-fpic $ ADDI_CFLAGS\\
    --extra-LDFLAGS =$ ADDI_LDFLAGS\\
    $ ADDITIONAL_CONFIGURE_FLAG
使清洁
使
使安装
}
CPU =手臂
preFIX = $(PWD)/安卓/ $ CPU
ADDI_CFLAGS = - MARM
build_one

我使用NDK R10,ffmpeg的2.5.4,Ubuntu的86。

编辑:Android.mk

  LOCAL_PATH:= /home/palak/NDK/ffmpeg-2.5.4/android/arm包括$(CLEAR_VARS)
LOCAL_MODULE:= libav codeC
LOCAL_SRC_FILES:= LIB / libav codec-56.so
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/包括:
包括$(preBUILT_SHARED_LIBRARY)包括$(CLEAR_VARS)
LOCAL_MODULE:= libavformat流
LOCAL_SRC_FILES:= LIB / libavformat-56.so
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/包括:
包括$(preBUILT_SHARED_LIBRARY)包括$(CLEAR_VARS)
LOCAL_MODULE:= libswscale
LOCAL_SRC_FILES:= LIB / libswscale-3.so
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/包括:
包括$(preBUILT_SHARED_LIBRARY)包括$(CLEAR_VARS)
LOCAL_MODULE:= libavutil
LOCAL_SRC_FILES:= LIB / libavutil-54.so
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/包括:
包括$(preBUILT_SHARED_LIBRARY)包括$(CLEAR_VARS)
LOCAL_MODULE:= libavfilter
LOCAL_SRC_FILES:= LIB / libavfilter-5.so
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/包括:
包括$(preBUILT_SHARED_LIBRARY)包括$(CLEAR_VARS)
LOCAL_MODULE:= libswresample
LOCAL_SRC_FILES:= LIB / libswresample-1.so
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/包括:
包括$(preBUILT_SHARED_LIBRARY)

Android.mk JNI文件夹下:

  LOCAL_PATH:= $(叫我-DIR)包括$(CLEAR_VARS)LOCAL_MODULE:= tutorial01
LOCAL_SRC_FILES:= tutorial01.c
LOCAL_LDLIBS:= -llog -ljnigraphics -lz
LOCAL_SHARED_LIBRARIES:= avformat AV codeC swscale avutil包括$(BUILD_SHARED_LIBRARY)
$(呼叫进口模块,的ffmpeg-2.5.4 /的Andr​​oid / ARM)


解决方案

替换您的

  LOCAL_SHARED_LIBRARIES:= avformat AV codeC swscale avutil

  LOCAL_SHARED_LIBRARIES:= libavformat流libav codeC libswscale libavutil libavfilter libswresample

在Android.mk在你的JNI文件夹中。

和负载像库下方

 静态{  的System.loadLibrary(avutil-54);
  的System.loadLibrary(AV codeC-56);
  的System.loadLibrary(avformat-56);
  的System.loadLibrary(swscale-3);
  的System.loadLibrary(avfilter-5);
  的System.loadLibrary(swresample-1);
  的System.loadLibrary(tutorial01);}

I am using this to build ffmpeg on ndk: roman10's android ndk r9d - ffmpeg tutorial

The link shows how to compile, but its not clear how to use it. Can anybody guide me? Thanks.

After ndk-build from my project root i was able to generate .so files inside libs/armeabi and obj/local/armeabi.. Now I am getting findLibrary returned null?? What to do now?

java.lang.UnsatisfiedLinkError: Couldn't load libavutil from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.palak.androidffmpegroman-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.palak.androidffmpegroman-2, /vendor/lib, /system/lib]]]: findLibrary returned null

        at java.lang.Runtime.loadLibrary(Runtime.java:358)
        at java.lang.System.loadLibrary(System.java:526)
        at com.palak.androidffmpegroman.MainActivity.<clinit>(MainActivity.java:175)
        at java.lang.Class.newInstanceImpl(Native Method)
        at java.lang.Class.newInstance(Class.java:1208)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2101)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)

my project structure:

My build_android.sh

  #!/bin/bash
NDK=$HOME/NDK/android-ndk-r10d
SYSROOT=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86
function build_one
{
sudo ./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU 
ADDI_CFLAGS="-marm"
build_one

I am using Ndk r10, ffmpeg 2.5.4, ubuntu x86.

Edit: Android.mk

LOCAL_PATH:= /home/palak/NDK/ffmpeg-2.5.4/android/arm

include $(CLEAR_VARS)
LOCAL_MODULE:= libavcodec
LOCAL_SRC_FILES:= lib/libavcodec-56.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE:= libavformat
LOCAL_SRC_FILES:= lib/libavformat-56.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE:= libswscale
LOCAL_SRC_FILES:= lib/libswscale-3.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE:= libavutil
LOCAL_SRC_FILES:= lib/libavutil-54.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE:= libavfilter
LOCAL_SRC_FILES:= lib/libavfilter-5.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE:= libswresample
LOCAL_SRC_FILES:= lib/libswresample-1.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

Android.mk under jni folder:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := tutorial01
LOCAL_SRC_FILES := tutorial01.c
LOCAL_LDLIBS := -llog -ljnigraphics -lz 
LOCAL_SHARED_LIBRARIES := avformat avcodec swscale avutil

include $(BUILD_SHARED_LIBRARY)
$(call import-module,ffmpeg-2.5.4/android/arm)

解决方案

Replace your

LOCAL_SHARED_LIBRARIES := avformat avcodec swscale avutil 

with

LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libavutil libavfilter libswresample 

in Android.mk in your Jni folder.

And Load the libraries like below

static {

  System.loadLibrary("avutil-54");
  System.loadLibrary("avcodec-56");
  System.loadLibrary("avformat-56");
  System.loadLibrary("swscale-3");
  System.loadLibrary("avfilter-5");
  System.loadLibrary("swresample-1");
  System.loadLibrary("tutorial01");

}

这篇关于Android的NDK和放大器; FFMPEG:findLibrary返回NULL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆