一、关于R.java
转自
https://www.aliyun.com/jiaocheng/102966.html
http://www.cnblogs.com/qianxudetianxia/archive/2012/07/04/2573687.html
https://blog.csdn.net/zyh9018/article/details/26254797
总结下来就是
<exec executable="${tools.aapt}" failonerror="true">
<arg value="package" />
<arg value="-m" />
<arg value="-J" />
<arg path="gen" />
<arg value="-M" />
<arg path="AndroidManifest.xml" />
<arg value="-S" />
<arg path="res" />
<arg value="-S" />
<arg path="libProject/res" />
<arg value="-I" />
<arg path="android.jar" />
<arg value="--auto-add-overlay" />
</exec>
<exec executable="${tools.aapt}" failonerror="true">
<arg value="package" />
<arg value="-m" />
<arg value="--non-constant-id" />
<arg value="--auto-add-overlay" />
<arg value="-J" />
<arg path="gen" />
<arg value="-M" />
<arg path="libProject/AndroidManifest.xml" />
<arg value="-S" />
<arg path="res" />
<arg value="-S" />
<arg path="libProject/res" />
<arg value="-I" />
<arg path="android.jar" />
</exec>
注意
1:两次使用的-S顺序不能颠倒,因为以主工程的为准;
2:两次使用的AndroidManifest.xml不同
3:库工程使用了--non-constant-id来使其R.java中的内容不为final
最后会在gen下生成两个包名不同的R.java,内容基本一致(但涉及到包名的不同,而且库工程的R.java不是final的)
二、关于利用ant解决工程依赖
需要注意上面生成R.java时的问题
生成资源时使用
<exec executable="${tools.aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-M" />
<arg value="${in.manifest.file}" />
<arg value="-S" />
<arg value="${in.resource.absolute.dir}" />
<arg value="-S" />
<arg path="${basedir}/appcompat-v7-25.3.1/res" />
<arg value="-A" />
<arg value="${in.asset.absolute.dir}" />
<arg value="-I" />
<arg value="${jar.android}" />
<arg value="-F" />
<arg value="${out.resource.package.absolute.file}" />
<arg value="--auto-add-overlay" />
</exec>
javac编译的时候使用
<javac encoding="utf-8"source="1.5" target="1.5"
debug="false" extdirs="" includeantruntime="false"
destdir="${out.classes.absolute.dir}"
srcdir="."
bootclasspath="${jar.android}"
verbose="${verbose}"
excludes="channel/**/*.java"
>
<src path="${basedir}/libProject/src" />
<classpath>
<fileset dir="${in.external.libs.absolute.dir}" includes="*.jar" />
<fileset dir="${in.external.libs.absolute.dir}" includes="*.zip" />
</classpath>
</javac>
即包含库工程的src
另外需注意主工程的targetSdkVersion应不小于库工程的targetSdkVersion
还需注意库工程的
project.properties中有android.library=true
主工程的
project.properties中有android.library.reference.1=./libProject
如果依赖有多个库工程则还有
android.library.reference.2=./libProject2
android.library.reference.3=./libProject3