編輯:關於Android編程
Android打包apk時,有時候需要打各種渠道包,例如 豌豆莢、華為手機市場、小米市場、360市場等,那麼每一種渠道打包時,都需要配置不同的數據元,如果渠道較多,那麼打包也是一個體力活。還有,我們在開發項目中,有測試環境、生產環境、備用環境等,每次打包不同的環境,可能需要修改服務器IP以及端口號,那麼打包也有點麻煩。那麼針對以上這兩種問題,到底有沒有一個合適的方案可以解決呢!答案是肯定的!我們可以采用Ant來實現對Android應用的自動打包。
使用Ant編譯打包Apk,IDE是基於Eclipse,如果你使用的是Android Studio,那麼請看Gradle工具。
Ant安裝以及配置
首先需要在Ant官網下載Ant下載鏈接,下載完成後,解壓到磁盤的某一個跟目錄下,接著需要在環境變量中配置,
在環境變量Path中添加 ;%ANT_HOME%/bin;%ANT_HOME%/lib;其中ANT_HOME是Ant的解壓目錄。例如‘E:\ant\apache-ant-1.9.7-bin\apache-ant-1.9.7’
配置成功後,可以在dos中,輸入命令 ‘ant -version’,如果輸出結果,表示配置成功。展示一下我電腦上的結果截圖,
Ant編譯打包
1. 創建一個Android項目。(具體操作就不多說了)
2. 使用Android SDK命令創建Ant的build.xml。命令‘android update project –path .’
具體步驟: 打開命令行工具,切換路徑到項目所在的目錄,然後使用 android update project –path . 命令,在當前目錄下面創建build.xml文件,注意不要忘掉後面的 ‘.’。
3. 在IDE上刷新工程,可以看到項目根目錄下多了build.xml以及local.properties兩個文件。
local.properties指明了我們的android SDK的目錄。
build.xml則是ant構建的腳本,裡面其實大部分都是寫注釋,這是因為生成的這個build.xml直接引用了android SDK自帶的構建腳本。在自動化打包時,需要添加修改該build.xml文件。
下面列舉build.xml文件的標簽。
1.project標簽。
project標簽是構建文件的根標簽。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">
它有如下屬性:
name屬性:項目名。
default屬性:指定project默認執行時執行的target的名稱,表示默認的運行目標。
basedir屬性:指定項目的基准目錄。
description屬性:項目的描述。
2.target標簽。
target可以看做是一個任務,一個項 目標簽下可以有一個或多個target標簽。一個target標簽可以依賴其他的target標簽。
它有如下屬性: name屬性:指定target元素的名稱。 depends屬性:用於描述target之間的依賴關系。 if屬性:用於驗證指定的屬性是否存在,若不存在,所在target將不會被執行。 unless 屬性:該屬性的功能與 if 屬性的功能正好相反,它也用於驗證指定的屬性是否存在,若不存在,所在 target 將會被執行。 description 屬性:該屬性是關於 target 功能的簡短描述和說明。
3.property 標簽
property 用於定義變量或參數的定義。
它有如下屬性: name屬性:變量名字 value屬性:變量值
4.mkdir標簽
mkdir該標簽用於創建一個目錄,它有一個屬性dir用來指定所創建的目錄名。
5.jar標簽
jar用來生成一個JAR文件。
常用屬性有: dir : 表示要創建目錄的路徑(包含要創建的目錄)。
6.javac標簽
javac該標簽用於編譯一個或一組java文件。
常用屬性有: srcdir : 表示需要編譯的java文件的目標文件夾,一般是項目的src文件夾。 destdir : 表示編譯之後的class文件存放的位置,一般是build/classes。
7.java標簽
java該標簽用來執行編譯生成的.class文件。
8.delete標簽
delete該標簽用於對文件或目錄進行刪除。
PS:Ant的depends屬性指定了target的執行順序。Ant會依照depends屬性中target出現順序依次執行每個target。在執行之前,首先需要執行它所依賴的target。一個target只能被執行一次,即使有多個target依賴於它。如果沒有if或unless屬性,target總會被執行。
build.xml文件內容如下,有兩個文件是需要用戶自己手動創建的,並存放在當前項目目錄下。
ant.properties文件定義一些變量例如keystore密碼,apk存放目錄等;而custom_rules.xml這個文件就是用戶自定義的編譯規則文件。(ant.properties文件和custom_rules.xml文件需要我們手動創建)
ant.properties文件的內容大致如下所示,其中keystore密碼和alias密碼可以不指定(防洩漏),那麼在命令執行的過程中會要求你輸入,
#keystore文件存放目錄 key.store=E:\\me.keystore #keystore別名 key.alias=me_keystore #keystore密碼 key.store.password=******** #組織密碼 key.alias.password=******** #apk.dir表示存放最終生成apk的目錄 apk.dir=./apk #定義項目名稱 app.name=ant_app #渠道號,多個渠道號用逗號分隔 market_channels=91,360,wandoujia,baidu #測試環境服務器配置 test.server.url=192.168.1.110:8080/xinxing #生產環境服務器配置 rel.server.url=188.132.121.121:9000/xinxing #測試環境標識 給apk命名的時候用 test.tag.name=test #生產環境標識 給apk命名的時候用 release.tag.name=release #版本號 version=1.2.1
ant.properties文件,我們創建好以後,其他項目是可以通用的。下面看看最復雜的、也是最難的custom_rules.xml文件的內容,
以上每一段代碼都有注釋,相信仔細看幾遍的,就會看懂。
經過以上幾部操作,我們就可以使用命令打包了。
PS:其中hostconfig.xml是服務地址配置文件,位於‘res/xml’中,打包不同的環境時,就需要修改這個文件。
首先在命令行下,定位到項目所在的目錄,輸入打包命令‘ant deploytest’ (測試環境),等一會,提示如下截圖所示,說明打包成功,
在項目的工作目錄下,有一個‘apk’文件夾,我們打開該文件夾,便會看到,各個渠道包了!截圖如下所示:
我們打生產環境,輸入命名‘ant deployrel’,然後在‘apk’文件夾中,各個渠道包了!截圖如下所示:
到這兒,有個疑問,打包是成功了,但是hostconfig.xml和渠道名稱是不是真的和我們所配置的一致?那麼我們就檢驗一下,反編譯生成的apk,看看裡面的數據。
需要查看apk的xml文件,我們需要apktool.jar,具體操作,詳見Android安全攻防戰,反編譯與混淆技術完全解析
我反編譯了ant_app_baidu_release_201608010442.apk和ant_app_baidu_test_201608010421.apk,分別對比他們中的內容,截圖如下所示:
hostconfig.xml文件對比
AndroidManifest.xml文件對比
可以看出,使用ant打的包和我們的配置是一致的!
補充:當Android項目依賴了其他項目(library)時,在使用ant 打包,需要注意,首先需要進入到library項目所在的目錄,輸入命令 android update lib-project -p ./ (注意是 lib-project);
執行完之後,你會發現第三方工程目錄下多了build.xml文件和local.properties文件。然後你再執行打包命令就可以成功打包了。
總結
使用Android SDK命令生成來build.xml和local.properties,custom_rules.xml和ant.properties任何項目中都可以通用。
現在項目裡面有一個需求,本項目裡面下載的視頻和文檔都不允許通過其他的播放器播放,在培訓機構裡面這樣的需求很多。防止有人交一份錢,把所有的課件就拷給了別人。這樣的事情培訓機
先看下利用wheelview實現滾動隨機選擇號碼效果:直接上代碼 首頁就是dialog顯示不在描述 主要看dialog代碼package com.yskj.jh.whee
本文實例講述了Android簡單Button事件響應綜合提示控件Toast應用。分享給大家供大家參考,具體如下:前面講述了在main.xml裡定義了Button對象,這裡
華為榮耀於8月1號下午正式發布了6.6吋大屏手機華為榮耀NOTE8,那麼想要購買新機的朋友是不是很想知道華為榮耀note8怎麼預約購買呢?下面小編就馬上帶來