android中怎么调用第三方的so动态库啊~在线等...
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中怎么调用第三方的so动态库啊~在线等...相关的知识,希望对你有一定的参考价值。
在网上找了很多资料,参照 的做法。但是运行的时候,一直都是第三方的画面。感觉自己写的没有运行到~这是怎么回事?是android.mk写的有问题吗?下面是mk的代码,irrlicht是第三方的so文件,自己写的是irrlichtSample各种求助啊~~~在线等~~~[mw_shl_code=cpp,true]# # COSOperator.cpp was removed from IRROTHEROBJLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)ANDROID = importgl.cpp android-receiver.cppLOCAL_MODULE := irrlichtSampleLOCAL_ARM_MODE := arm LOCAL_CFLAGS := -O3 -DANDROID_NDK -DDISABLE_IMPORTGL -I./../include/ -I./include/ -I./LOCAL_SRC_FILES := \ $(ANDROID) \ app-android.cpp \ android-activity.cppLOCAL_SHARED_LIBRARIES=irrlichtLOCAL_LDLIBS := -lGLESv1_CM -ldl -lloginclude $(BUILD_SHARED_LIBRARY)include $(LOCAL_PATH)/prebuilt/Android.mk[/mw_shl_code]<a apporig="69285" target="_blank" onclick="javascript:return redirectWrapped(this);" class="thirdAppLink" href="http://www.eoeandroid.com/forum.php?mod=redirect
在目录下自建一个libs文件夹,里面再建armeabi文件夹,把.so后缀的文件拷贝进去,在目录里面添加路径就行了 参考技术A 请问你的问题解决了吗?我是在网上找了个别人移植好的demo,但是需要往里面加东西,修改了irrlicht源码,但是修改后,不起作用,不知道是什么原因?关于Android开发中Java对于.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了?
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); ,就可以调用了 参考技术A android掉用c的so包就是通过jni , 应该给你的jar包就是用来调用so包的 。不会让你直接掉so包的放心。so包一般都是为了保证核心代码不被反编译 ,另外就是效率高才会用,或者就是开发游戏 。 他们说够用应该是jar包已经和so包的jni调用接口都调好了 , 你用jar包就行了 参考技术B .so是使用jni技术将底层c/c++实现的部分透明,你只需要调用System.loadLibrary(****)就可以与底层互动,jar是将你java层的代码封装了,你只需要调用就OK了
以上是关于android中怎么调用第三方的so动态库啊~在线等...的主要内容,如果未能解决你的问题,请参考以下文章
我们是怎么调用android sdk里的库的,android的API有哪些?怎么分类?