當前位置:首頁 » 安卓系統 » android的so文件

android的so文件

發布時間: 2024-12-07 05:28:32

❶ Android對so體積優化的探索與實踐

減小應用安裝包的體積,對提升用戶體驗和下載轉化率都大有益處。本文將結合美團平台的實踐經驗,分享 so 體積優化的思路、收益,以及工程實踐中的注意事項。

1. 背景

應用安裝包的體積影響著用戶的下載時長、安裝時長、磁碟佔用空間等諸多方面,因此減小安裝包的體積對於提升用戶體驗和下載轉化率都大有益處。Android 應用安裝包其實是一個 zip 文件,主要由 dex、assets、resource、so 等各類型文件壓縮而成。目前業內常見的包體積優化方案大體分為以下幾類:

隨著動態化、端智能等技術的廣泛應用,在採用上述優化手段後, so 在安裝包體積中的比重依然很高,我們開始思索這部分體積是否能進一步優化。

經過一段時間的調研、分析和驗證,我們逐漸摸索出一套可以將應用安裝包中 so 體積進一步減小 30%~60% 的方案。該方案包含一系列純技術優化手段,對業務侵入性低,通過簡單的配置,可以快速部署生效,目前美團 App 已在線上部署使用。為讓大家能知其然,也能知其所以然,本文將先從 so 文件格式講起,結合文件格式分析哪些內容可以優化。

2. so 文件格式分析

so 即動態庫,本質上是 ELF(Executable and Linkable Format)文件。可以從兩個維度查看 so 文件的內部結構:鏈接視圖(Linking View)和執行視圖(Execution View)。鏈接視圖將 so 主體看作多個 section 的組合,該視圖體現的是 so 是如何組裝的,是編譯鏈接的視角。而執行視圖將 so 主體看作多個 segment 的組合,該視圖告訴動態鏈接器如何載入和執行該 so,是運行時的視角。鑒於對 so 優化更側重於編譯鏈接角度,並且通常一個 segment 包含多個 section(即鏈接視圖對 so 的分解粒度更小),因此我們這里只討論 so 的鏈接視圖。

3. so 可優化內容分析

在討論 so 可優化內容之前,我們先了解一下 Android 構建工具(Android Gradle Plugin,下文簡稱 AGP)對 so 體積做的 strip 優化(移除調試信息和符號表)。AGP 編譯 so 時,首先產生的是帶調試信息和符號表的 so(任務名為 externalNativeBuildRelease),之後對剛產生的帶調試信息和符號表的 so 進行 strip,就得到了最終打包到 apk 或 aar 中的 so(任務名為 stripReleaseDebugSymbols)。

4. 優化方案介紹

我們對所有能控制最終 so 體積的方案都進行調研,並驗證了其效果,最後總結出較為通用的可行方案。

5. 工程實踐支持多種構建工具

美團有眾多業務使用了 so,所使用的構建工具也不盡相同,除了上述常見的 CMake 和 ndk-build,也有項目在使用 Make、Automake、Ninja、GYP 和 GN 等各種構建工具。不同構建工具應用 so 優化方案的方式也不相同,尤其對大型工程而言,配置復雜性較高。

6. 方案收益

優化 so 對安裝包體積和安裝後佔用的本地存儲空間有直接收益,收益大小取決於原 so 冗餘代碼數量和導出符號數量等具體情況,下面是部分 so 優化前後佔用安裝包體積的對比:

下面是上述 so 優化前後佔用本地存儲空間的對比:

7. 總結與後續計劃

對 so 體積進行優化不僅能夠減小安裝包體積,而且能獲得以下收益:

我們對後續工作做了如下的規劃:

❷ Android如何引入及調用第三方.so文件

APP開發時,可能會碰到引入第三方so文件的需求,可以根據以下步驟引入

一、新建jnilibs目錄,或者直接放入libs目錄

二、修改build.gradle文件,添加sourceSets jniLibs.srcDirs配置,如果放入libs,那麼srcDirs應配置為libs

前兩步已經說明如何引入so文件,那麼如何調用.so文件裡面的方法呢?拷貝或新建調用類,注意包名,在類中創建相應方法,假設C文件的方法為Java_a_b_c_JniUtils_test,需創建的類及方法:

❸ android so文件有什麼用

android中用到的so文件是一個c++的函數庫,在android的JNI中,是先將相應的C語言打包成so庫導入到lib文件夾中調用的。

❹ android so文件是什麼

so文件是unix的動態連接庫,是二進制文件,作用相當於windows下的.dll文件。
補充:
在Android中調用動態庫文件(*.so)都是通過jni的方式。
Android中載入so文件的提供的API:
void System.load(String pathName);
說明:pathName:文件名+文件路徑;

安卓手機如何打開.so文件

安卓手機無法直接打開.so文件。

.so文件是Linux和Unix系統中的共享庫文件,類似於Windows系統中的.dll文件。在Android系統中,.so文件通常用於存儲編譯後的C/C++代碼,以供Java或Kotlin等語言通過JNI(Java Native Interface)調用。這些文件是二進制格式,因此無法直接在安卓手機上打開查看或編輯。

要在安卓手機上使用.so文件,你需要將其嵌入到你的Android應用程序中。這通常涉及到在Android項目的構建腳本(如build.gradle)中配置NDK(Native Development Kit)編譯選項,以便在編譯應用程序時包含.so文件。這樣,當應用程序在安卓設備上運行時,它可以載入並使用這些.so文件中的本地代碼。

需要注意的是,直接在安卓設備上查看或編輯.so文件是不可能的,因為它們是以二進制形式編譯的,而不是以人類可讀的文本形式存儲的。如果你需要查看或編輯這些代碼,你需要在開發環境中使用相應的工具,如C/C++編譯器和調試器,來查看和編輯源代碼,然後重新編譯生成.so文件。

綜上所述,安卓手機無法直接打開.so文件,但你可以通過將其嵌入到你的Android應用程序中來使用它們。如果你需要查看或編輯這些代碼,你需要在開發環境中使用相應的工具來操作源代碼。

熱點內容
汽油壓縮機響 發布:2025-01-02 02:04:26 瀏覽:743
加密標准制定 發布:2025-01-02 02:04:16 瀏覽:192
華為手機如何添加文件夾 發布:2025-01-02 01:58:26 瀏覽:620
java通訊錄 發布:2025-01-02 01:54:45 瀏覽:62
伺服器上的ip怎麼查 發布:2025-01-02 01:45:08 瀏覽:677
ts430s512gb緩存 發布:2025-01-02 01:43:38 瀏覽:481
編譯原理雜志 發布:2025-01-02 01:37:47 瀏覽:336
玩cf配置低怎麼辦 發布:2025-01-02 01:36:23 瀏覽:888
lol的文件夾 發布:2025-01-02 01:33:12 瀏覽:421
解壓引導 發布:2025-01-02 01:23:25 瀏覽:654