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/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
  • Kong 使用第三方的go插件

    本文将针对Kong使用第三方的go插件进行详细阐述。首先,我们解答下标题的问题:如何使用第三方的go插件?我们可以通过编写插件来达到此目的。 一、插件架构介绍 Kong的插件系统采…

    编程 2025-04-28
  • Django框架:从简介到项目实战

    本文将从Django的介绍,以及如何搭建Django环境开始,逐步深入到Django模型、视图、模板、表单,最后通过一个小型项目实战,进行综合性的应用,让读者获得更深入的学习。 一…

    编程 2025-04-28
  • LuaEP:一款强大的Lua开发框架

    LuaEP是一个集成了可以快速开发web应用程序所需的组件的Lua开发框架。它以Lua语言为基础,提供了许多常用接口和库,使得开发者不需要从头开始编写web应用程序,而是专注于业务…

    编程 2025-04-28
  • Java持久层框架的复合主键实现

    用Java持久层框架来操作数据库时,复合主键是常见的需求。这篇文章将详细阐述javax.persistence复合主键的实现方式,并提供完整的示例代码。 一、复合主键的定义 复合主…

    编程 2025-04-27

发表回复

登录后才能评论