关于Android开发中Java对于.so库的调用

现在在一款Android系统的手持机上开发一个软件。手持机的厂家提供了一个SDK,包括一个jar包(对于里面的.class文件中的接口有详细介绍)和一个.so库(没有源码... 现在在一款Android系统的手持机上开发一个软件。
手持机的厂家提供了一个SDK,包括一个jar包(对于里面的.class文件中的接口有详细介绍)和一个.so库(没有源码,没有.h文件,一个裸的.so库)。他们的说法是有这些足够开发用的,再问就没下文了。。。刚在别的回答里看到的是一个裸的.so库是看不出来接口和函数的……愁。
我电脑的系统是win7,之前没有做过使用.so库的研发,所以现在一头雾水,有没有了解这方面的朋友给说说这是什么原理?我试过反编译.class文件,乱七八糟……只能通过猜测是.so中编译的是有关于手持机底层的东西,然后.class中好像是调用了.so中的函数,这个猜测靠谱么?如果这样猜测是对的,那就是说我只管编Java的源码,在源码中调用jar包里提供的接口,然后再下面就不用管了,jar包和.so直接是联系好了的??

我是赶架子上鸭给整到这个项目来了。。。请懂的朋友解答一下,谢谢!
补充一下:那个.so库的名称是libXyz.so,我在jar包里找到了一个XyzJNI.class,反编译完了是
public class XyzJNI
{
// 一堆变量的设置
static
{
System.loadLibrary("Xyz");
}
}
就这点东西。。反编译没办法。不过里面有System.loadLibrary("Xyz");一句,是不是说我只要调用到了这个.class提供的接口,就不用在源码中单独调.so了?
展开
 我来答
xiaoliluote
2013-10-18 · TA获得超过361个赞
知道小有建树答主
回答量:220
采纳率:0%
帮助的人:65.4万
展开全部
厂家并没有欺骗你或者是含糊你的意思,确实是只提供给你jar包以及 so 库就可以了,做法是这样子的:
1.比如我现在在用net.sqlcipher.database 这个加密库(网上能搜得到的,用于数据库加密)。 那么我现在就在项目用加载这个jar包(在你的项目单击右键-》属性-》Java Build Path-》Libraries-》Add Jars,选择提供给你的jar包,我这里是 sqlcipher.jar,然后在Order and Export勾选你刚刚加载的 jar包。)
2.打开你的workspace目录,在你的项目目录下创建一个文件夹libs(如果文件夹不存在的话),然后将提供给你的so库放入该目录,基本架构就算是搭建好了。
3.进行开发,这里你需要问一下提供给你jar包的厂家,基本的用法,否则的话是无法进行开发的,因为你都不知道怎么去用。 sqlcipher的基本用法是:
SQLiteDatabase.loadLibs(this); //加载 so库文件,你的厂家的方法应该也是类似。
File databaseFile = getDatabasePath(SQLite_toll.DATABASE_NAME);
databaseFile.mkdirs();
databaseFile.delete();
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, helper_SharedPreferences.get_str_sp("database_cipher",this), null);
SQLite_toll initToll = new SQLite_toll(this, avaSys);
initToll.onCreate(database);
database.close();
//因为我sqlcipher是用于数据库加密的,所以你所看到的都是数据库的一些方法,你厂家提供给你的jar包的用法,你是要去问他们的,或者他们的是否有开源代码,又或者是网上也有很多人使用,那么能搜到相关资料。

根据你补充的提问,那么就是System.loadLibrary(this); ,就可以调用了
百度网友7029910
2013-10-18
知道答主
回答量:8
采纳率:0%
帮助的人:5.9万
展开全部
android掉用c的so包就是通过jni , 应该给你的jar包就是用来调用so包的 。不会让你直接掉so包的放心。so包一般都是为了保证核心代码不被反编译 ,另外就是效率高才会用,或者就是开发游戏 。 他们说够用应该是jar包已经和so包的jni调用接口都调好了 , 你用jar包就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
纪念_末班车
2013-10-18 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:94.1万
展开全部
.so是使用jni技术将底层c/c++实现的部分透明,你只需要调用System.loadLibrary(****)就可以与底层互动,jar是将你java层的代码封装了,你只需要调用就OK了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式