Android通過ant腳本打包帶Library project的方法


     對於Android程序打包,一般可以通過Eclipse進行打包.但如果一個程序需要發布到多個不同渠道的時候,就需要用到Ant腳本輔助打包了.

     但網上很多的android程序(app project)ant腳本一般都只針對一個項目,對於引用了library project的沒有什么有用的資料.

     如果直接按照一個項目的方式去打包,要不會不能成功打進去資源文件,要不不能成功的生成R.java文件,從而導致引用資源報錯拋異常.

     經過查找國外網站和有個cp技術的提醒,可以有兩種方式實現.

     (1)cp技術的方法,對於app project 和 library project,各執行一次aapt命令,但各指向不同的manifest文件,讓其能讀取manifest中的package信息,並生成對應的package下的R.java文件.這樣的問題是兩個R.java會生成app project和 library project的所有的資源id.

<!-- 生成app project的 R.java--> 
<exec
            executable="${aapt}"
            failonerror="true" >

            <arg value="package" />

            <arg value="-m" />
            
            <arg value="--auto-add-overlay" />

            <arg value="-J" />

            <arg value="${out-dir-gen}" />

            <arg value="-M" />

            <arg value="${destdir}\AndroidManifest.xml" />

            <arg value="-S" />

            <arg value="${resource-dir}" />

            <arg value="-S" />

            <arg value="${library-dir}" />
            
            <arg value="-A" />

            <arg value="${asset-dir}" />

            <arg value="-I" />

            <arg value="${android-jar}" />

        </exec>
<!-- 生成liibrary project的 R.java--> 
 <exec
            executable="${aapt}"
            failonerror="true" >

            <arg value="package" />

            <arg value="-m" />
            
            <arg value="--auto-add-overlay" />

            <arg value="-J" />

            <arg value="${out-dir-gen}" />

            <arg value="-M" />

            <arg value="${library-dir}\AndroidManifest.xml" />

            <arg value="-S" />

            <arg value="${resource-dir}" />

            <arg value="-S" />

            <arg value="${library-dir}" />
            
            <arg value="-A" />

            <arg value="${asset-dir}" />

            <arg value="-I" />

            <arg value="${android-jar}" />

        </exec>

 (2)通過使用aapt的參數  --extra-packages. 其參數的說明如下:generate R.java for libraries. Separate libraries with ':'.

所以可以將上面的ant命令合並成一個:

<!-- 生成liibrary project的 R.java--> 
 <exec
            executable="${aapt}"
            failonerror="true" >

            <arg value="package" />

            <arg value="-m" />
            
            <arg value="--auto-add-overlay" />

            <arg value="-J" />

            <arg value="${out-dir-gen}" />

            <arg value="-M" />

            <arg value="${dest-dir}\AndroidManifest.xml" />

            <arg value="-S" />

            <arg value="${resource-dir}" />

            <arg value="-S" />

            <arg value="${library-dir}" />

            <arg value="--extra-packages" />

            <arg value="cn.test" /><!-- Library Project的包名 -->
            
            <arg value="-A" />

            <arg value="${asset-dir}" />

            <arg value="-I" />

            <arg value="${android-jar}" />

        </exec>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM