做一个android项目,需要调用一个开源的ocr功能,提供了dll或so的库。
可是怎么在android项目中调用?
------解决方案--------------------
可以用native方法,其实现步骤:
1、在Java中声明native()方法,然后编译;
2、用javah产生一个.h文件;
3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
4、将第三步的.c文件编译成动态链接库文件;
5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。
首先写好JAVA文件
public class NativeExampleActivity extends Activity {
TextView textView01;
private Button btnStart;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnStart = (Button) this.findViewById(R.id.btnStart);
btnStart.setOnClickListener(clickButtonStart);
textView01 = (Button) this.findViewById(R.id.btnStart);
}
private OnClickListener clickButtonStart = new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
textView01.setText("4+5="+addFunction(4, 5));
}
};
static {
try {
Runtime.getRuntime().loadLibrary("org_natives_example_NativeExampleActivity");
} catch (Throwable t) {
}
}
public native int addFunction(int a, int b);
}
然后在工程的bin/classes目录下执行javah -jni org.natives.example.NativeExampleActivity,
就会在根目录下得到一个org_natives_example_NativeExampleActivity.h的文件
然后根据头文件的内容编写com_hode_hodeframework_modelupdate_CheckFile.c文件
#include "com_hode_hodeframework_modelupdate_CheckFile.h"
JNIEXPORT jint JNICALL Java_org_natives_example_NativeExampleActivity_addFunction
(JNIEnv *, jobject, jint a, jint b)
{
return (a + b);
}
把c文件编译成ko文件,push到手机的system/lib目录下。就可以了。
用命令cl -LD org_natives_example_NativeExampleActivity.cpp,可以编译成lib,dll,obj文件
------解决方案--------------------
如果还不明白 请google Android NDK 编译。。。你就晓得怎么用了。。。
------解决方案--------------------
好像是不能直接导入的,先按4楼的方法创建jni的so文件,然后在那个so文件中调用第三方的so,参考http://www.360doc.com/content/11/0609/19/1861654_122741977.shtml