首页 > 代码库 > [转] Ant 编译 Android 项目为 Apk 实战, 常见问题解决
[转] Ant 编译 Android 项目为 Apk 实战, 常见问题解决
补充,自行安装Ant, 配置ant环境变量, 在android 项目 根目录下使用
android update project
可以自动生成 build.xml 和 local.peoperties 文件
//------------------------------------------------------------------------------------------------------------------
1、背景
项目进行到一定程度了,每次发布前,产品要求打包测试,都需要手动从eclipse中导出签名APK,很是麻烦。于是想起了之前探索过的Ant自动签名打包。查看自己之前写的博客Windows系统下Ant自动编译打包并签名Android应用——探索篇,边动手边复习。但是后面遇到了一大串的问题...
2、问题解决过程
1)、libs库中的第三方包
如果项目只是引用了第三方jar包,只要将jar包放入项目libs目录下就可以了,ant编译的时候会自动把第三方jar包加入进去的,没有任何问题。
2)、项目引用了其他library项目
如果项目中引用了其他library项目,在使用android update project命令的时候,会提示你在命令后面添加--subproject参数来将其他引用项目一起update,一开始以为没什么问题,就没走这步,谁知道后面提示找不到library项目的build.xml文件。
BUILD FAILED /Android/SDK/sdk/tools/ant/build.xml:601: Invalid file: /依赖项目/build.xml
提示这个错误,不要着急,毕竟能大概知道原因,就是因为引用的第三方library项目没有build.xml文件吧。没关系,我们对所有第三方项目都执行一次 android update project 命令,让它们根目录下都自动生成 build.xml 和 local.properties 文件,问题迎刃而解。
3)、invalid resource directory name: F:\workspace\Zlib\bin\res/crunch 错误
-code-gen:[mergemanifest] Found Deleted Target 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] invalid resource directory name: F:\workspace\Zlib\bin\res/crunch BUILD FAILEDD:\Android\sdk\tools\ant\build.xml:601: The following error occurred while executing this line:D:\Android\sdk\tools\ant\build.xml:653: The following error occurred while executing this line:D:\Android\sdk\tools\ant\build.xml:698: null returned: 1
遇到这个错误,编译失败,很棘手,完全不知道原因。通过查找资料,发现可能是因为Android SDK版本太新了(我用的是22.6.2),会自动生成crunch目录,而ant在编译时总是不识别bin目录下编译好的资源。
找到两个解决方法:
①、关掉eclipse,因为eclipse自动生成res\bin\crunch目录;去到项目目录下删掉bin文件夹;命令行中执行ant release命令;
②、在ant\tools\build.xml或者项目的build.xml文件中添加
<property name="aapt.ignore.assets" value=http://www.mamicode.com/"<dir>crunch:!.svn:!.git:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~" />
我的做法是先按照①的做法,再在项目的build.xml文件中添加②的属性,也不知道②的屏蔽方法会不会造成其他问题,反正命令行中提示如下
-compile: [javac] Compiling 93 source files to /Users/Rubert/myApp/platforms/android/CordovaLib/ant-build/classes [javac] 警告: [options] 源值1.5已过时, 将在未来所有发行版中删除 [javac] 警告: [options] 目标值1.5已过时, 将在未来所有发行版中删除 [javac] 警告: [options] 要隐藏有关已过时选项的警告, 请使用 -Xlint:-options。 [javac] 注: 某些输入文件使用或覆盖了已过时的 API。 [javac] 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 [javac] 3 个警告 [echo] Creating library output jar file...
4)、遇到java文件编码UTF-8 BOM头签名错误(非法字符 \ufeff或者\65279)
这个问题显而易见,就是因为文件编码UTF-8的签名头的问题,使用文本编辑器将文件重新保存为不带BOM头的UTF-8编码文件,OK。我用的是Sublime Text 2。
3、最后结果
release:BUILD SUCCESSFULTotal time: 1 minute 27 seconds
[转] Ant 编译 Android 项目为 Apk 实战, 常见问题解决