NDK功能不起作用

时间:2015-10-30 11:38:24

标签: java android c++ android-ndk .so

我正在使用具有本机库函数的这个类。
但是函数返回NULL。可能的原因是什么?

  

注意:还有另一个具有NDK功能的类,工作正常。

package com.fgtit.data;

 import android.util.Base64;
 import android.util.Log;

public class Conversions {

private static Conversions mCom=null;

public static Conversions getInstance(){
    if(mCom==null){
        mCom=new Conversions();
    }
    return mCom;
}

public native int StdToIso(int itype,byte[] input,byte[] output);
public native int IsoToStd(int itype,byte[] input,byte[] output);
public native int GetDataType(byte[] input);
public native int StdChangeCoord(byte[] input,int size,byte[] output,int dk);

public String IsoChangeOrientation(byte[] input,int dk){
    int dt=GetDataType(input);
    if(dt==3){
        byte output[] =new byte[512];
        byte stddat[]=new byte[512];
        byte crddat[]=new byte[512];
        IsoToStd(2,input,stddat);
        StdChangeCoord(stddat,256,crddat,dk);
        StdToIso(2,crddat,output);
        return Base64.encodeToString(output,0,378,Base64.DEFAULT);
    }
    return "";
}

public String AllToIso(byte[] input,int dk){
    Log.d("checking", "response");
    switch(GetDataType(input)){
        case 1:{
            byte mTmpData[]=new byte[512];
            byte mIsoData[]=new byte[512];
            StdChangeCoord(input, 256, mTmpData, dk);
            StdToIso(2,mTmpData,mIsoData);
            return Base64.encodeToString(mIsoData,0,378,Base64.DEFAULT);
        }
        case 2:{
            byte mTmpData1[]=new byte[512];
            byte mTmpData2[]=new byte[512];
            byte mIsoData[]=new byte[512];
            IsoToStd(1,input,mTmpData1);
            StdChangeCoord(mTmpData1, 256, mTmpData2, dk);
            StdToIso(2,mTmpData2,mIsoData);
            return Base64.encodeToString(mIsoData,0,378,Base64.DEFAULT);
        }
        case 3:
            return IsoChangeOrientation(input,dk);
    }
    return "nothing";
}

public String AllToStd(byte[] input,int dk){
    switch(GetDataType(input)){
        case 1:{
            byte mTmpData[]=new byte[512];
            StdChangeCoord(input, 256, mTmpData, dk);
            return Base64.encodeToString(mTmpData,0,256,Base64.DEFAULT);
        }
        case 2:{
            byte mTmpData1[]=new byte[512];
            byte mTmpData2[]=new byte[512];
            IsoToStd(1,input,mTmpData1);
            StdChangeCoord(mTmpData1, 256, mTmpData2, dk);
            return Base64.encodeToString(mTmpData2,0,256,Base64.DEFAULT);
        }
        case 3:{
            byte mTmpData1[]=new byte[512];
            byte mTmpData2[]=new byte[512];
            IsoToStd(2,input,mTmpData1);
            StdChangeCoord(mTmpData1, 256, mTmpData2, dk);
            return Base64.encodeToString(mTmpData2,0,256,Base64.DEFAULT);
        }
    }
    return "";
}

static {
    System.loadLibrary("conversions");
}
}

1 个答案:

答案 0 :(得分:1)

我有一次类似的问题,在我离开课堂后只运行库方法。像这样:

public class LibInterface {       静态的       {         的System.loadLibrary("库&#34);       }       public native int get_method(int param); }