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

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

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

该类(class)非常基础:

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

native 方法位于 my: 中的多个 .so 文件中:

jniLibs > armeabi > libconversions.so
jniLibs > armeabi > libfgtitinit.so

但由于某种原因,我无法读取 native 文件。我认为这可能是构建问题或环境问题。我的 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')
}

最佳答案

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

尝试更换它,希望它能起作用

关于java - 如何在Android Studio中使用.so文件中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39769273/

相关文章:

java - 如何处理 Spring Boot 重定向到/错误?

Android:使用Raw PCM创建Wave文件,Wave文件无法播放

java - 将 OpenSL 添加到安卓

java - 通过发布 xml 从 java 调用 webservice

java - 如何使用 Java 8 按某些标准检查集合中的值是否唯一

android - E/炸药模块 : Failed to load module descriptor class: Didn't find class

android-studio - 在android ndk中如何在一次构建运行中创建多个库(.so)

android - 如何在 Project Tango 中使用实验性网格化 API

java - 在餐厅 OOP 程序中添加菜单小计

android - 将数据从 sqlite 保存并从 Applandeo 库加载到日历 View