virtualapk插件化框架

一、簡介

VirtualAPK(以下簡稱VA,具體內容可訪問官網 https://github.com/didi/VirtualAPK )是一款基於Android插件化原理實現的插件化框架。與傳統單一APK的開發模式不同,VA將整個APP拆分成多個獨立的插件,提供了更多的靈活性和可擴展性,以滿足多樣化、高變化性、快速等需求。

VA相比傳統的插件化框架DexClassLoader,VA通過hook掉AssetManager和Resources來達到無縫替換的目的,適用於多種場景,如:商業化APP逐漸複雜,需求變得多樣化;不同模塊之間業務重複度高,難以管理;多方合作、協同開發,代碼衝突,代碼熱更新等等。

二、優勢

1.靈活性 – 通過插件化,將整個應用分為小而獨立的部分,新功能可打包成一個插件,舊功能也可作為獨立的插件運行,有利於針對某些業務,持續迭代、快速升級等。

2.可擴展性 – VA提供了多種靈活的擴展接口,如:IActivityDelegate、IApplicationDelegate、IInstrumentation等,能夠在某個地方通過接口嵌入進去一些自己的邏輯代碼,豐富了原本的應用。

3.安全性 – VA在啟動時會先驗證插件的簽名信息和包名信息,保證不被非法類庫利用。

4.使用簡單 – VA提供了類似系統API的高層封裝,整個API設計和使用方法都非常簡單。只需要一行代碼即可運行插件。

三、使用教程

1.集成VirtualAPK

在主工程中加入VA,並且在清單文件中聲明VirtualAPKService組件。


dependencies {
    implementation 'com.didi.virtualapk:core:x.y.z'
}


    

    

2.構建插件

插件是開發應用中各模塊獨立打包的產物,其中,對VA插件的工程要求是包含Activity、Service的代碼和對應的資源文件,如AndroidManifest.xml、res、assets、libs等,同時,需要拷貝主工程清單中的配置。在Gradle配置文件中,需要在構建類型中增加以下內容,具體可以參考VA官網的示例。


android {
    defaultConfig {...}

    // ...
    buildTypes {
        plugin {
            initWith buildTypes.debug
        }
    }
    sourceSets {
        main {
            jniLibs.srcDirs = [file("$projectDir/src/main/libs")]
            assets.srcDirs = [file("$projectDir/src/main/assets"), file("$projectDir/build/generated/assets")]
            res.srcDirs = [file("$projectDir/res")]
            manifest.srcFile "$projectDir/AndroidManifest.xml"
        }
        plugin {
            jniLibs.srcDirs = [file("$projectDir/src/main/libs")]
            assets.srcDirs = [file("$projectDir/src/main/assets"), file("$projectDir/build/generated/assets")]
            res.srcDirs = [file("$projectDir/res")]
            manifest.srcFile "$projectDir/AndroidManifest.xml"
        }
    }
}

3.加載插件

在主工程中運行插件需要通過VA加載對應的插件,代碼如下:


if (null == virtualAPK) {
    virtualAPK = new VirtualAPK(this);
    virtualAPK.addVirtualApk(virtualApkPath);
}
Intent intent = new Intent();
intent.setClassName(pluginPackage, "com.example.plugin_module.MainActivity");
virtualAPK.startActivity(intent);

四、總結

VirtualAPK是一款靈活性和可擴展性強的插件化框架,在一定程度上解決了商業化APP在開發和維護過程中遇到的種種問題,能夠提高開發效率,降低維護成本,方便快捷地將新功能快速地推向市場。

原創文章,作者:KMZNU,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/332319.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KMZNU的頭像KMZNU
上一篇 2025-01-21 17:30
下一篇 2025-01-21 17:30

相關推薦

  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • agavi開發框架

    Agavi是一個基於MVC模式的Web應用程序開發框架,以REST和面向資源的設計為核心思想。本文章將從Agavi的概念、優點、使用方法和實例等方面進行詳細介紹。 一、概念 Aga…

    編程 2025-04-29
  • Python unittest框架用法介紹

    Python unittest框架是Python自帶的一種測試框架,可以用來編寫並運行測試用例。在本文中,我們將從以下幾個方面詳細介紹Python unittest框架的使用方法和…

    編程 2025-04-29
  • com.alipay.sofa.bolt框架

    com.alipay.sofa.bolt框架是一款高性能、輕量級、可擴展的RPC框架。其廣泛被應用於阿里集團內部服務以及阿里雲上的服務。該框架通過NIO支持高並發,同時還內置了多種…

    編程 2025-04-29
  • Codemaid插件——讓你的代碼優美整潔

    你是否曾為了混雜在代碼里的冗餘空格、重複代碼而感到煩惱?你是否曾因為代碼缺少注釋而陷入困境?為了解決這些問題,今天我要為大家推薦一款Visual Studio擴展插件——Codem…

    編程 2025-04-28
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28
  • Kong 使用第三方的go插件

    本文將針對Kong使用第三方的go插件進行詳細闡述。首先,我們解答下標題的問題:如何使用第三方的go插件?我們可以通過編寫插件來達到此目的。 一、插件架構介紹 Kong的插件系統采…

    編程 2025-04-28
  • LuaEP:一款強大的Lua開發框架

    LuaEP是一個集成了可以快速開發web應用程序所需的組件的Lua開發框架。它以Lua語言為基礎,提供了許多常用接口和庫,使得開發者不需要從頭開始編寫web應用程序,而是專註於業務…

    編程 2025-04-28
  • Java持久層框架的複合主鍵實現

    用Java持久層框架來操作數據庫時,複合主鍵是常見的需求。這篇文章將詳細闡述javax.persistence複合主鍵的實現方式,並提供完整的示例代碼。 一、複合主鍵的定義 複合主…

    編程 2025-04-27

發表回復

登錄後才能評論