开发中遇见类似标题中提到的,项目引入第三方library project,是个头疼的问题,其实解决这个问题关键点事library project 的R.java的生成,
具体编译生成R.java文件ant脚本如下:
<target name="gen-R" depends="init"> <echo>Generating R.java from the resources...</echo> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-f" /> <arg value="-m" /> <arg value="-J" /> <arg value="${outdir-gen}" /> <arg value="-S" /> <arg value="${resource-dir}" /> <arg value="-S" /> <arg value="${sdklibdir}/res" /> <arg value="-M" /> <arg value="${manifest-xml}" /> <arg value="-I" /> <arg value="${android-jar}" /> </exec> <!-- 编译生成第三方R.java --> <exec executable="${aapt}" failonerror="true"> <arg value="package" /> <arg value="-f" /> <arg value="-m" /> <arg value="-J" /> <arg value="${outdir-gen}" /> <arg value="-S" /> <arg value="${resource-dir}" /> <arg value="-S" /> <arg value="${sdklibdir}/res" /> <arg value="-M" /> <arg value="${sdklibdir}/${manifest-xml}" /> <arg value="-I" /> <arg value="${android-jar}" /> </exec> </target>
下面的一个exec是生成第三方R.java的,唯一的区别在于对应的AndroidManifest.xml文件不一样,仔细对比发现两次执行都要添加我们自己的res路径,这里要说下,如果不这样,第三方资源的id在我们自己的R.java中的数值跟第三方生成的R.java中的对应id的值是不一样的,这样虽然能正常打包,但是当程序执行到对应id的时候就会发现找不到这个id。关于第三方library跟一般jar一样。