鑒于Android市場(chǎng)眾多,基于各種利益考慮,以及未來(lái)app能夠更有針對(duì)性的投放市場(chǎng),肯定是要監(jiān)測(cè)每個(gè)渠道的數(shù)據(jù)的。
如果通過(guò)eclipse每次修改下渠道名,然后再導(dǎo)出包,如果有十多個(gè)渠道要分發(fā),那就得打十多個(gè)包,這無(wú)疑是很費(fèi)力的,程序員的精力不應(yīng)該過(guò)多的耗費(fèi)在這些瑣碎重復(fù)的事情上。這些瑣碎重復(fù)的事情能用機(jī)器來(lái)做最好就讓機(jī)器來(lái)做。
我是一個(gè)比較懶的人,不樂(lè)意做瑣碎重復(fù)的事情。幾個(gè)月前,在網(wǎng)上找了好久,也沒(méi)發(fā)現(xiàn)有能夠進(jìn)行批量多渠道打包的工具,就想著琢磨自己寫(xiě)一個(gè)。以前在外包公司做測(cè)試的時(shí)候?qū)W過(guò)一些批處理命令和perl腳本,不過(guò)忘得差不多了,但是網(wǎng)上搜了下立馬就能回憶起怎么用。經(jīng)過(guò)了三四個(gè)晚上的奮戰(zhàn),總算是把多渠道打包的工具給寫(xiě)出來(lái)了。
功能:
該工具能夠?qū)ndroid工程進(jìn)行編譯,混淆,優(yōu)化,打包,Ant據(jù)說(shuō)也可以,但是不會(huì)用也懶得學(xué)。我廠用的是Umeng的渠道統(tǒng)計(jì),在AndroidManifest.xml文件里添加如下此句
<meta-data android:value="{qudao_tag}" android:name="UMENG_CHANNEL"></meta-data>
即可,把{qudao_tag}填寫(xiě)在配置文件里,工具打包時(shí)會(huì)自動(dòng)替換{qudao_tag}為相應(yīng)的渠道名。
說(shuō)明:
已經(jīng)用了好幾個(gè)月了,基本上是穩(wěn)定了,現(xiàn)在決定把它開(kāi)源出來(lái)下載地址,我想還是有很多人需要的。整個(gè)工具每個(gè)腳本的執(zhí)行過(guò)程如下圖所示(clickMeToStartCompile是需要用戶點(diǎn)擊的,當(dāng)然點(diǎn)擊clickMeToCompile效果也一樣):
混淆主要用的是eclipse自動(dòng)生成的混淆腳本proguard.cfg,但發(fā)現(xiàn)自己做的項(xiàng)目用到了webview以及js調(diào)用,混淆之后js根本找不到相應(yīng)的方法,于是最后加了如下這句才好了
-keep public class * extends android.app.Activity
{
public protected *;
}
,這句其實(shí)就是聲明所有activity里面的public,protected方法都不要混淆;煜,反饋的錯(cuò)誤信息室無(wú)法準(zhǔn)確定位的,但可以根據(jù)錯(cuò)誤反饋的方法通過(guò)混淆時(shí)生成的map找到對(duì)應(yīng)源碼的方法。
用命令行編譯的方式對(duì)認(rèn)識(shí)整個(gè)編譯的過(guò)程是很有幫助的,有興趣的可以看看下,其中還有不完善的地方,有興趣有能力的可以幫忙改善下。