SickWorm的博客

linux中运行zipalign/aapt提示:No such file or directory解决办法

Android, Docker, linux  ·  

最近在用Docker+Jenkins做持续集成(CI),中间有个步骤需要调用zipalign对齐jar包,但我运行zipalign的时候却提示:
No such file or directory。

这就奇怪了,找不到这个二进制文件???百思不得其解。。此时我在Mac和Windows上都是可以运行对应平台的zipalign。

首先,
我怀疑是我下的adt有问题。于是我下了3个版本的adt,都报这个错,排除。

然后,
我怀疑我的Docker虚拟机有问题,我把zipalign扔上阿里云运行,报同样的错误。

接着,
我猜测可能zipalign依赖同个文件夹里面的其他运行文件或so库。于是我整个adt拷过去,问题依然存在。

再然后,
求助谷歌,翻到若干的解决方案:
Add the tools to your PATH, or use the full path to zipalign.
copy the Zipalign file from sdk/build-tools/android-4.4W folder to sdk/tools/
以上皆无法解决。

后来我搜索“Linux no such file or directory原因” 找到:
Linux执行可执行文件提示No such file or directory的解决方法
原来是库不匹配的原因。
再搜索“Linux zipalign no such file or directory” 找到:
sudo apt-get install libc6:i386 libstdc++6:i386 zlib1g:i386

先apt-get update,再安装上面的库,提示找不到。(后来了解到要用dpkg拉i386的软件仓库才可以下载:i386的库。其实64位软件库也有32位的库)
我试着碰运气,直接安装libc++6,173M。(依赖大量32位库。后期实验,只需要安装lib32stdc++6和libc6-i386即可)
安装完成后,提示另一个错误:
error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
继续google,找到:
sudo apt-get install lib32z1
安装,解决。

所以zipalign:No such file or directory的原因是找不到匹配的32位库。
提示这个错误可能是二进制文件错误处理信息不够完善。

版权所有,转载请注明出处:
http://sickworm.com/?p=197

# # # # #