Android最終瘦包與優(yōu)化具體步驟——我的方式

前言

Android優(yōu)化方式侃侃而談?wù)呱醵嘀才郏瑓s可能并沒(méi)有做過(guò)一次惧眠,今記錄吾之方式,待朕回憶于个,IDE基于AS2.3.3氛魁。


工具

AndroidStudio自帶的Analyze,就在IDE上面工具欄中览濒。


方式

  • 對(duì)包大小動(dòng)手
  • 代碼優(yōu)化呆盖、布局優(yōu)化、內(nèi)存優(yōu)化
1.對(duì)包大小動(dòng)手

使用AndroidStudio Build下的分析工具贷笛,先分析出apk哪部分占用最大应又,做出對(duì)應(yīng)的處理,工具顯示如下圖:

image.png

但是這個(gè)只能分析出包大小處在哪里乏苦,我們能做的只是縮小包的體積株扛,分析內(nèi)容大致如下圖:

image.png

從這里可以看出我的apk文件大就大在assets和第三方so包尤筐,我的包大小約為60M,但是這兩個(gè)就占了我80%大小洞就,約為44.1M盆繁,這個(gè)巨驚人,我也驚呆了旬蟋,不可放任其自由發(fā)展:

  • ProGuard
    這個(gè)東西能夠?qū)ava 庫(kù)類中的代碼進(jìn)行壓縮(Shrink),優(yōu)化(Optimize),混淆(Obfuscate),預(yù)檢(Preveirfy)油昂。
      1. 壓縮(Shrink):在壓縮處理這一步中,用于檢測(cè)和刪除沒(méi)有使用的類倾贰,字段冕碟,方法和屬性。
      2. 優(yōu)化(Optimize):在優(yōu)化處理這一步中匆浙,對(duì)字節(jié)碼進(jìn)行優(yōu)化安寺,并且移除無(wú)用指令。
      3. 預(yù)檢(Preveirfy):在預(yù)檢這一步中首尼,主要是在Java平臺(tái)上對(duì)處理后的代碼進(jìn)行預(yù)檢挑庶。
      4. 混淆(Obfuscate):在混淆處理這一步中,使用a,b,c等無(wú)意義的名稱软能,對(duì)類迎捺,字段和方法進(jìn)行重命名。
    參考博客 》》http://blog.csdn.net/shanshan_blog/article/details/53169315
    從以上可以看出混淆這一步可以說(shuō)是很重要的埋嵌,雖然我叫它混淆打包破加,但是它可不只做了混淆這一件事。很遺憾我的當(dāng)前工程出現(xiàn)了不少問(wèn)題雹嗦,我強(qiáng)行在編譯時(shí)蓋住了報(bào)錯(cuò)范舀,在這里用不了混淆這塊,故此沒(méi)探究了罪。
  • 縮減圖片大小
    其實(shí)Android是支持webp格式的圖片的
    0.WebP 的優(yōu)勢(shì)體現(xiàn)在它具有更優(yōu)的圖像數(shù)據(jù)壓縮算法锭环,能帶來(lái)更小的圖片體積,而且擁有肉眼識(shí)別無(wú)差異的圖像質(zhì)量泊藕;同時(shí)具備了無(wú)損和有損的壓縮模式辅辩、Alpha 透明以及動(dòng)畫(huà)的特性,在 JPEG 和 PNG 上的轉(zhuǎn)化效果都相當(dāng)優(yōu)秀娃圆、穩(wěn)定和統(tǒng)一玫锋。操作如下圖
    圖片.png

    右擊給他轉(zhuǎn)換下即可
    我這里使用的方式是:
    1.將圖片放在mimap文件夾中,這是紋理圖文件夾讼呢,據(jù)說(shuō)Mipmap紋理技術(shù)是目前解決紋理分辨率與視點(diǎn)距離關(guān)系的最有效途徑,它會(huì)先將圖片壓縮成很多逐漸縮小的圖片撩鹿。當(dāng)然關(guān)于drawable與mipmap文件夾的爭(zhēng)議是很多的,個(gè)人偏向于mipmap文件夾存放圖片悦屏。
    下面為摘自https://stackoverflow.com/questions/23935810/mipmap-drawables-for-icons%E3%80%82的一段話节沦。

不同設(shè)備上的不同主屏幕啟動(dòng)器應(yīng)用程序顯示各種分辨率的應(yīng)用程序啟動(dòng)器圖標(biāo)键思。當(dāng)應(yīng)用程序資源優(yōu)化技術(shù)為未使用的屏幕密度移除資源時(shí),啟動(dòng)器圖標(biāo)可能會(huì)顯得模糊甫贯,因?yàn)閱?dòng)器應(yīng)用程序必須升級(jí)顯示器的較低分辨率圖標(biāo)吼鳞。為了避免這些顯示問(wèn)題,應(yīng)用程序應(yīng)該使用mipmap/資源文件夾作為啟動(dòng)器圖標(biāo)叫搁。Android系統(tǒng)保留這些資源赔桌,無(wú)論密度剝離,并確保發(fā)射器應(yīng)用程序可以挑選最佳分辨率的圖標(biāo)進(jìn)行顯示常熙。*

2.我用眾所周知的 tinypng
對(duì)文件夾內(nèi)圖片進(jìn)行壓縮纬乍,實(shí)踐證明,這真的是款神器裸卫,這款神器一次性可壓縮20張圖片,壓縮完我習(xí)慣是刷新頁(yè)面纽竣,不然無(wú)法再次壓縮墓贿,它會(huì)直接顯示壓縮失敗。

說(shuō)明:優(yōu)異關(guān)系為:有損webP>tinypng>無(wú)損webP,但是有損webP在一些灰度圖中進(jìn)一步模糊內(nèi)容,譬如加載圖片時(shí)用的placeholder灰色文字圖片蜓氨,故我一直使用的為tinypng.人工壓縮后關(guān)閉編譯時(shí)配置Android默認(rèn)的圖片壓縮聋袋,它不咋地 傳送門(mén)

android {
    …
    buildTypes {
        release {
            crunchPngs false
        }
    }
}
  • so文件夾減少
    通過(guò)大量百度穴吹,知識(shí)匯集幽勒,其中的知識(shí)點(diǎn)涉及cpu abi,最后得出結(jié)論只保留 armeabi-v7a 文件夾港令。 額啥容。。目前還沒(méi)有發(fā)生什么不兼容問(wèn)題顷霹,

至此App大小減小的比較喜人咪惠,貢獻(xiàn)最大的其實(shí)還是so文件夾的減小,現(xiàn)在大小直接看下圖淋淀,剔除了一半多遥昧,很高興。


圖片.png
2. 代碼優(yōu)化

1). Analyze → Inspect Code
我們?cè)趯?xiě)代碼過(guò)程中總有自己的小習(xí)慣朵纷,但是這個(gè)習(xí)慣谷歌爸爸是看不起的炭臭,他要求絕對(duì)的規(guī)范和美觀,所以他給了代碼審查也定義了這個(gè)規(guī)則袍辞,我們只要使用 Analyze → Inspect Code

image.png

從這里我們看出里面都是報(bào)錯(cuò)和警告鞋仍,在這里根據(jù)提醒修改你能使絕大多數(shù)代碼規(guī)范,但是提示不是萬(wàn)能的革屠,不能都改凿试,仁者見(jiàn)仁吧排宰,查看過(guò)程中還發(fā)現(xiàn)了一個(gè)有趣的事兒,如下圖:

image.png

這里它嫌棄我同事寫(xiě)的script代碼放的方式,直接將其判定為錯(cuò)誤那婉,而且還給出明確提示板甘,代碼結(jié)構(gòu)是這樣的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>...</title>
<!--引用百度地圖API-->
<style type="text/css">...</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?key=&v=1.1&services=true"></script>
</head>
<body onload="initMap();">
</body>
<script type="text/javascript">
...
</script>
</html>

2). Analyze → Code Cleanup
這個(gè)直接能對(duì)你的一些代碼進(jìn)行寫(xiě)法調(diào)優(yōu),但是我使用了下详炬,沒(méi)發(fā)現(xiàn)什么有效盐类,不建議使用。

2. 查看ViewTree(Hierarchy Viewer生成樹(shù)圖).

布局樹(shù)圖呛谜,這個(gè)都是大家所知道在跳,什么減少嵌套,多用ViewStub隐岛、include標(biāo)簽復(fù)用猫妙,多用Merge標(biāo)簽合并之類的,其實(shí)大多數(shù)時(shí)候我們都不會(huì)理會(huì)這個(gè)東西聚凹,但是真的會(huì)有層級(jí)過(guò)多而導(dǎo)致崩潰問(wèn)題割坠,所以我們?cè)谧鰞?yōu)化的時(shí)候呢,雖然知道自己改動(dòng)的幾率不大妒牙,但是還是要生成樹(shù)圖圖片然后查看一番彼哼,翻翻有沒(méi)有確實(shí)很過(guò)分的布局,有的話我們必須改掉它湘今。
具體做法:


image.png

按照上圖打開(kāi)監(jiān)視器敢朱。你沒(méi)有看錯(cuò),這個(gè)監(jiān)視器也可以查看data/data文件夾下的數(shù)據(jù)摩瞎,我們知道查看data/data文件夾一般都是越獄手機(jī)或者虛擬機(jī)拴签,這個(gè)也不例外,要想獲取Tree圖必須使用虛擬機(jī)愉豺,下圖是我首頁(yè)Tree圖的大概情況篓吁。


image.png

頁(yè)面那么多,怎么可能一個(gè)個(gè)分析蚪拦,我一般一個(gè)個(gè)點(diǎn)擊Activity頁(yè)面杖剪,觀察這上面的樹(shù)層級(jí),感覺(jué)有點(diǎn)多的就點(diǎn)擊看看結(jié)構(gòu)再對(duì)比實(shí)際視圖修改下驰贷,原則就是不過(guò)分怎么都好說(shuō)盛嘿。
3.內(nèi)存優(yōu)化

內(nèi)存優(yōu)化真的是一個(gè)老大難的問(wèn)題,我百度了很多博客括袒,都是侃侃而談次兆,有些有步驟,可是最后結(jié)論大體都可歸納為 經(jīng)驗(yàn)之談锹锰,有很多有借鑒意義芥炭,可是不是我想要的漓库,我這里也暫時(shí)沒(méi)什么好的干貨,僅做此次研究的記載:
這個(gè)作為最大的參考文章:http://blog.csdn.net/qq_23191031/article/details/63685756
開(kāi)局先看App

圖片.png

就是這種炫酷餅圖园蝠,我沒(méi)用到它
圖片.png

AS上各種顯示渺蒿,反正我沒(méi)搞懂,我就記下我能弄的步驟:
1.將dump下來(lái)的堆快照生成標(biāo)準(zhǔn)hprof文件以能夠讓MAT工具正常打開(kāi)
2.Activity A->ActivityB
image.png

至于MAT比較這里不再贅述彪薛,記住去除虛引用之類的茂装,方可見(jiàn)真文章,
最簡(jiǎn)單的就是A->B->A->B,收集快照,然后打開(kāi)做些操作去除干擾善延,截圖少态,反復(fù)操作幾次,對(duì)比截圖內(nèi)容,這個(gè)東西太耗時(shí)間了易遣。

  • 拓展:

Android代碼內(nèi)存優(yōu)化建議-Android資源篇
http://www.androidperformance.com/2015/07/20/Android-Performance-Memory-AndroidResource.html
Android代碼內(nèi)存優(yōu)化建議-Android官方篇
http://www.androidperformance.com/2015/07/20/Android-Performance-Memory-Google.html#7-%E7%9F%A5%E6%99%93%E5%86%85%E5%AD%98%E7%9A%84%E5%BC%80%E6%94%AF%E6%83%85%E5%86%B5
Android代碼內(nèi)存優(yōu)化建議-OnTrimMemory優(yōu)化
http://www.androidperformance.com/2015/07/20/Android-Performance-Memory-onTrimMemory.html
Android代碼內(nèi)存優(yōu)化建議-Java官方篇
http://www.androidperformance.com/2015/07/20/Android-Performance-Memory-Java.html

待完善...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贩毕,一起剝皮案震驚了整個(gè)濱河市偷溺,隨后出現(xiàn)的幾起案子追逮,更是在濱河造成了極大的恐慌金矛,老刑警劉巖梦谜,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窄驹,死亡現(xiàn)場(chǎng)離奇詭異狗唉,居然都是意外死亡叉钥,警方通過(guò)查閱死者的電腦和手機(jī)摊册,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)肤京,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人茅特,你說(shuō)我怎么就攤上這事忘分。” “怎么了白修?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵妒峦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我兵睛,道長(zhǎng)肯骇,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任祖很,我火速辦了婚禮笛丙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘假颇。我一直安慰自己胚鸯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布笨鸡。 她就那樣靜靜地躺著姜钳,像睡著了一般坦冠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哥桥,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天辙浑,我揣著相機(jī)與錄音,去河邊找鬼泰讽。 笑死例衍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的已卸。 我是一名探鬼主播佛玄,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼累澡!你這毒婦竟也來(lái)了梦抢?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤愧哟,失蹤者是張志新(化名)和其女友劉穎奥吩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蕊梧,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霞赫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肥矢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片端衰。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖甘改,靈堂內(nèi)的尸體忽然破棺而出旅东,到底是詐尸還是另有隱情,我是刑警寧澤十艾,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布抵代,位于F島的核電站,受9級(jí)特大地震影響忘嫉,放射性物質(zhì)發(fā)生泄漏荤牍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一榄融、第九天 我趴在偏房一處隱蔽的房頂上張望参淫。 院中可真熱鬧,春花似錦愧杯、人聲如沸涎才。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耍铜。三九已至邑闺,卻和暖如春棕兼,著一層夾襖步出監(jiān)牢的瞬間陡舅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工靶衍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像剖笙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子籍滴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容