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独占/
/其它*/
}

你可能感兴趣的:(Android11,android)