大家好,我现在调用so库文件里面的方法时,老是会抛出invcationtargetexception.这个so库文件是我从别人的工程拿过来的应该没有问题,使用so库的文件导出函数的类也是直接拷过来的,代码如下,麻烦大家看看有什么问题?
package com.Andorid.Monitor;
public class H264Decoder {
public native boolean init();
public native int[] decode(byte[] src, int length);
public native void release();
//public native int getSequence();
public native int InitDecoder();
public native int[] getMax();
    public native int UninitDecoder();
    public native int DecoderNal(byte[] in, int insize, int set,byte[] out,int[]wah);
static {
/*
 * 导入.so解码库文件
 */
System.loadLibrary("H264Android");
}
    
}

解决方案 »

  1.   

    补充一下,我已经将libH264Android文件放到工程目录下libs的文件夹中
      

  2.   

    要放在libs->armeabi目录下,不过要看这个so是用什么的编译器编出来的,如果是arm的,就放在armeabi目录下,如果是mips的,放在mipso32下
      

  3.   


    问题已解决;问题出在本地函数的命名上面:
    工程A的包为erlangxiong.opencv.aa,引用本地函数JAVA类为OpenCV的话,jni接口本地函数命名为像JAVA_erlangxiong_opencv_aa_Opencv_fun();也是编译出来的so库文件中的本地接口全名;
    而工程B中若我们直接加入编译好的so库并也用相同的JAVA类OpenCV来引用本地库和接口函数的话,编译打包都能通过,不过实际运行时碰到调用本地函数,程序会按照JAVA_erlangxiong_opencv_bb_Opencv_fun();来寻找so库中的函数,当然就寻找不到了。
    我的做法是:
    1 修改jni接口文件中的本地函数函数名为对应B工程的包和类;
    2 重新用NDK-bulid编译,生成新的so库
    3 so库加入libs/armbe中
    4 编译、打包、安装程序,succeed!~
    这样做的话感觉比较麻烦,启不是每个不同工程需要用库时都要重新编译了?
    有没有其他办法解决呢?
    原文链接
    http://www.eoeandroid.com/thread-60793-1-1.html
    散分了