使用jni接口完成android本地程序的运行--具体的操作
1.在apps目录下拷贝一个最简单的例子,比如hello-jni作为模板,命名为你的应用的名称,然后删除其下的和hello-jni相关的内容;
2.将需要编译的源代码树拷贝到jni目录之下;
3.jni目录下的Android.mk文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS := ...#拷贝所有原始Makefile中的CFLAGS/CPPFLAGS/等等一切命令行标志,包括预编译宏的定义
LOCAL_LDLIBS := ...#拷贝所有的链接时用到的动态库路径,动态库,静态库(-L,-l)
LOCAL_MODULE := ...#最终的供java调用的so名称,省略了lib和.so的
LOCAL_SRC_FILES := ...#所有参与编译的源代码文件
include $(BUILD_SHARED_LIBRARY)
4.在apps的上级目录执行:make APP=XXX 即可
5.注意,不能使用网上著名的打包好的droid-gcc工具来利用-fPIC -shared参数生成动态库,那样的动态库是很难直接使用的,必须做很多后续的工作才可以。其实,ndk的作用也就在于省略了很多所谓的后续工作,它简化了生成动态库的过程
本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271174

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
关于android移动开发
移动开发如今异常火爆,只因为移动装备异常火爆,可是这里有几个问题,拿个手机看电影真的很舒服吗?手机的功能越多越好吗?真的希望ipad能 改变这一切,想看电影,看电子书,想玩玩游戏,你可以选择一款平板电脑而不是一部手机,手机拥有那么多功能真的是一种负担,对于开发人员来 讲也是一种误导,拿moto xt701来讲吧,它根本就不是一部手机,它能打电话吗?它不能!因为它的通话质量十二分差,能把一切噪音放大;它能发 短信吗?它不便!因为电容触摸屏让甚至女人都相对很粗的手指不知道往哪里放!然而它的应用却很多,很多android开发人员一眼相中的就是这款手 机,一件十分有意思的是,有人将网络电话软件装在xt701上,等于完全阉割了它的gsm射频电话功能,然而网络电话应用能改变它的音频功放系统吗 ?还是不能!所以xt701并不是很成功,相比较来讲,我倒是觉得HTC的g4不错,屏幕不是很大,体积也不大,而且你还可以用笔尖触摸屏幕,用起来 比xt701方便多了,即使在比较颠簸的公车上,你也可以一手把着扶手,一手发短信,虽然这方面它比nokia的N系列差很远,然而却比很多android智 能手机要好! an...
-
下一篇
使用jni接口完成android本地程序的运行
最近在开发android相关的程序。可惜啊,android的开发接口都是基于java的,作为一个c开发者,于是我想开发一个c程序,然后想法root掉那个手机,然后使用adb工具将程序拷贝到手机里就可以运行了...想法很好,但是有两个问题,第一,靠点击根本无法运行本地程序;第二,如果程序发布,难道能指望用户将手机寄过来然后帮他们root吗?于是这个方法直接pass掉了。 接下来,想把程序打包到一个基于java的apk中,安装的时候直接将程序复制到和apk相同的目录下,然后由java程序使用exec调用这个本地程序。实验证明,由于权限问题,不可行!后来又想将程序通过apk直接复制到SD卡上,但是通过查看android的源代码发现,SD卡被mount的时候是指定了noexec标志的,也就是说SD卡上的程序无法执行(这是有道理的,因为如果sd卡的程序可以执行的话,随便一个溢出漏洞就可能危害系统...再说,sd卡耗电,又不稳定)...于是,没有办法了!难道在android上开发程序必须用java吗?其实不是这样的!虽然接口是java,但是java明确规定了又jni接口可以调用本地程序的,如此看...
相关文章
文章评论
共有0条评论来说两句吧...