減小apk體積二
主流apk大小
一 開啟minifyEnabled程式碼混淆
除了能對程式碼優化混淆,還能對位元組碼檔案進行優化,縮減體積,一般能減小500k左右
Proguard示例程式碼
-optimizationpasses 5 # 指定程式碼的壓縮級別
-dontusemixedcaseclassnames # 是否使用大小寫混合
-dontpreverify # 混淆時是否做預校驗
-verbose # 混淆時是否記錄日誌
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆時所採用的演算法
-keep public class * extends android.app.Activity # 保持哪些類不被混淆
-keep public class * extends android.app.Application # 保持哪些類不被混淆
-keep public class * extends android.app.Service # 保持哪些類不被混淆
-keep public class * extends android.content.BroadcastReceiver # 保持哪些類不被混淆
-keep public class * extends android.content.ContentProvider # 保持哪些類不被混淆
-keep public class * extends android.app.backup.BackupAgentHelper # 保持哪些類不被混淆
-keep public class * extends android.preference.Preference # 保持哪些類不被混淆
-keep public class com.android.vending.licensing.ILicensingService # 保持哪些類不被混淆
-keepclasseswithmembernames class * { # 保持 native 方法不被混淆
native <methods>;
}
-keepclasseswithmembers class * { # 保持自定義控制元件類不被混淆
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {# 保持自定義控制元件類不被混淆
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity { # 保持自定義控制元件類不被混淆
public void *(android.view.View);
}
-keepclassmembers enum * { # 保持列舉 enum 類不被混淆
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆
public static final android.os.Parcelable$Creator *;
}
-keepattributes Signature #過濾泛型
-ignorewarnings #忽略警告
#zxing
-dontwarn com.google.zxing.**
-keep class com.google.zxing.** { *;}
#gson
-dontwarn com.google.gson.**
-keep class com.google.gson.** { *;}
二 開啟 shrinkResources
能夠刪除無用資源,一些臨時佔位的圖片
這樣開啟上面二個功能就好了
三 使用tinypng有失真壓縮
png無損,jpg有損;jpg會有一定的壓縮,佔體積小;
啟動頁,引導頁,大背景,此類圖片大概130kb左右,可以使用jpg替代;
同一張圖片,jpg比png大概小40%左右,瘦身大概300kb左右;
四 so庫的合理建議
每每整合三方看見一大丟的so庫感覺無法抉擇
只能是參考別人的
armeabi
預設選項
支援所有 ARM* 裝置
armeabi-v7a
支援基於 ARM* v7 的裝置
支援硬體 FPU 指令
支援硬體浮點運算x86
x86
支援基於硬體的浮點運算的 IA-32 指令集
mips
支援二進位制介面
根據so庫功能決定;根據自身應用想達到的相容效果決定
瘦身效果明顯,可能瘦身0-10m左右
分析了幾個大型應用,armeabi必須包含,x86選擇性包含,其他指令集極少包含
微薄armeabi
qqarmeabi
微信armeabi
uc瀏覽器armeabi armeabi-v7a
美團armeabi
天貓armeabi
58同城armeabi
今日頭條armeabi armeabi-v7a
這麼牛逼的公司都選擇armeabi ,你懂的
五 切圖解析度
六 對assets目錄優化
assets目錄下的db檔案,靜態文字都可以通過gzip之類的壓縮
瘦身效果視靜態檔案大小,瘦身大概0-3m
七 選擇性使用webp圖片
參考網站
http://isux.tencent.com/introduction-of-webp.html
八 使用微信ResProguard方案
參考網站
http://blog.csdn.net/rzleilei/article/details/52205545
九 小細節處理 瘦身效果有限
1.一些純色背景,邊框使用shape檔案替換
2.使用向量圖
Vector影象剛釋出的時候,是隻支援Android 5.0+的,對於Android pre-L的系統來說,並不能使用,所以,可以說那時候的Vector並沒有什麼卵用。
從AppCompat 23.2之後,Google對p-View的Android系統也進行了相容,也就是說,Vector可以使用於Android 2.1以上的所有系統,只需要引用com.android.support:appcompat-v7:23.2.0以上的版本就可以了,這時候,Vector應該算是迎來了它的春天。
簡單來說,一些向量圖可以用程式碼完成;
看具體情況,大概10kb左右;
瘦身無極限