您的位置:首页 > 编程语言

在jni编程中解决第三方so文件编译时被删除的另类方法

2016-04-11 20:07 232 查看
最近在做jni方面的一些尝试,在eclipse下,参考网上的教程,配置了NDK,期间好多小坑,多亏网上牛逼的前辈们给出了这样那样的解决方案,试一试,总有一款能够解决我的问题。但是当我成功配置好NDK,示例hello_jni跑通了,可以在demo中看到本地传过来的数据时,感觉很高兴,呵呵,又掌握了一门新技能,梦想其可以帮我做很多事情。

于是我开始真正的使用,没想到就被这第一个坑给彻底击倒了,折腾两天,试了网络君给出的各种方法,还去认真学习了android.mk文件中命令的格式与写法,但是现实告诉我这些工作都是徒劳的。可能其他同人的确使用这些方法解决了这个问题,但对于我就是不行,要么修改mk文件后,eclipse在run时提示工程中有错误,最让我郁闷的是只说有错误,但是又没有提示出错误在哪里!要么就是虽然编译通过了,但是运行起来发现以前使用正常的百度推送服务缺少libbdpush.so文件。让我这几天惶惶不可终日,连觉也睡不好。就在我要放弃的时候,谁知真的是柳暗花明,在早上起床时想到了一个方法,抱着试试的态度,做了下,我靠,还真的通了,那个兴奋啊!想起两句诗:行至水穷处,坐看云起时。当你勇往直前,到最后竟然发现那是一条绝路,没法走下去了,山穷水尽悲伤失落的心境难免出现。此时不妨往旁边或者回头看看,也许有别的路通往别处:即使根本没有路可走了,往天空看吧!虽然身体在绝境中,但心凉还可以遨游太空,还可以很自在、很愉快地欣赏天与地,体会宽广深远的人生境界。以上写给自己,可以不看,好了下面说解决方法,也许对你不一定有用,但是对我的确起到了作用,如果没用,也别骂娘,体会在逆境中的感觉,当你极度彷徨的时候,也许就会发现,哈哈,原来旁边地上还有一块金子,即使没有,看看天边的太阳,她会带给你无尽的力量。



我是这么做的,将我使用jni的部分打成一个jar包,这个jar包中主要是native部分的代码,但是他提供了一个java接口类,在java接口类中,定义native接口,并static {

System.loadLibrary(“QQQQ”);

}

然后把这个jar包导入调用工程的libs文件夹,在这个工程中使用被调用工程提供的Java接口类,这样就绕开了在调用工程中使用native的编程,也就不会在编译时,出现以前的第三方so文件被删掉的问题,就这么简单的解决了问题。有几个细节要明确一下:1)生成jar包时只需要包含jni中的native代码和java中的接口类,其他文件不需要打到jar包中,包含多了还可能出问题。2)要把被调用工程中生成的so文件拷到调用工程的libs/armeabi目录下。这样就不会有其他问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: