日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android app性能优化_Android性能优化之Apk 瘦身优化

發(fā)布時間:2025/3/12 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android app性能优化_Android性能优化之Apk 瘦身优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

瘦身

  • 主要是下載轉(zhuǎn)換率提高
  • 頭部App都有Lite版本
  • 渠道合作產(chǎn)商要求
  • APK 分析工具

    ApkTool 反編譯工具

    官網(wǎng):https://ibotpeaches.github.io/ApkTool apktool d students.apk

    Analyze apk

    Android studio 2.2之后使用 - 查看apk組成大小,各資源占比 - 查看dex文件組成 - 可以進行apk對比

    通過Analyze app分析(打開方式:Android Studio下 ——> Build——> Analyze app)

    classyshark 二進制檢查工具

    https://github.com/google/android-classyshark 支持多種格式:apk,jar,class,so等

    nimbledroid app 性能指標系統(tǒng)

    https://nimbledroid.com/ 可以通過上傳apk得知: - 文件大小及排行 - Dex方法數(shù)、SDK方法數(shù) - 啟動時間、內(nèi)存等

    APK 組成

    APK包結(jié)構(gòu)如下:

    • lib/:包含特定于處理器軟件層的編譯代碼。該目錄包含了每種平臺的子目錄,像armeabi,armeabi-v7a, arm64-v8a,x86,x86_64,和mips。大多數(shù)情況下我們可以只用一種armeabi-v7a。
    • assets/:包含應(yīng)用可以使用AssetManager對象檢索的應(yīng)用資源。
    • res/:包含未編譯到的資源 resources.arsc,主要有圖片資源文件。
    • META-INF/:包含CERT.SF和 CERT.RSA簽名文件以及MANIFEST.MF 清單文件。
    • resources.arsc:包含已編譯的資源。該文件包含res/values/ 文件夾所有配置中的XML內(nèi)容。打包工具提取此XML內(nèi)容,將其編譯為二進制格式,并將內(nèi)容歸檔。此內(nèi)容包括語言字符串和樣式,以及直接包含在resources.arsc文件中的內(nèi)容路徑 ,例如布局文件和圖像。
    • classes.dex:包含以Dalvik / ART虛擬機可理解的DEX文件格式編譯的類。
    • AndroidManifest.xml:包含核心Android清單文件。該文件列出應(yīng)用程序的名稱,版本,訪問權(quán)限和引用的庫文件。該文件使用Android的二進制XML格式。

    對lib文件目錄進行瘦身

    往往進行NDK開發(fā)的時候,so文件都比較大,將ndk修改為如下:

    ndk{//設(shè)置支持的so庫架構(gòu)abiFilters "armeabi-v7a"}

    armeabi-v7主要不支持ARMv5(1998年誕生)和ARMv6(2001年誕生).

    而許多基于 x86 的設(shè)備也可運行 armeabi-v7a 和 armeabi NDK 二進制文件。對于這些設(shè)備,主要 ABI 將是 x86,輔助 ABI 是 armeabi-v7a。

    如果適配版本高于4.1版本,可以直接上面這樣寫,當然,如果armeabi-v7a不是設(shè)備主要ABI,那么會在性能上造成一定的影響。

    優(yōu)化res,assets文件

    手動lint檢查,手動刪除無用資源

    在Android Studio中打開“Analyze” 然后選擇"Inspect Code...",范圍選擇整個項目,然后點擊"OK"。

    使用tinypng等圖片壓縮工具對圖片進行壓縮。

    打開網(wǎng)址,將大圖片導(dǎo)入到tinypng,替換之前的圖片資源。

    大部分圖片使用Webp格式代替。

    可以給UI提要求,讓他們將圖片資源設(shè)置為Webp格式,這樣的話圖片資源會小很多。當然,如果對圖片顏色通道要求不高,可以考慮轉(zhuǎn)jpg,最好用webp,因為效果更佳。

    盡量不要在項目中使用幀動畫

    一個幀動畫幾十張圖片,再怎么壓縮都還是占很大內(nèi)存比重的。所以建議是讓UI去搞,這里可以參考使用lottie-android,如果項目中動畫效果多的話效果更加明顯。

    使用gradle開啟shrinkResources

    每1000行代碼在apk當中才會占用5kb的空間

    設(shè)置shrinkResources true移除無用資源文件

    要通過 ProGuard 啟用代碼壓縮,請在 build.gradle 文件內(nèi)相應(yīng)的構(gòu)建類型中添加 minifyEnabled true:對無用的代碼進行刪除

    • minifyEnabled 這個是用來開啟刪除無用代碼,比如沒有引用到的代碼
    • shrinkResources 用來開啟刪除無用資源,也就是沒有被引用的文件(經(jīng)過實測是drawable,layout,實際并不是徹底刪除,而是保留文件名,但是沒有內(nèi)容,等等),但是因為需要知道是否被引用所以需要配合mififyEnable使用,只有當兩者都為true的時候才會起到真正的刪除無效代碼和無引用資源的目的

    同樣的資源代碼測試

    • 只有minififyEnable false或者 minififyEnable false && shrinkResources true

    APK大小為1.39M 資源文件和layout都存在且是有內(nèi)容的

    • 只有minifyEnable true

    866K 資源文件和layout都存在且是有內(nèi)容的

    • minifyEnable true && shrinkResources true

    資源文件在但是沒有內(nèi)容大小都變成67字節(jié),layout文件內(nèi)容被清空

    減少chasses.dex大小

    classes.dex中包含了所有的java代碼,當你打包時,gradle會將所有模板力的.class文件轉(zhuǎn)換成classes.dex文件,當然,如果方法數(shù)超過64K,將要新增其他文件進行存儲。可以通過multidexing分多個文件,比如這里的classes2.dex。換句話說,就是減少代碼量。我們可以通過以下方法來實現(xiàn):

    • 盡量減少第三方庫的引用,這個在上面我們已經(jīng)做過優(yōu)化了。
    • 避免使用枚舉,可能幾十個枚舉的內(nèi)存占有量才相當一張圖片這樣子,優(yōu)化效果也不會特別明顯。當然,如果你是個追求極致的人,我不反對你用靜態(tài)常量替代枚舉。
    • 如果你的dex文件太大,檢查是否引入了重復(fù)功能的第三方庫(圖片加載庫,glide,picasso,fresco,image_loader,如果不是你一個人單獨開發(fā)完成的很容易出現(xiàn)這種情況),盡量做到一個功能點一個庫解決。

    第三方庫處理

    • 基礎(chǔ)庫統(tǒng)一
    • 選擇更小的庫,Android Methods Count
    • 僅引入需要的部分代碼:Fresco的webp支持

    圖片壓縮

    • https://tinyjpg.com/
    • TinyPngPlugin
    • 選擇不同的圖片格式

    其他

    • 用7zip代替壓縮資源。
    • 刪除翻譯資源,只保留中英文
    • 嘗試將andorid support庫徹底踢出你的項目。
    • 嘗試使用動態(tài)加載so庫文件,插件化開發(fā)。
    • 將大資源文件放到服務(wù)端,啟動后自動下載使用。
    • Facebook的redex優(yōu)化字節(jié)碼 redex是facebook發(fā)布的一款android字節(jié)碼的優(yōu)化工具,需要按照說明文檔自行配置一下。

    redex input.apk -o output.apk --sign -s <KEYSTORE> -a <KEYALIAS> -p <KEYPASS>

    總結(jié)

    以上是生活随笔為你收集整理的android app性能优化_Android性能优化之Apk 瘦身优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。