怎么在android项目中调用dll或so?

bluird 2012-03-13 02:13:28
做一个android项目,需要调用一个开源的ocr功能,提供了dll或so的库。
可是怎么在android项目中调用?
...全文
765 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
langmanxch 2014-06-12
  • 打赏
  • 举报
回复
楼主,在android中JNA怎么调用so文件的?能给个例子不?
cajan2 2013-12-03
  • 打赏
  • 举报
回复
貌似楼主有个JNA的分享 链接怎么不通啊?
bluird 2012-03-15
  • 打赏
  • 举报
回复
我找到一种方法了,用JNA。
JNI太复杂了,javah时总有问题,成功过一次,之后就没对过,原理也很难懂。
http://apps.hi.baidu.com/share/detail/31610125
bluird 2012-03-14
  • 打赏
  • 举报
回复
嗯,谢谢。我再试试~
gavinr 2012-03-14
  • 打赏
  • 举报
回复
好像是不能直接导入的,先按4楼的方法创建jni的so文件,然后在那个so文件中调用第三方的so,参考http://www.360doc.com/content/11/0609/19/1861654_122741977.shtml
hswujingjing 2012-03-14
  • 打赏
  • 举报
回复
如果还不明白 请google Android NDK 编译。。。你就晓得怎么用了。。。
hswujingjing 2012-03-14
  • 打赏
  • 举报
回复
android项目的话 先把xxx.so放到libs/armeabi/下面 没有libs自己建一个。。。
然后代码直接引用System.loadLibrary("xxx");
然后各种public native 方法。。。。。
bluird 2012-03-14
  • 打赏
  • 举报
回复
有没有大牛帮忙解答一下啊?
bluird 2012-03-13
  • 打赏
  • 举报
回复
还有我没看明白调用的是什么库,假如我想要用的是已有的a.dll(a.so也可以)该如何调用?
bluird 2012-03-13
  • 打赏
  • 举报
回复
我在javah时出错“错误: 无法访问android.app.Activity
找不到android.app.Activity的类文件”
如果进到包里面在javah的话提示“错误: 找不到 'NativeExampleActivity' 的类文件。”
menghnhhuan 2012-03-13
  • 打赏
  • 举报
回复
  可以用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文件
bluird 2012-03-13
  • 打赏
  • 举报
回复
直接调吗?应该有些前期的配置吧,还有dll和so都可以调吗?最好给个简单的例子
毛豆先生Max 2012-03-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rightorwrong 的回复:]
System.loadLibrary("");
[/Quote]+1
rightorwrong 2012-03-13
  • 打赏
  • 举报
回复
System.loadLibrary("");
1. 课程介绍Android开发所需要的比较全面的基础知识,原理。这样在随后的课程里或阅读开源的App时能读懂代码。2. 课时的编排使用Google官方的Android Developer CN的分类,删减了对jetpack(Androidx)的相关课题。因为jetpack并不是核心库,国内大部分App都不会使用它。3. 使用Java作为项目例子代码,要学习Android开发,首先得会Java语言,因为Android API的核心代码是用Java编写的,也可以使用Koltin语言,但是当阅读Android源码时会Java语言是绕不过去的。Java代码可以通过Android Studio的菜单 Code - Convert Java File To Kotlin File来转换为Koltin. 4. 主要介绍Android的核心组件,类库. 但是不会详细介绍jetpack的库,因为这个库使用koltin,而且对AS有强依赖,比如升级了AS不得不升级jetpack(androidx)。或者对于低版本的androidx,新版AS干脆不支持;还有就是依赖GMS核心的都不准备讲,只介绍开源的第三方项目,可以发布到华为,小米等国内Android系统的类库。5. 这里只是介绍Android的原生开发,不介绍Flutter,React Native,Hipppy等跨平台框架。选择原生框架的好处就是可以使用系统平台最新的特性,最高的性能,最少的学习成本。当然这些跨平台框架访问系统的一些独有功能还是得通过桥接原生框架调用。Flutter得要学会Dart,Java语言,并且学会它的框架体系API. React Native和Hippy这些H5框架通过JavaScript访问原生功能的框架也得学会JavaScript,还要会Vue,React框架,之后就是Html,Css布局。 这些还需要下载安装开发额外的开发环境。当然它的好处是跨Android,iOS两个平台。童鞋根据自己的项目要求进行取舍。

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧