Android11vendor分区程序无法访问system分区问题(CANNOT LINK EXECUTABLE)

问题表现:
CANNOT LINK EXECUTABLE “/vendor/bin/xxx”: library “libxxx.so” not found

功能需求:
在libtinyalsa.so里面添加部分功能代码,同时写了一个服务程序/vendor/bin/yuerin依赖libtinyalsa.so

libtinyalsa.so的默认编译规则:
 cc_library {
      name: "libtinyalsa",
      host_supported: true,
      vendor_available: true,
      vndk: {
          enabled: true,
      },
	  /********其它********/
}

添加的/vendor/bin/yuerin编译规则:
 cc_library {
      name: "yuerin",
      host_supported: true,
      vendor_available: true,
      //vndk: {
      //    enabled: true,
      //}, //这部分放开无法编译通过,原因初步看与libtinyalsa冲突,所以去掉了
	  /********其它********/
}

按上面的编译规则分别编译出如下文件:
/system/lib/libtinyalsa.so
/system/bin/yuerin
/vendor/bin/yuerin

所需要的程序为/vendor/bin/yuerin

在x86模拟器条件下运行/vendor/bin/yuerin是正常的,未出现异常,
在arm开发板上运行/vendor/bin/yuerin却不正常,报错如下:
CANNOT LINK EXECUTABLE “/vendor/bin/xxx”: library “libxxx.so” not found

从字面上看,是/vendor/bin/xxx程序无法访问到libxxx.so,有点神奇,同样的代码,在不同的平台表现竟然不一样。

查询了一些资源找到了解决办法,参考链接

1、将新添加的代码从libtinyalsa.so中分离出来,主要是服务部分,创建一个asla服务库。
2、将服务库及服务程序编译规则按vendor独占方式编译:如下
cc_binary {
name: “yuerinserver”,
proprietary: true, //关键参数,决定资源由vendor独占
/其它*/
}
cc_binary {
name: “libalsa”,
proprietary:true, /关键参数,决定资源由vendor独占/
/其它*/
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android系统设计中,有两个重要的目录,即system目录和vendor目录。system目录存放的是Android系统本身的核心组件和库文件,而vendor目录则存放了设备制造商定制的系统组件和库文件。 Android系统为了确保系统的安全性和稳定性,对于system目录和vendor目录有不同的权限控制。一般情况下,vendor无法直接访问system目录下的so库文件。 这是出于安全性和稳定性的考虑。system目录下的so库文件是由Google官方提供的,并且经过了严格的测试和认证。这些库文件用于实现Android系统的核心功能,如图形处理、输入输出、网络通信等。为了保证系统的稳定性,vendor无法直接修改或替换这些库文件。 而vendor目录下的so库文件则是由设备制造商根据自己的需求和特定硬件设计定制的。这些库文件可能包含了特定硬件的驱动程序、供应商定制的功能等。为了保护制造商的商业机密和知识产权,vendor库文件是不对外公开的,也无法被其他vendor或第三方应用访问。 虽然vendor无法直接访问system目录下的so库,但在某些情况下,vendor可以通过一些特定的接口或伙伴关系与Google进行合作,共享一些特定的API或功能。这需要双方进行协商和合作,并遵循相关的法律和协议。 综上所述,Android系统限制了vendor对system目录下so库的访问,以确保系统的安全性和稳定性,并保护制造商的商业机密。这也是Android生态系统保持多样化并推动创新的重要机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值