Android開發中APK瘦身步驟
apk瘦身
想辦法較減少apk大小
必要性
同樣功能,apk越小越好,使用者下載動機更大
瞭解apk的組成
- classes.dex:是java原始碼編譯後生成的java位元組碼檔案
- resources.arsc:編譯後的佈局檔案
- AndroidManifest.xml
- assets:目錄可以存放一些配置檔案
- lib目錄下的子目錄armeabi存放的是一些so檔案或者jar包
- META-INF目錄下存放的是簽名信息,用來保證apk包的完整性和系統的安全
- res:apk圖片資源
瞭解apk生成過程
輔助分析工具
- nimbledroid:能夠得知app記憶體使用,網路使用,磁碟輸入/輸出,檔案大小等一些NimbleDroid認為至關重要的資料;
- 註冊
- 登入
- 上傳apk
- 效果圖:”冒泡新聞_檔案分析.png”
瘦身步驟
0.開始大小–>19039kb
1.開啟minifyEnabled(開啟混淆,刪除沒用的java檔案),混淆筆記檢視 Proguard使用注意_billy
–>18447kb
buildTypes { debug { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
Proguard注意
型別轉換錯誤,使用Gson之類的需要注意
-keepattributes Signature
忽略警告
-ignorewarnings
webview中js和原生代碼有互動,保持
橋樑類
不被混淆-keepclassmembers class com.xxx.xxxx.xxxx.HuodongBeBindedToJS { public *; }
第三方包不被混淆
-libraryjars /libs/core.jar -dontwarn com.google.zxing.** -keep class com.google.zxing.** { *;}
常見第三方包
#zxing -libraryjars /libs/core.jar -dontwarn com.google.zxing.** -keep class com.google.zxing.** { *;} #支付寶 -libraryjars /libs/alipay_sdk.jar -dontwarn com.alipay.android.app.** -keep class com.alipay.android.app.** {*;} #友盟 -libraryjars /libs/umeng_sdk.jar -dontwarn com.umeng.** -keep class com.umeng.** { *;} -keepclassmembers class * { public <init>(org.json.JSONObject); } -keep public class com.hyx.maizuo.main.R$*{ public static final int *; } -keep public class com.umeng.fb.ui.ThreadView { } #百度地圖 -libraryjars /libs/baidumapapi.jar -dontwarn com.baidu.mapapi.** -keep class com.baidu.mapapi.** { *;} #fastJson -libraryjars /libs/fastjson-1.1.20.jar -dontwarn com.alibaba.fastjson.** -keep class com.alibaba.fastjson.** { *;} #微信 -libraryjars /libs/libammsdk.jar -dontwarn com.tencent.mm.sdk.** -keep class com.tencent.mm.sdk.** {*;}
2.開啟shrinkResources(去除無用資源),同時去除工程中臨時展示的圖片
–>17121kb
debug {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg'
}
3.刪除無用的語言資源–>減少100kb左右
defaultConfig {
...
resConfigs "zh"
...
}
4.使用tinypng有失真壓縮
- TinyPNG 使用一種智慧有失真壓縮技術(通過降低圖片中的顏色數量,來減少儲存圖片所需要的資料)來降低 PNG 圖片的大小。這樣的壓縮對圖片的效果影響是很小的,但是可以大大降低圖片的大小,並且還能保持 PNG 的 alpha 透明度
- 因為 TinyPNG 將 PNG 圖片壓縮成 8 位的 PNG(而不是24位),所以它的壓縮比例非常高,至少都有 50% 以上的壓縮比例,有些甚至可以達到70%,並且壓縮之後的圖片和原圖人眼基本看不出區別。
5.對於非透明的大圖,jpg將會比png的大小有顯著的優勢,在啟動頁,活動頁等之類的大圖展示區採用jpg將是非常明智的選擇–>15615kb
* 使用格式工廠進行轉換
* 瞭解常見圖片格式:http://baike.baidu.com/link?url=MGe8RiFIw8NjAnrE7 ETrr_LTm3y9fRdcjKAa2TSKLiknlGx6vopk8TyzfuFIPaTze9oM4Ljn4lPOCfgIaRC5K#16
7.刪除或者替換相容包(v4 v7 v13)中無用的一些圖
* 刪除drawable-ldrtl:是layout-direction-right-to-left的縮寫,意味著佈局方式從右到左,主要是為了適配阿拉伯語用。這應該是API17,即Android4.2上新出的功能
drawable-ldrtl-xxxhdpi-v4
drawable-ldrtl-xxhdpi-v4
drawable-ldrtl-xhdpi-v4
drawable-ldrtl-hdpi-v4
drawable-ldrtl-mdpi-v4
- 替換v4 v7 v13 中無用圖片資源_可選方式
- 可以使用1x1畫素圖片,替換v4,v7,v13中的一些圖片資源
8.注意刪除第三方aar庫中使用的大圖_注意情況
9.so庫的刪除:建議實際工作的配置是隻保留armable、x86下的so檔案,算是一個折中的方案。
armeabi :針對普通的或舊的arm v5 cpu
armeabi-v7:庫會對圖形渲染方面有很大的改進,如果沒有這方面的要求,可以精簡。針對有浮點運算或高階擴充套件功能的arm v7 cpu.
arm64-v8a:64位ARM裝置
mips
mips64
x86
x86_64
10.通過v4包中的DrawableCompat,通過著色方案完成selector效果,參考
Drawable icon = getResources().getDrawable(drawableId)
Drawable tintIcon = DrawableCompat.wrap(icon);
//1.著色一個selector
DrawableCompat.setTintList(tintIcon, getResources().getColorStateList(R.color.xx));
//2.著色一個顏色
DrawableCompat.setTintList(tintIcon, ColorStateList.valueOf(Color.BLUE));
imageView.setImageDrawable(tintIcon);
11.使用shape檔案替換圖片
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<corners android:radius="10dp"></corners>
<solid android:color="#e6d5d5"></solid>
</shape>
12.切圖使用一套圖即可,參考美團客戶端,美團使用的一套drawable-xhdpi
13.把so檔案放置到網上或者sdcard內,參考https://segmentfault.com/a/1190000004062899
14.配合vectorDrawable使用向量圖 (相容性問題,5.0後才可使用)
15.使用微信資源混淆https://github.com/shwenzhang/AndResGuard
。
相關推薦
Android開發中APK瘦身步驟
apk瘦身 想辦法較減少apk大小 必要性 同樣功能,apk越小越好,使用者下載動機更大 瞭解apk的組成 classes.dex:是java原始碼編譯後生成的java位元組碼檔案 resources.arsc:編譯後的佈局檔案
Android開發之APK瘦身之法
Android 開發後,apk的大小往往會影響到使用者的下載體驗。開發人員本著追求極致的精神,apk瘦身是不得不做的工作。 先分析一下APK是由哪些元素構成的。 Android Studio 2.2 之後的版本,可直接能分析APK的大小,雙擊開啟就能
android APK瘦身全面總結——如何從32.6M到13.6M
前言 之前我簡單介紹了關於svg圖片瘦身的問題,在公司,瘦身這個問題是我提出來的,所以這鍋我背了。公司專案是32.6M,我給自己的要求就是低於20M。上週花了一個星期瘦身,至於為什麼花了一週,主要是svg適配問題我被搞矇蔽了。然後發現還要改大量程式碼,想想也就算了,又換了另一種瘦身方法。 很多人是因
android apk 瘦身
頭條APK瘦身之路 隨著版本迭代,功能增加安裝包體積也會慢慢增大。 今日頭條576版本APK達到了25M,通過一系列的優化,到目前的607版本為12M。本文主要是介紹頭條APK瘦身中用到的一些方法。 APK分析 既然是要優化APK的大小,那首先就得看下APK檔案的構成。 Android
Android效能優化之apk瘦身技巧
隨著專案迭代,新功能的增加。回導致apk越大。那麼在下載安裝過程中。使用者耗費的流量越多。 安裝等待的時間也會越長。這就意味著下載轉化率會越低。那麼如何apk瘦身呢? 理解APK結構 在討論怎麼減小Apk體積之前,理解一個應用的APK結構是非常有幫助的。一個ap
Android 安裝包大小優化(Apk瘦身)
目錄 1. 為什麼? APK越大,在下載安裝過程中,耗費的流量會越多,安裝等待的時間也會越長,安裝包的大小對下載的失敗率也有影響。而對於應用本身,就意味著下載轉化率會越低,在競品中,使用者更願意選擇功能多,體驗號,安裝包最小的應用。
Android效能調優;如何讓你的APK瘦身88%
隨著業務複雜度的逐漸增加,程式碼、資源也在不斷的增加,此時你的APP大小也在增加。從使用者層面來說,面對動輒幾十兆的APP來說在非WIFI情況下還是會猶豫要不要下載,不下載你就可能因此失去了一個使用者。從公司層面來講,流量就是錢,減少APP的大小就顯得尤為重要。從開發者層面上來講,你掌握了這個手藝也
Android APK瘦身/減小包體
隨著應用的長久迭代,各種功能模組的加入,APK包體越來越大,減小包體是必要的。 所以,從最簡單的來。 1.刪除無用資源 應用迭代就了,功能增刪,總會有無用資源殘留,所以,定期刪除無用資源是
Android APK 瘦身實踐(減小apk的大小)
因為推廣的需要,公司需要把APK的大小再“減小”一下,4M以內! 當達到4M以內之後,公司建議說,能否再壓壓?2M如何? 瘦身前 因為平時就考慮到大小的限制,所以很多工作已經做過了,如下列舉現在的狀態: 7.3M(Debug版本)和6.5M(Release版本)
[Android 之美] 那些你不知道的APK 瘦身,讓你的APK更小
[Android 之美] APK 瘦身,減少APK的大小 讓我們的apk檔案儘可能更小,移除那些未使用的程式碼和資原始檔。本章節介紹瞭如何做到讓APK更小,效能更好,下載轉化率會更高,以及如何指定在構建APK過程中保留或移除專案中的程式碼和資源,在我們還
Android 效能優化之記憶體檢測、卡頓優化、耗電優化、APK瘦身
導語 自2008年智慧時代開始,Android作業系統一路高歌,10年智慧機發展之路,如今 Android 9.0 代號P 都發布了,Android系統性能已經非常流暢了。但是,到了各大廠商手裡,改原始碼自定系統,使得Android原生系統變得魚龍混雜。另外,到了不同層次的
Android APK瘦身之旅
從APK的檔案結構說起 APK在安裝和更新之前都需要經過網路將其下載到手機,如果APK越大消耗的流量就會越多,特別是對於使用行動網路的使用者來講,消耗流量越多就代表需要花更多的錢去購買流量。同時一
Android XML shape 標籤使用詳解(apk瘦身,減少記憶體好幫手)
Android XML shape 標籤使用詳解 一個android開發者肯定懂得使用 xml 定義一個 Drawable,比如定義一個 rect 或者 circle 作為一個 View 的背景。但是,也肯定也有人在能使用 Drawable 的地方選擇使用一
android apk瘦身實戰
瘦身的目的 app運營中經常會聽到一句話:提高下載轉化率。什麼是下載轉化率?舉個栗子:你的應用大小是 18MB ,有100個潛在使用者想要去下載嘗試使用,結果有20個使用者嫌棄安裝包太大直接揚長而去,有20個使用者在等待下載的過程中取消下載,最終只有60
談談Android開發中的Gradle那些事之不同BuildType編譯出不同版本號的apk
今天我們要來談談 如何讓不同的BuildType編譯出不同的版本號 沒搞錯吧?這有什麼用??為什麼會有這樣的需求??? 不想當產品的QA不是一個好RD RD不只是PM的RD, QA也總能在非常時期提出一些非常獨(坑)特(爹)的需求,而我們只能說沒問題!(: 男人怎
Gradle外掛開發 APK瘦身資源自定義7z壓縮
APK瘦身實戰 資源自定義7z壓縮 專案開發中,隨著業務的增長,常常需要在apk編譯階段對包程式碼或是資源做一定的自定義修改,比如熱修復,外掛生成,無埋點統計,渠道包生成等等。 但是公司專案業務開發人員基本上都很少接觸到相關技術,這裡以學習的態度,實現一套用
Android開發中支付寶接入支付功能實現(詳細步驟)
今天做了一下支付寶的支付功能的實現,記錄一下。(注意:因為服務時常更新,所以主要記錄操作方法,而非依葫蘆畫瓢。另外,這次簡單實現了訂單提交—結果獲取,並沒有做那些進一步的驗證,後期會逐步完善)步驟如下:下載最新的sdk則點選上圖中下面的那個"SDK及DEMO下載",然後選擇相
Android開發中, 將apk和SQLite資料庫一起打包釋出 (沒root手機)
要把SQLite資料庫與apk一起打包很簡單,只要把資料庫匯出,並放在assets資料夾中,app首次開啟時載入就可以了。 但有個問題:沒root的手機不能通過DDMS檢視/data/的檔案(資料庫儲存在這裡)。我們只能通過adb shell來獲取資料庫檔案了。 開啟命
【實踐】Android apk瘦身實踐
專案背景: 更小的安裝包可以提升使用者轉化率,所以安裝包瘦身是很有必要的。 1:去除無用的語言資源 resConfigs “zh” 2:so庫相容 So(shared object,共享庫)是機器可以直接執行的二進位制程式碼,是Andr
玩轉APK:實現Android APK瘦身99.99%
下面我們將刪除 strings.xml檔案,並將AndroidManifest中的android:label屬性值更改為“A”。這看上去是一個小更改,但是它從resources.arsc中刪除了一項,削減了 Manifest 檔案中的字元數,並從“res”目錄中移除了一個檔案。略有裨益,我們削減了 22