Linux aapt libc++.so no such file or directory

博主在Mac环境下开发移动测试平台时,遇到在Docker中使用aapt命令获取安卓APK信息失败的问题,由于缺少Libc++.so文件导致。解决方案是下载Linux版aapt和对应的Libc++.so,指定LD_LIBRARY_PATH执行命令,从而避免部署整个Android SDK。此方法简化了服务器上的依赖,并提供了一种从Java中调用aapt命令的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     转眼好几个月没有写文章了,最近一直在忙于开发移动测试平台。由于移动测试平台涉及到手机集群,前端页面,后端接口相关功能的开发,同时又需要处理Android和iOS不同系统的差异,不同机型的各种问题。开发过程几乎是一步一个坑,好在我有锲而不舍的精神,兵来将挡,水来土掩,慢慢地有点儿规模了。后续我会陆续把遇到的问题和相关的解决方案总结一下,作为记录,也希望能帮助到有用的人。

     今天的问题是,我在Mac下开发了云测平台,其中的一个功能点是通过aapt来获取安卓应用apk的信息,但是发布上到docker上后,发现功能无法使用。在docker上下载部署android的SDK,而我们只用到一个aapt命令,显然是没有必要的。于是下载了linux的aapt,运行时依然提示:Libc++.so No such file or directory?

      在网上查了好多方案,都无法执行。没有办法,我们也不能放弃不是?于是去谷歌上搜索了一下,最终还是找到了解决方案。

  • 下载最新的android build-tools linux的包,我下载的是Android9的包,百度上好像不容易找到相应的下载地址,还是从谷歌上去下载吧。从里面找到appt,上传到linux指定的目录下,如:/opt/runcmd/下;
  • 从build-tools包下的libs文件夹中找到libc++.so文件,上传到linux下的和aapt相同的目录下。
  • 执行命令的时候 ,按如下方式执行:
$LD_LIBRARY_PATH=/opt/runcmd/  /opt/runcmd/aapt

指定了命令执行的时候去查找的lib的路径,命令就不会报错了,当然你也可以根据自己的需要,添加相关的参数。

如:查看一下应用的信息

$LD_LIBRARY_PATH=/opt/runcmd/ /opt/runcmd/aapt dump badging ./zhongbao.apk
  • 如果你想从java中执行相关的命令,可以按如下方式执行:
  • try{
       String[] getinfocmd ={"/bin/sh","-c","LD_LIBRARY_PATH=/opt/runcmd/  /opt/runcmd/aapt dump badging "+apkpath};
      process =Runtime.getRuntime().exec(getinfocmd);
    BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));   
    String line = "";   
    while ((line = input.readLine()) != null)
     {      
       System.out.println(line);   
     }    
    input.close();  
    }  catch (Exception e){ 
      e.printStackTrace(); 
    }
    

然后读取命令执行结果即可。

   由此可见,我们在开发测试平台的时候 ,如果用到一些安卓的命令的时候 ,可以直接将命令拷到linux机器上,而无需要将所有的SDK部署到服务器上。遇到了相应的问题,直接去谷歌上查询就行了。只要你有决心,方法总比问题多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值