一般看到 res crunch,应该就是你在 eclipse 中 project 自己主动编译的文件与 ant 生成文件冲突。仅仅要关掉 eclipse 的自己主动编译。clean 下 project 又一次跑 ant 就可以。 (3)能够留心看下 project.properties 和 local.properties2. 加入代码混淆在工程的 project.properties 文件里有凝视说明怎样打开代码混淆#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 去除 #号就可以,同一时候能够在 proguard-project.txt 添加你须要特殊处理的配置
- [aapt] invalid resource directory name: project文件夹/bin/res crunch
- BUILD FAILED
- sdk/tools/ant/build.xml:649: The following error occurred while executing this line:
- build.xml:694:null returned: 1
改动后,再运行 ant release,你会在输出中看到
- -obfuscate:
- [mkdir] Created dir:project文件夹/bin/proguard
- [jar] Building jar: project文件夹/bin/proguard/original.jar
- [proguard] ProGuard, version 5.2.1
- ...
比如:
其次是在 project 文件夹下新建 ant.properties 文件,里面配置你的签名信息
首先给 apk 签名须要 keystore。详细的生成此处不细讲,简单的说在 eclipse 中选则 project,右键 android tools -> export android application 中有生成选项
3. 签名
注意的问题:project 的 AndroidManifest.xml 中假设配置了 android:debuggable=true,那么即使 ant release 也不会混淆代码
能够看到我用的 proguard 版本号。可是用 ant debug 是没有 proguard,由于仅仅有 release 版本号才须要混淆,具体原因兴许文章会具体讲述。混淆后的 mapping 文件在 bin 文件夹下。
key.store=kestore 文件的路径 key.store.password = 密码 key.alias.password = 密码 key.alias = 别名1. 增加 so 库
二、加入定制化
到此,简单 androidproject 的的 ant 编译打包完毕,很方便。
此时再运行 ant release,在 bin 文件夹下可生成 "project 名 - release.apk"。你终于要的 release 版本号的 apk
Android 应用的 Ant 编译默认是不会编译 jniproject 的,它仅仅会处理 libs 中的库文件。假设你的 libs 中刚好有编译好的 so,那打包好的 apk 似乎能正常执行。在配置好的 jniproject,仅仅要执行 ndk 的 ndk-build 就可以完毕 so 的编译。因此,仅仅要在 build.xml 同文件夹中加入 custom_rules.xml 文件,内容例如以下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <project name="工程名" default="help">
- <target name="-pre-compile">
- <echo>
- ndk build.............................
- </echo>
- <exec executable="${ndk.dir}/ndk-build">
- </exec>
- </target>
- </project>
ndk.dir=ndk 路径
在同文件夹下的 local.properties 中添加一行。指定你的 ndk 文件夹
再次运行 ant release,查看你的 so 库是否已生成 假设你的 jniproject 是作为库 project 存在,方法是一样的。主 project 依赖你的库 project,在库 project 中也生成 build.xml,然后依照上面的方法操作就可以。
2. 调用隐藏 api,增加 android.jar
不少 project 是基于 Android 原生代码改动而来。或者就是想调用系统隐藏的部分 api,就会用到别人编译好的 android.jar,或者 framework.jar 等其他什么名字的库文件,并且会要求载入的顺序在你选择的 android 编译版本号之前。在 eclipse 的 Java Build Path->Libraries 中调整其载入顺序,那么 ant 编译怎么改动呢?还是利用前面编写的 custom_rules.xml,内容例如以下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <project name="hooktest" default="help">
- <property name="project.target.android.jar" value="${sdk.dir}/platforms/${target}/android.jar"
- />
- <target name="-pre-compile">
- <echo>
- set project target class path.............................
- </echo>
- <path id="project.target.class.path">
- <pathelement location="framework.jar" />
- <pathelement location="${project.target.android.jar}" />
- </path>
- <property name="my.project.target.class.path" refid="project.target.class.path"
- />
- <echo message="project.target.class.path:${my.project.target.class.path}"
- />
- </target>
- </project>
假设一个 project 中设置了多个源代码文件夹,不太合适的方法就是先拷贝其他的源代码文件夹到默认的 src 下,在编译完毕后再删除。事实上顺便看看文件拷贝和删除,在多源代码文件夹的 project 中也建立 custom_rules.xml,主要内容例如以下:
3. 一个 project 中多源代码文件夹
- <target name="-pre-build">
- <echo>
- copy file.............................
- </echo>
- <copy todir="${source.absolute.dir}">
- <fileset dir="其他源代码文件夹">
- <include name="**/*.java" />
- <include name="**/*.aidl" />
- </fileset>
- </copy>
- </target>
- <target name="src-clean">
- <echo>
- delete file.............................
- </echo>
- <delete dir="${source.absolute.dir}/拷贝的源代码文件夹" />
- </target>
- <target name="-post-build" depends="src-clean">
- </target>
- <target name="-pre-clean" depends="src-clean">
- </target>
上述代码在运行 ant clean 时也会运行删除拷贝的源代码操作。而在编译前先拷贝源代码。包含 aidl 文件。之后在打包完毕后删除拷贝的源代码文件夹。
一个 project 中的源代码尽量就弄在一个文件夹里吧。其他问题还有如库 project 间的资源引用,假设直接使用默认的 R 文件是没有问题的,可是要是在 eclipse 中利用 build Java Build Path->project 加入了子 project,而且还用了当中的 R 文件来应用资源,那么 ant 打包就还得再继续折腾
1.android 命令具体说明 http://developer.android.com/tools/help/android.html
參考:
这里仅给出了使用 Ant 打包 Android 应用的基本过程和可能问题的解决方法,至于 ant 的使用和打包原理既能够看參考文章。也能够看兴许的补充文章。
结尾:
2.ant 參考手冊3.ant 打包 apk 具体的过程可阅读 sdk/tools/ant/build.xml 文件
https://ant.apache.org/manual/
来源: http://www.bubuko.com/infodetail-2117151.html