1. 程式人生 > >Android ANT 多渠道打包解決方案

Android ANT 多渠道打包解決方案

<span style="font-size:18px;"><!--Android 分渠道打包步驟-->
   
<!--打包之前請確定-->
  ANDROID_HOME  環境變數  即ANDROID_SDK的安裝路徑
  
  如:F:\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk

<!-- 1,在AndroidManifest.xml檔案中新增以下程式碼 -->

<meta-data  android:name="qudao"  android:value="anzhuoshichang" />


<!-- 2,將ant-contrib-1.0b3.jar檔案copy到   Android SDK/tools/lib (android sdk路徑)資料夾下-->

   新增ANT的環境變數    

   如:F:\資料\ANT\apache-ant-1.9.4-bin;

<!-- 3,控制檯cmd命令-->

<sdk路徑>/android update project -p <要打包專案的絕對路徑>   -t   <要打包專案的API版本 <project.properties檔案中target對應的值>>  

如:E:/android-sdk/tools/android update project -p D:\workspaceforandroid\HelloWorld -t android-17

<!-- 4,執行完畢之後重新整理專案 會發現專案的根目錄下多了兩個檔案:build.xml和local.properties  -->


<!-- 5,手動建立與build同級目錄的檔案  ant.properties並新增以下程式碼-->


 key.store=<!--您簽名檔案的絕對路徑  如   C:\Users\Administrator\Desktop\test.keystore  -->
 key.alias=<!-- 證書名稱  -->
 key.store.password=<!-- 金鑰口令-->
 key.alias.password=<!-- 證書密碼-->
 market_channels=<!--渠道名稱集合,以" , "隔開,後面有用到。   如:anzhuoshichang,jifengshichang,baiduyingyongzhongxin 或者是1.0.1.0001,1.0.1.0002,1.0.1.0003。。。。。-->
 app_version=1.0.2<!-- 版本顯示-->

<!-- 6,修改build.xml檔案   在build檔案下面新增以下程式碼  -->


<!-- 需要改動的地方  values值對應打包apk輸出的資料夾 即打包完成後apk檔案的放置處 -->
<property name="out.unaligned.dir" value="C:/Users/Administrator/Desktop/HelloWorld_${app_version}/" />



     <mkdir dir="${out.unaligned.dir}" />
      <target name="modify_update_file">
          <echo> make channel ${channel}</echo>
          
          <replaceregexp file="AndroidManifest.xml"
              match='abcdefg'//要替換的欄位值即meta_data節點的value對應的值,打包時會把該預設值修改成ant.proterties檔案中的渠道版本名稱 ---------需要修改的地方
              replace='${channel}'
             byline="false"
             encoding="utf-8"
         />
        <!--打包apk放置路徑及個渠道名稱     HelloWorld_版本號_渠道名稱_android.apk     -->
      <property name="out.unaligned.file" location="${out.unaligned.dir}/HelloWorld_${app_version}_${channel}_android.apk"/>
         
     </target>
 
     <target name="make_one_channels" depends="savemanifest,modify_update_file,release,replacemanifest,deletebin" description="description">
     </target>
 
     <target name="replacemanifest">
         <echo>replacemanifest</echo>
         <delete file="${basedir}\AndroidManifest.xml"/>
         <copy file="..\temp\build\META-INF\AndroidManifest.xml" todir="${basedir}" encoding="utf-8"/>
     </target>
 
     <target name="savemanifest">
         <echo>savemanifest</echo>
         <copy file="${basedir}\AndroidManifest.xml" todir="..\temp\build\META-INF" encoding="utf-8" />
     </target>
 
     <target name="deletebin">
         <delete dir="${basedir}\bin" />
     </target>
     <!--  classpath的值為ant迴圈類庫 ant-contrib-1.0b3.jar檔案的絕對路徑--> //-------------需要修改的地方
     <taskdef name="foreach" classname="net.sf.antcontrib.logic.ForEach" classpath="E:\\android-sdk\\android-sdk\\tools\\lib\\ant-contrib-1.0b3.jar" />
     <target name="make_channels">
         <foreach target="make_one_channels" list="${market_channels}" delimiter="," param="channel">
         </foreach>
     </target>
  <!--7,開始打包  -->
          <在eclipse中右鍵build檔案選擇 run as 選擇 external Tools Configurations進入配置 點開Targets選項  只選擇  make_channels選項,然後  run   >
  
  <!-- 8,程式碼獲取meta_data節點中的渠道版本名稱-->
    
          PackageInfo p = getPackageManager().getPackageInfo(
	  getPackageName(),PackageManager.GET_META_DATA);
	  Object value =(Object)p.applicationInfo.metaData.get("test");//test為meta_data  節點中的key值
	  結果value即為該渠道的版本名稱  如1.0.1.0001

	  如:
	   <meta-data
            android:name="test"
            android:value="abcdefg" />

   

  <!--打完  收工 -->


若是使用的是Google整合的android  Eclipse,其中包含的有ANT外掛但是eclipse中沒有顯示出來則需要使用命令列來使其出現;

     1,cd eclipse的安裝目錄  
     
     2, eclipse -application org.eclipse.equinox.p2.director -repository http://download.eclipse.org/releases/juno -installIU org.eclipse.ant.ui
     Installing org.eclipse.ant.ui 3.5.400.v20130514-1341.
     

     3,執行完之後eclipse會重啟,如果還是沒有出現,重啟下電腦試試(前提是eclipse\plugins下真的有ant外掛哦!

若是專案有外部依賴包 ,則需修改SDK/tools/ant/build.xml 檔案 ;

   

                       name為aapt.ignore.assets

              value的值是  “&lt;dir&gt;crunch:!.svn:!.git:.*:&lt;dir&gt;_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~”

              這樣就解決了依賴吧無法打進去的問題;