1. 程式人生 > >使用Ant批量打包Android專案

使用Ant批量打包Android專案

參考:http://blog.sina.com.cn/s/blog_74c22b21010173f8.html

補充遇到的問題:沒有先clean專案就去ant打包,在proguard.cfg或者proguard-project.txt檔案中引入了找不到的jar包導致can`t read *.jar無法打包

ant打包其實不難,看裡面的錯誤註釋,然後查詢就可以

1.配置JAVA的環境變數    (參考http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html),    很多Java程式設計師由於使用Eclipse不配置Java環境變數也能正常執行程式碼。但是如果想使用Ant命令批量打包本步驟必不可少。 2.
 下載Ant(這裡的Ant不是eclipseandroid SDk裡面自帶的ant 3. 解壓Ant並配置環境變數 a) 解壓Ant,比如解壓到D:\ant  b) 我的電腦->屬性->高階->環境變數  c) 系統變數新建ANT_HOME,變數值為d:\ant  d) 系統變數新建或修改PATH:將%ANT_HOME%\bin;%ANT_HOME%\lib新增到環境變數的PATH中 (注意以上 路徑均用反斜槓) 4. 驗證ant配置是否正確 在控制檯輸入Cmd 回車, ant 回車,如果出現:    Buildfile: build.xml does not exist!    Build failed    恭喜你已經ant配置成功!!     Ant批量打包的基本思想是,每次打包後自動替換渠道號,然後再次打包從而實現多渠道打包的目的。
但是Ant不支援迴圈,怎樣迴圈打包? 擴充套件包Ant-contrib能輕鬆解決這個問題.可以翻牆的同學可以到http://ant-contrib.sourceforge.net/自行下載,下載後直接把ant-contrib-1.0b3.jar放到Ant的lib資料夾即可. 5. 編寫build.xml  將以下帶有顏色的字型(包括路徑,專案名稱)都改成正確的名稱 <?xml version="1.0" encoding="UTF-8"?> <project name="ThumbPlay" default="help">     <!-- The local.properties file is created and updated by the 'android' tool.
         It contains the path to the SDK. It should *NOT* be checked into          Version Control Systems. -->     <property file="local.properties" />     <!-- The ant.properties file can be created by you. It is only edited by the          'android' tool to add properties to it.          This is the place to change some Ant specific build properties.          Here are some properties you may want to change/update:          source.dir              The name of the source directory. Default is 'src'.          out.dir              The name of the output directory. Default is 'bin'.          For other overridable properties, look at the beginning of the rules          files in the SDK, at tools/ant/build.xml          Properties related to the SDK location or the project target should          be updated using the 'android' tool with the 'update' action.          This file is an integral part of the build system for your          application and should be checked into Version Control Systems.          -->     <property file="ant.properties" />     <!-- The project.properties file is created and updated by the 'android'          tool, as well as ADT.          This contains project specific properties such as project target, and library          dependencies. Lower level build properties are stored in ant.properties          (or in .classpath for Eclipse projects).          This file is an integral part of the build system for your          application and should be checked into Version Control Systems. -->     <loadproperties srcFile="project.properties" />     <!-- quick check on sdk.dir -->     <fail             message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"             unless="sdk.dir"     /> <!-- extension targets. Uncomment the ones where you want to do custom work      in between standard targets --> <!--     <target name="-pre-build">     </target>     <target name="-pre-compile">     </target>     <target name="-post-compile">     </target> -->     <!-- Import the actual build file.          To customize existing targets, there are two options:          - Customize only one target:              - copy/paste the target into this file, *before* the                <import> task.              - customize it to your needs.          - Customize the whole content of build.xml              - copy/paste the content of the rules files (minus the top node)                into this file, replacing the <import> task.              - customize to your needs.          ***********************          ****** IMPORTANT ******          ***********************          In all cases you must update the value of version-tag below to read 'custom' instead of an integer,          in order to avoid having your file be overridden by tools such as "android update project"     -->     <!-- version-tag: 1 --> <taskdef resource="net/sf/antcontrib/antcontrib.properties">  <classpath>    <pathelement location="D:/androidDev/batch-package-tool/ant1.8.3/lib/ant-contrib-1.0b3.jar"/>    </classpath> </taskdef> <import file="${sdk.dir}/tools/ant/build.xml" /> <target name="deploy">   <foreach target="modify_manifest" list="${market_channels}" param="channel" delimiter=",">     </foreach>   </target> <target name="modify_manifest"> <!--<replaceregexp file="AndroidManifest.xml" encoding="utf-8" match="android:value=&quot;(.*)&quot;" replace=""/>-->    <replaceregexp flags="g" byline="false">      <regexp pattern="android:name=&quot;UMENG_CHANNEL&quot; android:value=&quot;(.*)&quot;" />      <substitution expression="android:name=&quot;UMENG_CHANNEL&quot; android:value=&quot;${channel}&quot;" />      <fileset dir="" includes="AndroidManifest.xml" />      </replaceregexp> <!--<property  name="out.release.file" value="${out.absolute.dir}/${channel}.apk"/>-->    <antcall target="release"/> <copy tofile="${gos.path}/ThumbPlay_${channel}.apk">     <fileset dir="${out.absolute.dir}/" includes="ThumbPlay-release.apk" /> </copy> <delete includeEmptyDirs="true">      <fileset dir="${out.absolute.dir}" includes="**/*"/>            </delete> <echo message="==========================="/> </target> </project>

Windows環境下:

6. 配置local.properties     sdk.dir=D:\\androidDev\\android-sdk 改成你的SDK所在的目錄,注意轉義字元

Mac環境下:

6. 配置local.properties     sdk.dir=/opt/adt-bundle-mac/sdk  改成你的SDK所在的目錄
7. 配置ant.properties # the config file for batch package. application.package=com.leyou.thumb           (你的apk檔案的包名) ant.project.name=ThumbPlay                    (你的apk檔案的工程名) java.encoding=utf-8 out.absolute.dir=C:/compile gos.path=Z:/app-version/test                             (打好的渠道包要放到的目的位置) key.store=D:/androidApk/thumbplay/thumbplay.keystore     (keystore檔案路徑) key.store.password=wushenshiji999                        (keystore檔案路徑) key.alias=muzhigame                                      keystore檔案別名) key.alias.password=wushenshiji999                        keystore檔案別名密碼) app_version=1.0.4                                        (要打的渠道包的版本名稱) market_channels=guanwang,shuihu,wushen,shenhua,huawei    (渠道名稱,要以逗號分隔,必須在一行內)
8. 最後一步,修改AndroidManifest.xml檔案: 成功:Android批量打包教程
 以上這一行必須在同一行內,決不能換行,這是由於在build.xml做了如下限定 成功:Android批量打包教程 9.生成渠道包  a)進入工程根目錄,我的為:D:\apps\workspace\ThumbPlay      注意這裡必須要去工程根目錄,因為Ant命令執行需要找到工程根目錄下的build.xml     b)cmd輸入命令:ant deploy 第一次執行或許需要的時間要長些,我的為大約2分50秒     若控制檯最後出現Build Success,說明打包成功     若控制檯最後出現Build Failed,檢視詳細資訊,找出錯誤所在,修改它,然後重新執行命令:ant deploy

可以直接使用Eclipse的ant打包專案

http://blog.csdn.net/gf771115/article/details/19478383

關於ant引用android第三方工程打包的問題

為了幫助網友解決“求教關於ant引用android第三方工”相關的問題,中國學網通過網際網路對“求教關於ant引用android第三方工”相關的解決方案進行了整理,使用者詳細問題包括:使用ant工具:A工程想呼叫B工程中src下的類來進行打包,  注:不是把B工程編譯成jar包,而是在A工程中的built.xml檔案中指定B工程中src的路勁來打包,那位有經驗的高手能給點指引嗎?或者demo  或者思路!!謝謝了!第一次做這個,頭有點大!!,具體解決方案如下:

解決方案1:
哥們,你的問題解決了沒啊?  我也遇到這個問題了

解決方案2:

把B專案設定為Lib:
project->properties->Android->Library->Is Library  這個勾選上。
在A專案中把B專案新增進去:
project->properties->Android->Library->Add..,,裡面把B專案選上。

這樣之後default.properties裡面就會有
android.library.reference.3=../XXXX.XXX.XXXX
的項。

這樣就可以編譯了,編譯的時候會把B專案的程式碼也一起編譯。

如果B專案不作為一個lib來處理,那也就沒辦法了。

解決方案3:
但是現在是想使用ant來打包,所以buid.xml應該怎麼寫

解決方案4:

引用 2 樓 hslinux 的回覆:
把B專案設定為Lib:
project->properties->Android->Library->Is Library 這個勾選上。
在A專案中把B專案新增進去:
project->properties->Android->Library->Add..,,裡面把B專案選上。

這樣之後default.properties裡面就會有
android.library.reference……

你的方法我早用過 是可以的 但不是我們需要的  還是謝謝你!!我問題解決了!   

解決方案5:
怎麼解決的?能否分享下?

解決方案6:
暈。。怎麼解決的都不分享下啊。。。

解決方案7:
不知道語言怎麼表達  有需要加我Q626473306溝通吧

解決方案8:

   <!-- Compile this project's .java files into .class files. -->  
    <target name="compile" depends="dirs, resource-src, aidl">  
         <echo>libs_classpath..${basedir}/libs/</echo> 
        <javac encoding="UTF-8" target="1.6"  extdirs="" srcdir="." 
            destdir="${outdir-classes}" bootclasspath="${android-jar}"
             includeantruntime="on" source="1.6">
         <compilerarg value="-Xlint" />
<!--          第三方的工程 -->
         <src path="${third_lib}/src" />
    <src path="src" />
    <src path="gen" />
<!--     第三方工程裡的匯入包 -->
<!--     <classpath refid="libs_pro"/>  -->
         <classpath refid="libs_classpath"/> 
         
         <src path="${third_lib_2}/src" />
    <src path="src" />
    <src path="gen" />
    <classpath refid="libs_pro_2"/>
     
        </javac> 
        <echo>libs_classpath..${libs_classpath}</echo> 
    </target>  


希望能幫助到你們,但我還是遇到個問題,這個方法可以載入第三方工程的src但無法載入第三方工程的res資源和自定義view的自定義屬性,如果有用到就會編譯不通過。苦惱呀...

解決方案9:

<!--            第三方工程裡的匯入包 -->
<path id="libs_pro">
              <fileset dir="${third_lib}/libs/">            
             <include name="*.jar"/>        
             </fileset>
         </path>

解決方案10:
MD,老子最煩這種人,十萬火急的問,問題解決了,又不分享

解決方案11:
lz  求分享啊!

解決方案12:
我也是這問題 , 加入引用工程之後

-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 FAILED
D:\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



這個路徑老不對,怎麼改啊

解決方案13:
601 653 698 同求

解決方案14:
現在也也遇到這個問題了,求解決方案

通過對資料庫的索引,我們還為您準備了:

問:我的android.jar包是自己寫的,用eclipse打包沒問題,然後我就用android...

答:你修改過以後,需要重新覆蓋你原來的build.xml,至少我們的android專案裡,每次修改後,都需要重新生成這個配置檔案。

===========================================

問:我的android.jar包是自己寫的,用eclipse打包沒問題,然後我就用android...

答:android工程A關聯了另一工程B(可以在build path -->Link Source去關聯) 用ant的時候,方法與單獨build一個工程師沒多大的區別 先把B工程編譯打成jar包(可用Eclipse直接Export出jar包),然後放到A工程下的libs中去 再用ant去buildA工程即可~

===========================================

問:我的android.jar包是自己寫的,用eclipse打包沒問題,然後我就用android...

答:ps :後期熟悉ant的話,可以使用純ant指令碼或者使用另一種更好的自動化打包工具(maven)關鍵程式碼如下:package com.cn.ant; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import...

===========================================

問:現在我有一個java類,一個jar包放在一個資料夾裡,在資料夾外面是build.xm...

答:此檔案為myproperties.xml 在build.xml中加入:

===========================================

問:現在我有一個java類,一個jar包放在一個資料夾裡,在資料夾外面是build.xm...

答:Android本身是支援ant打包專案的,並且SDK中自帶一個build.xml檔案。 通過該檔案,可以對檔案進行編譯、打包、安裝等。並且支援多種方式打包,如debug或者release。 一般的,可以按照如下方法進行操作: 首先建立一個Android工程。 工程建立好後...

===========================================

問:現在我有一個java類,一個jar包放在一個資料夾裡,在資料夾外面是build.xm...

答:android的編譯打包工具

===========================================

問:我自己建了一個java的jar檔案(只有一個類abc)非常簡單就3個函式(publi...

答:能new就說明jar包已經成功匯入,就應該能用,請確認你的類裡面的函式是public的。

===========================================

問:我自己建了一個java的jar檔案(只有一個類abc)非常簡單就3個函式(publi...

答:android的編譯打包工具

===========================================

問:我在第三方應用中用可以,在原始碼環境只可以呼叫jar的類方法,引用資源就...

答:1、把引用的jar包放到專案的libs資料夾 2、展開libs下jar包的的右鍵選單, build path -- add to build path 這樣,在生成專案的時候就會自動引用libs下的jar包

===========================================
D:\\androidDev\\Android的SDK