永发信息网

android libbinder.so在哪个文件加载

答案:2  悬赏:30  手机版
解决时间 2021-03-15 03:49
  • 提问者网友:动次大次蹦擦擦
  • 2021-03-14 23:34
android libbinder.so在哪个文件加载
最佳答案
  • 五星知识达人网友:十年萤火照君眠
  • 2021-03-15 01:07
1. 直接在code里面调用dlopen, dlsym
[objc] view plain copy
my_cam_app->hal_lib.ptr = dlopen("libmmcamera_interface.so", RTLD_NOW);

*(voidvoid **)&(my_cam_app->hal_lib.mm_camera_open) =
dlsym(my_cam_app->hal_lib.ptr, "camera_open");

2. 如果要调用的solib也在当前的android 环境下编译生成,则可以直接在Android.mk加入到LOCAL_SHARED_LIBRARIES变量
[objc] view plain copy
LOCAL_SHARED_LIBRARIES:= \
libdl \
libui \
libutils \
libcutils \
libbinder \
libmedia \
libui \

3. 如果要调用的solib已经是编译好的,则可以采用在Android.mk里加入到LOCAL_LDLIBS
[objc] view plain copy
LOCAL_LDLIBS := -ldl -lutils #要调用的solib
LOCAL_LDLIBS += -L$(LOCAL_PATH)/libs/ #solib的path
全部回答
  • 1楼网友:行雁书
  • 2021-03-15 01:59
binder主要能提供以下一些功能:   用驱动程序来推进进程间的通信。   通过共享内存来提高性能。   为进程请求分配每个进程的线程池。   针对系统中的对象引入了引用计数和跨进程的对象引用映射。   进程间同步调用。 android binder设计与实现 – 设计篇:   目前linux支持的ipc包括传统的管道、system v ipc、即消息队列/共享内存/信号量,以及socket中只有socket支持client-server的通信方式。 当然也可以在这些底层机制上架设一套协议来实现client-server通信,但这样增加了系统的复杂性,在手机这种条件复杂,资源稀缺的环境下可靠性也难以保证。 另一方面是传输性能:   socket作为一款通用接口,其传输效率低,开销大,主要用在跨网络的进程间通信和本机上进程间的低速通信。 消息队列和管道采用存储-转发方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区, 至少有两次拷贝过程。共享内存虽然无需拷贝,但控制复杂,难以使用。 还有一点是出于安全性考虑:   android作为一个开放式,拥有众多开发者的平台,应用程序的来源广泛,确保智能终端的安全是非常重要的。 终端用户不希望从网上下载的程序在不知情的情况下偷窥隐私数据,连接无线网络,长期操作底层设备导致电池很快耗尽等等。传统ipc没有任何 安全措施,完全依赖上层协议来确保。首先传统ipc的接收方无法获得对方进程可靠的uid/pid(用户id/进程id),从而无法鉴别对方身份。   android为每个安装好的应用程序分配了自己的uid,故进程的uid是鉴别进程身份的重要标志。使用传统ipc只能由用户在数据包里填入uid/pid, 但这样不可靠,容易被恶意程序利用。可靠的身份标记只有由ipc机制本身在内核中添加。其次传统ipc访问接入点是开放的,无法建立私有通道。 比如命名管道的名称、system v的键值、socket的ip地址或文件名都是开放的,只要知道这些接入点的程序都可以和对端建立连接,不管怎样都无法 阻止恶意程序通过猜测接收方地址获得连接。   基于以上原因,android需要建立一套新的ipc机制来满足系统对通信方式,传输性能和安全性的要求,这就是binder。 binder基于 client-server通信模式,传输过程只需一次拷贝,为发送发添加uid/pid身份,既支持实名binder也支持匿名binder,安全性高。 面向对象的 binder ipc:   面向对象思想的引入将进程间通信转化为通过对某个binder对象的引用调用该对象的方法,而其独特之处在于binder对象是一个 可以跨进程引用的对象,它的实体位于一个进程中,而它的引用却遍布于系统的各个进程之中。最诱人的是,这个引用和java里引用 一样既可以是强类型,也可以是弱类型,而且可以从一个进程传给其它进程,让大家都能访问同一server,就像将一个对象或引用赋 值给另一个引用一样。binder模糊了进程边界,淡化了进程间通信过程,整个系统仿佛运行于同一个面向对象的程序之中。   面向对象只是针对应用程序而言,对于binder驱动和内核其它模块一样使用c语言实现,没有类和对象的概念。 binder驱动为面向对象的进程间通信提供底层支持。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯