如何在Android Studio中的.so文件中使用方法?

时间:2016-09-29 11:39:28

标签: java android android-ndk java-native-interface

我收到了一个Eclipse项目,我已成功导入Android Studio以供使用。唯一的问题是这个项目中的一个类调用项目附带的.so文件中的某个函数。我好几天都无法打电话给那些方法。

这门课非常基础:

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);

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

错误消息是:

cannot resolve corresponding JNI function ....
No JNI_OnLoad found in /data/app-lib/com.example.fpdemo-1/libfgtitinit.so 0x4cc91c70, skipping init

本机方法位于my:

中的几个.so文件中
jniLibs > armeabi > libconversions.so
jniLibs > armeabi > libfgtitinit.so

但由于某种原因,我无法读取原生文件。我认为这可能是构建问题或环境问题。我的Gradle构建文件看起来像这样:

android {
    compileSdkVersion 17
    buildToolsVersion "24.0.2"

    defaultConfig {
        applicationId "com.example.fpdemo"
        minSdkVersion 12
        targetSdkVersion 17
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
   compile 'com.android.support:support-v4:18.0.0'
   compile files('libs/fgtitdevice.jar')
}

1 个答案:

答案 0 :(得分:0)

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);

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

尝试将其替换出来,希望它能够正常使用