红联Linux门户
Linux帮助

Execute failed: java.io.IOException: Cannot run program "sd

发布时间:2015-07-31 15:22:11来源:csdn作者:catoop

在Linux上使用ant编译打包apk的时候,出现下面的错误及解决方法:


1、/usr/local/android-sdk-linux/tools/ant/build.xml:698: Execute failed: java.io.IOException: Cannot run program "/usr/local/android-sdk-linux/build-tools/22.0.0/aapt": error=2, No such file or directory

BUILD FAILED 
/svcroot/workspace/build/MobileAppAndorid/build.xml:94: The following error occurred while executing this line: 
/usr/local/android-sdk-linux/tools/ant/build.xml:653: The following error occurred while executing this line: 
/usr/local/android-sdk-linux/tools/ant/build.xml:698: Execute failed: java.io.IOException: Cannot run program "/usr/local/android-sdk-linux/build-tools/22.0.0/aapt": error=2, No such file or directory 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041) 
at java.lang.Runtime.exec(Runtime.java:617) 
at org.apache.tools.ant.taskdefs.launcher.Java13CommandLauncher.exec(Java13CommandLauncher.java:58) 
at org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:428) 
at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:442) 
at org.apache.tools.ant.taskdefs.ExecTask.runExecute(ExecTask.java:628) 
at org.apache.tools.ant.taskdefs.ExecTask.runExec(ExecTask.java:669) 
at org.apache.tools.ant.taskdefs.ExecTask.execute(ExecTask.java:495) 
at com.android.ant.AaptExecTask.execute(AaptExecTask.java:699) 
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
at org.apache.tools.ant.Task.perform(Task.java:348) 
at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) 
at com.android.ant.IfElseTask.execute(IfElseTask.java:120) 
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
at org.apache.tools.ant.Task.perform(Task.java:348) 
at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68) 
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
at org.apache.tools.ant.Task.perform(Task.java:348) 
at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:396) 
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
at org.apache.tools.ant.Task.perform(Task.java:348) 
at org.apache.tools.ant.Target.execute(Target.java:435) 
at org.apache.tools.ant.Target.performTasks(Target.java:456) 
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 
at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38) 
at org.apache.tools.ant.Project.executeTargets(Project.java:1248) 
at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:441) 
at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105) 
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
at org.apache.tools.ant.Task.perform(Task.java:348) 
at org.apache.tools.ant.Target.execute(Target.java:435) 
at org.apache.tools.ant.Target.performTasks(Target.java:456) 
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 
at org.apache.tools.ant.Project.executeTarget(Project.java:1364) 
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
at org.apache.tools.ant.Project.executeTargets(Project.java:1248) 
at org.apache.tools.ant.Main.runBuild(Main.java:851) 
at org.apache.tools.ant.Main.startAnt(Main.java:235) 
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 
Caused by: java.io.IOException: error=2, No such file or directory 
at java.lang.UNIXProcess.forkAndExec(Native Method) 
at java.lang.UNIXProcess.<init>(UNIXProcess.java:135) 
at java.lang.ProcessImpl.start(ProcessImpl.java:130) 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022) 
... 59 more 


原因:在64位Linux下打包成APK时缺少x86下C++语言库。
解决:
# yum install -y compat-libstdc++-296.i686
# yum install -y compat-libstdc++-33.i686


2、/usr/local/android-sdk-linux/build-tools/20.0.0/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

-code-gen: 
[mergemanifest] Found modified input file 
[mergemanifest] Merging AndroidManifest files into one. 
[mergemanifest] Manifest merger disabled. Using project manifest only. 
[echo] Handling aidl files... 
[aidl] No AIDL files to compile. 
[echo] ---------- 
[echo] Handling RenderScript files... 
[echo] ---------- 
[echo] Handling Resources... 
[aapt] Generating resource IDs... 
[aapt] /usr/local/android-sdk-linux/build-tools/20.0.0/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory 
 
BUILD FAILED 
/svcroot/workspace/build-app/MobileAppAndorid/build.xml:94: The following error occurred while executing this line: 
/usr/local/android-sdk-linux/tools/ant/build.xml:653: The following error occurred while executing this line: 
/usr/local/android-sdk-linux/tools/ant/build.xml:698: null returned: 127 


解决:
# yum install -y zlib

(yum配置可以参考帖子 http://blog.csdn.net/catoop/article/details/41345471 我用的是RHEL 6.5版本的Linux)


3、[aapt] /android/sdk/build-tools/android-4.4/aapt: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

-code-gen:  
[mergemanifest] Merging AndroidManifest files into one.  
[mergemanifest] Manifest merger disabled. Using project manifest only.  
[echo] Handling aidl files...  
[aidl] No AIDL files to compile.  
[echo] ----------  
[echo] Handling RenderScript files...  
[echo] ----------  
[echo] Handling Resources...  
[aapt] Generating resource IDs...  
[aapt] /android/sdk/build-tools/android-4.4/aapt: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory  


原因:在64位Linux下打包成APK时缺少x86下C++语言库。

解决:
# yum install -y libstdc++.so.6

如果2、3的问题还没有解决,使用下面的命令试试:

# yum install glibc*.i686
# yum install zlib*.i686
# yum install libstdc++.so.6