我收到了一个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/