1. 程式人生 > >Ant_android Ant 批量多渠道打包(2)

Ant_android Ant 批量多渠道打包(2)

最近研究android裡用ant打多個渠道的apk包,終於搞出頭緒!!走了很多錯路,希望大家不要這樣子!!下面就是個人的幾點總結,希望對大家有幫助:

     首先說的是我用的ant不是eclipse和android SDk裡面自帶的ant,而是從這裡下載的 -- Ant官網http://ant.apache.org/ , 下載Ant,當然第一步就是安裝ant了,步驟如下:

 第一步:安裝 ant ,解壓並配置環境變數

1)         解壓Ant,比如解壓到D:\ant

2)         我的電腦->屬性->高階->環境變數

3)         系統變數新建ANT_HOME,變數值為d:\ant

4)         系統變數新建或修改path,變數值為%ANT_HOME%\bin

大家一定要把ant配置好,否則下面的都是扯淡了,無法順利完成,測試ant是否成功,你可以在控制檯輸入Cmd 回車, ant 回車

如果出現

Buildfile: build.xml does not exist!

Build failed

恭喜你已經ant安裝完畢了!!

第二步:簡單瞭解Android打包步驟就行了,其他的都是扯淡,咱們直奔主題,打包前的準備

利用Ant批量打包的基本思想是,每次打包後自動替換渠道號,然後再次打包

從而實現多渠道打包的目的

這樣帶來了一個問題:Ant不支援迴圈,怎樣迴圈打包?

擴充套件包Ant-contrib能輕鬆解決這個問題

另外Ant-contrib的<var>標籤使用也比原來的變數方便

從而達到僅使用build.xml來實現批量打包

安裝方法:直接把ant-contrib-1.0b3.jar放到Ant的lib資料夾即可

第三步:編寫build.xml,直接上程式碼!!

[java] view plaincopyprint?
  1. <project name="Test"default="release">  
  2.     <!-- ANT環境變數 -->  
  3.     <property environment="env" />  
  4.     <!-- 使用第三方的ant包,使ant支援for迴圈-->  
  5.     <taskdef resource="net/sf/antcontrib/antcontrib.properties">  
  6.         <classpath>  
  7.             <pathelement location="${env.ANT_HOME}/lib/ant-contrib-1.0b3.jar" />  
  8.         </classpath>  
  9.     </taskdef>  
  10.     <!-- 應用名稱 -->  
  11.     <property name="appName" value="${ant.project.name}" />  
  12.     <!-- SDK目錄(獲取作業系統環境變數ANDROID_SDK_HOME的值) -->  
  13.     <property name="sdk-folder" value="${env.ANDROID_SDK_HOME}" />  
  14.     <!-- SDK指定平臺目錄 -->  
  15.     <property name="sdk-platform-folder" value="${sdk-folder}/platforms/android-8" />  
  16.     <!-- SDK中tools目錄 -->  
  17.     <property name="sdk-tools" value="${sdk-folder}/tools" />  
  18.     <!-- SDK指定平臺中tools目錄 -->  
  19.     <property name="sdk-platform-tools" value="${sdk-folder}/platform-tools" />  
  20.     <!-- 使用到的命令(當前系統為windows,如果系統為linux,可將.bat檔案替換成相對應的命令) -->  
  21.     <property name="aapt" value="${sdk-platform-tools}/aapt" />  
  22.     <property name="aidl" value="${sdk-platform-tools}/aidl" />  
  23.     <property name="dx" value="${sdk-platform-tools}/dx.bat" />  
  24.     <property name="apkbuilder" value="${sdk-tools}/apkbuilder.bat" />  
  25.     <property name="jarsigner" value="${env.JAVA_HOME}/bin/jarsigner" />  
  26.     <property name="zipalign" value="${sdk-tools}/zipalign.exe" />  
  27.     <!-- 編譯需要的jar; 如果專案使用到地圖服務則需要maps.jar -->  
  28.     <property name="android-jar" value="${sdk-platform-folder}/android.jar" />  
  29.     <property name="android-maps-jar" value="${sdk-folder}/add-ons/addon_google_apis_google_inc_8/libs/maps.jar" />  
  30.     <!-- -->  
  31.     <property name="channelname" value="" />  
  32.     <property name="channelkey" value="" />  
  33.     <!-- 渠道名:渠道號 -->  
  34.     <property name="key" value="UM:aaaaaa,BAI:bbbb" />  
  35.     <!-- 編譯aidl檔案所需的預處理框架檔案framework.aidl -->  
  36.     <property name="framework-aidl" value="${sdk-platform-folder}/framework.aidl" />  
  37.     <!-- 清單檔案 -->  
  38.     <property name="manifest-xml" value="AndroidManifest.xml" />  
  39.     <!-- 原始檔目錄 -->  
  40.     <property name="resource-dir" value="res" />  
  41.     <property name="asset-dir" value="assets" />  
  42.     <!-- java原始檔目錄 -->  
  43.     <property name="srcdir" value="src" />  
  44.     <property name="srcdir-ospath" value="${basedir}/${srcdir}" />  
  45.     <!-- 外部類庫所在目錄 -->  
  46.     <property name="external-lib" value="libs" />  
  47.     <property name="external-lib-ospath" value="${basedir}/${external-lib}" />  
  48.     <!-- 版本 -->  
  49.     <property name="version" value="3.0" />  
  50.     <!--迴圈打包 -->  
  51.         <target name="deploy">  
  52.             <foreach target="modify_manifest" list="${key}" param="nameandchannel" delimiter=",">  
  53.             </foreach>  
  54.         </target>  
  55.         <target name="modify_manifest">  
  56.             <!-- 獲取渠道名字 -->  
  57.             <propertyregex override="true" property="channelname" input="${nameandchannel}" regexp="(.*):" select="\1" />  
  58.             <!-- 獲取渠道號碼 -->  
  59.             <propertyregex override="true" property="channelkey" input="${nameandchannel}" regexp=":(.*)" select="\1" />  
  60.             <!-- 正則匹配替換渠道號 -->  
  61.             <replaceregexp flags="g" byline="false" encoding="UTF-8">  
  62.                 <regexp pattern='meta-data android:value="(.*)" android:name="app_key"' />  
  63.                 <substitution expression='meta-data android:value="${channelkey}" android:name="app_key"' />  
  64.                 <fileset dir="" includes="AndroidManifest.xml" />  
  65.             </replaceregexp>  
  66.             <antcall target="zipalign" />  
  67.         </target>  
  68.     <!-- 初始化工作 -->  
  69.     <target name="init">  
  70.         <echo>目錄初始化....</echo>  
  71.         <!-- 生成R檔案的相對目錄 -->  
  72.         <var name="outdir-gen" value="gen" />  
  73.         <!-- 編譯後的檔案放置目錄 -->  
  74.         <var name="outdir-bin" value="bin-${channelname}" />  
  75.         <!-- 生成class目錄 -->  
  76.         <var name="outdir-classes" value="${outdir-bin}" />  
  77.         <var name="outdir-classes-ospath" value="${basedir}/${outdir-classes}" />  
  78.         <!-- classes.dex相關變數 -->  
  79.         <var name="dex-file" value="classes.dex" />  
  80.         <var name="dex-path" value="${outdir-bin}/${dex-file}" />  
  81.         <var name="dex-ospath" value="${basedir}/${dex-path}" />  
  82.         <!-- 經過aapt生成的資源包檔案 -->  
  83.         <var name="resources-package" value="${outdir-bin}/resources.ap_" />  
  84.         <var name="resources-package-ospath" value="${basedir}/${resources-package}" />  
  85.         <!-- 未認證apk包 -->  
  86.         <var name="out-unsigned-package" value="${outdir-bin}/${appName}-unsigned.apk" />  
  87.         <var name="out-unsigned-package-ospath" value="${basedir}/${out-unsigned-package}" />  
  88.         <!-- 證書檔案 -->  
  89.         <var name="keystore-file" value=

    相關推薦

    Ant_android Ant 批量多渠道打包(2)

    最近研究android裡用ant打多個渠道的apk包,終於搞出頭緒!!走了很多錯路,希望大家不要這樣子!!下面就是個人的幾點總結,希望對大家有幫助:      首先說的是我用的ant不是eclipse和android SDk裡面自帶的ant,而是從這裡下載的

    android Ant 批量多渠道打包 總結!

    最近研究android裡用ant打多個渠道的apk包,終於搞出頭緒!!走了很多錯路,希望大家不要這樣子!!下面就是個人的幾點總結,希望對大家有幫助:      首先說的是我用的ant不是eclipse和android SDk裡面自帶的ant,而是從這裡下載的 -- Ant

    android Ant 批量多渠道打包

    一直以來都是手動打包android程式,真可謂苦不堪言啊,以前試過用ant打包,但是失敗了,最近剛到新公司,又開始研究ant這玩意了,查閱了網上一些文章,結合自己的情況,硬是要弄出來才行,這裡就作下記錄吧。 1,準備 ant打包自然需要ant,可以去http://an

    gradle打包android (實現外部導入簽名文件、多渠道打包、導入ant腳本)

    gradle打包 tree clu download csdn ssp pes 基礎 net 近期一直在做android自己主動打包,之前已經完畢了用純命令行的形式打包、原生態ant腳本打包。和基於android的SDK的打包。而且實現了多渠道打包,後來同

    Android ANT 多渠道打包解決方案

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

    使用Ant在mac os下實現多渠道打包

    背景 於還在使用Eclipse做為開發工具的同學而言: 由於各種原因,還有部分公司使用Eclipse作為Android開發工具,版本要上線的時候,要上傳渠道包到國內主流應用平臺,如:應用寶,安智市場,百度的三個市場,360,華為等等,但是Eclipse不提供

    Android自動化構建之Ant多渠道打包實踐(下)

    前言 上一篇(Android自動化構建之Ant多渠道打包實踐(上))已經介紹了Android的apk是如何構建的,本篇部落格繼續Ant打包的實踐過程。 整合友盟統計SDK 這裡以友盟統計為例,對各個渠道進行統計,我們需要先整合它的SDK 配置許可權

    使用Ant實現多渠道,多環境打包apk

    #keystore檔案存放目錄 key.store=./epeiwang_keystore #keystore別名 key.alias=epeiwang_keystore #keystore密碼 key.store.password=xxxxxxx #組織密碼 key.alias.passw

    Android採用Ant批量打包

    Ant批量打包的目的是:Android應用市場繁雜,有時候可能需要統計你的app在各個渠道的下載量等資訊,而統計各個渠道時是要做區分的,你需要在專案的配置檔案中新增資料元,來標示我們的應用是在哪個渠道上釋出的。 1、準備工作: 在正式開始Ant打包前,需要下載和配置Ant環

    Android Ant 多渠道打包

    [mw_shl_code=java,true]<project     name="TestMutilChannelApk"     default="release" >     <!-- ANT環境變數 -->     <property environment="env"

    Android開發之Gradle筆記整理2-Gradle常用命令及UMeng多渠道打包實戰

    Title:Android開發之Gradle筆記整理2——Gradle常用命令及UMeng多渠道打包實戰 Date:2015-04-06 21:54:47 Category:Android Develop Tag:技術,生活,Android Develop

    使用Ant批量打包Android專案

    參考:http://blog.sina.com.cn/s/blog_74c22b21010173f8.html 補充遇到的問題:沒有先clean專案就去ant打包,在proguard.cfg或者proguard-project.txt檔案中引入了找不到的jar包導致can

    Android自動化構建之Ant多渠道打包實踐(上)

    前言 Ant是歷史比較悠久的一個自動化構建工具,Android開發者可以通過它來實現自動化構建,也可以實現多渠道打包,關於apk打包的方式一般有Ant、Python、Gradle三種,這三種打包方式都各自有優點和缺點,本篇博文先給大家介紹如何使用Ant來實現自

    Android學習探索之App多渠道打包及動態添加修改資源屬性

    Android App 前言: 關於Android渠道打包是一個比較老的話題,今天主要記錄總結一下多渠道打包以及如果動態配置修改一些資源屬性。今天以公司實際需求為例進行演示,由於項目復用很多公共的業務組件,而且業務組件之間的跳轉采用Scheme協議,每個業務組

    ANDROID STUDIO系列教程六--GRADLE多渠道打包

    tor 等待 time() utf 腳本 manifest file resource 一個 由於國內Android市場眾多渠道,為了統計每個渠道的下載及其它數據統計,就需要我們針對每個渠道單獨打包,如果讓你打幾十個市場的包豈不煩死了,不過有了Gradle,這再也不是事了。

    多渠道打包

    寫上 deb 總結 pro 更強 oncreate 發布應用 ani 產品 環境 OSXAndroidStudio 1.0 多渠道設置 渠道號 以友盟SDK為例,打包多渠道:GooglePlay,小米,友盟,360,豌豆莢,應用寶。在AndroidManifest.xml

    (轉載)Android多渠道打包沒你想的那麽復雜

    mon val comm deb sign time() fff 騰訊 結構 Android多渠道打包沒你想的那麽復雜 Aimerd 關註 2016.06.22 15:55* 字數 1084 閱讀 7649評論 26喜歡 112 今天運營同事給我發了15個應用平

    使用electron進行原生應用的打包(2)---主進程與渲染進程之間的通信

    before 之前 對話 發現 AI == htm 行數據 但是 上一篇講了使用electron進行打包的配置相關文件,這篇主要講electron中很重要的通信方式. 首先解釋一個概念: electron打包的應用包含兩個部分 electron的環境(node),也就

    android-------- 多渠道打包(借助友盟移動統計分析)

    each https get 限制 adl .cn 是我 tle mina 好久沒有發博客了,原因是換工作了,今天端午假期,所以來發一篇博客, 多渠道打包,借助友盟移動統計分析,希望對各位有所幫助 多渠道打包的理解: 渠道包就是要在安裝包中添加渠道信息,也就是chann

    008-ant design roadhogrc 打包

    常用 dev true read form closed 生產 ati http 一、概述 1.1、官方地址以及說明   由於 Ant Design Pro 底層使用的 roadhog 工具,已經將復雜的流程封裝完畢,對於大部分場景,構建打包文件只需要一個命令 road