Android插件化——Replugin入门(一)

replugin原理笔记 前面只是针对Replugin中的一些关键技术、感兴趣点进行了粗略的分析。Replugin的很多技术精髓还需更加仔细的研读。但通过上面的一些分析,对Replugin的主要技术及设计思想能有一个大概的了解。能加深对Android系统及一些相关技术的理解。 阅读详情

一、360Replugin简介

RePlugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案,由360手机卫士的RePlugin Team研发,也是业内首个提出”全面插件化“(全面特性、全面兼容、全面使用)的方案。

其主要优势有:

  • 极其灵活:主程序无需升级(无需在Manifest中预埋组件),即可支持新增的四大组件,甚至全新的插件
  • 非常稳定:Hook点仅有一处(ClassLoader),无任何Binder Hook!如此可做到其崩溃率仅为“万分之一”,并完美兼容市面上近乎所有的Android ROM
  • 特性丰富:支持近乎所有在“单品”开发时的特性。包括静态Receiver、Task-Affinity坑位、自定义Theme、进程坑位、AppCompat、DataBinding等
  • 易于集成:无论插件还是主程序,只需“数行”就能完成接入
  • 管理成熟:拥有成熟稳定的“插件管理方案”,支持插件安装、升级、卸载、版本管理,甚至包括进程通讯、协议版本、安全校验等
  • 数亿支撑:有360手机卫士庞大的数亿用户做支撑,三年多的残酷验证,确保App用到的方案是最稳定、最适合使用的

二、Replugin支持插件方式

1.内置插件

内置插件是将编译好的apk(将APK改名为:[插件名].jar)放入宿主程序的assets/plugins目录,作为宿主的插件

2.外置插件

外置插件是指可通过“下载”apk、“放入SD卡”等方式来安装并运行的插件

三、Replugin接入

1.宿主程序(主程序)接入

第 1 步:添加 RePlugin Host Gradle 依赖

在项目根目录的 build.gradle(注意:不是 app/build.gradle) 中添加 replugin-host-gradle 依赖:

buildscript {
    dependencies {
        classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.4'
        ...
    }
}

第 2 步:添加 RePlugin Host Library 依赖

在 app/build.gradle 中应用 replugin-host-gradle 插件,并添加 replugin-host-lib 依赖:

apply plugin: 'replugin-host-gradle'
/**
 * 配置项均为可选配置,默认无需添加
 * 更多可选配置项参见replugin-host-gradle的RepluginConfig类
 * 可更改配置项参见 自动生成RePluginHostConfig.java
 */
repluginHostConfig {
    /**
     * 是否使用 AppCompat 库
     * 不需要个性化配置时,无需添加
     */
    useAppCompat = true
    /**
     * 背景不透明的坑的数量
     * 不需要个性化配置时,无需添加
     */
    countNotTranslucentStandard = 6
    countNotTranslucentSingleTop = 2
    countNotTranslucentSingleTask = 3
    countNotTranslucentSingleInstance = 2
}
dependencies {
    compile 'com.qihoo360.replugin:replugin-host-lib:2.2.4'
    ...
}

注意事项:

  • 请将apply plugin: 'replugin-host-gradle'放在 android{} 块之后,防止出现无法读取applicationId,导致生成的坑位出现异常
  • 如果您的应用需要支持AppComat,则除了在主程序中引入AppComat-v7包以外,还需要在宿主的build.gradle中添加下面的代码若不支持AppComat则请不要设置此项:
repluginHostConfig {
    useAppCompat = true
}
  • 如果您的应用需要个性化配置坑位数量,则需要在宿主的build.gradle中添加下面的代码
repluginHostConfig {
     /**
     * 背景不透明的坑的数量
     */
    countNotTranslucentStandard = 6
    countNotTranslucentSingleTop = 2
    countNotTranslucentSingleTask = 3
    countNotTranslucentSingleInstance = 2
}

第 3 步:配置 Application 类

让工程的 Application 直接继承自 RePluginApplication。

如果您的工程已有Application类,则可以将基类切换到RePluginApplication即可。或者您也可以用“非继承式”接入。

public class MainApplication extends RePluginApplication {
}

既然声明了Application,自然还需要在AndroidManifest中配置这个Application。

 <application
        android:name=".MainApplication"
        ... />

备选:“非继承式”配置Application

若您的应用对Application类继承关系的修改有限制,或想自定义RePlugin加载过程(慎用!),则可以直接调用相关方法来使用RePlugin。

public class MainApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);

        RePlugin.App.attachBaseContext(this);
        ....
    }

    @Override
    public void onCreate() {
        super.onCreate();
        
        RePlugin.App.onCreate();
        ....
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();

        /* Not need to be called if your application's minSdkVersion > = 14 */
        RePlugin.App.onLowMemory();
        ....
    }

    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);

        /* Not need to be called if your application's minSdkVersion > = 14 */
        RePlugin.App.onTrimMemory(level);
        ....
    }

    @Override
    public void onConfigurationChanged(Configuration config) {
        super.onConfigurationChanged(config);

        /* Not need to be called if your application's minSdkVersion > = 14 */
        RePlugin.App.onConfigurationChanged(config);
        ....
    }
}

2插件接入

第 1 步:添加 RePlugin Plugin Gradle 依赖

在项目根目录的 build.gradle(注意:不是 app/build.gradle) 中添加 replugin-plugin-gradle 依赖:

buildscript {
    dependencies {
        classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.4'
        ...
    }
}

第 2 步:添加 RePlugin Plugin Library 依赖

在 app/build.gradle 中应用 replugin-plugin-gradle 插件,并添加 replugin-plugin-lib 依赖:

apply plugin: 'replugin-plugin-gradle'

dependencies {
    compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.4'
    ...
}

至此插件和宿主的接入都已经完成,那么你就可以像单品那样,开发您的插件。生成出来的是APK,既可以“安装到设备”,又可以“作为插件”使用。

唯一插件化Replugin源码及原理深度剖析--唯一Hook点原理 上一篇我们说了Replugin的整体框架的初始化,但是因为篇幅的缘故还有Hook系统的ClassLoader和插件的加载没有说,那么我们这一篇就来详解的来分析一下Hook这块,本章我们讲从Hook系统ClassLoader的思想和原理进行剖析,如果没有看过上一篇建议先看上一篇 提示:请不要忽略代码注释,由于通畅上下逻辑思维,不太重要的部分跳转代码不会全部进去一行行的看,但是会将注释写出来,所以请 阅读详情

相关推荐

replugin宿主与插件通信小结

Messenger是执行进程间通信(IPC)最简单的方式,服务端Messenger通过Handler将客户端的请求放到消息循环中排队,然后逐个取出进行处理,而客户端要接收结果需要2个Messenger,一个用于发送消息,一个用于接收消息。其底层原理也是Binder,客户端得到服务端的Binder对象在binder驱动层对应的mRemote引用,然后给服务器发消息,实现跨进程通信。这种方式缺点很明显,服务端以串行方式处理客户端的消息,消息处理结果反馈并不及时,不适合服务端、客户端经常通信的场景。

工宗浩生财指南针 983

RePlugin源码及原理深度剖析

RePlugin源码及原理深度剖析

idaretobe的专栏 2250

Android全面插件化方案-RePlugin踩坑

1.什么是RePlugin?在Android开发领域,有关插件化的讨论一直热度不减。目前市面上的插件化方案虽然很多,但多数只能实现某些功能的插件化,距离开发者的预期尚有相当差距。对此,在近期GMTC全球移动技术大会上,360手机卫士主程序架构负责人张炅轩宣布,360的插件化框架RePlugin已经可以实现“全面插件化”,同时具有出色的稳定性和灵活性,可适用于各种类型的应用上。

github_36700683的博客 6987

Replugin-框架初始化流程

  项目中使用了Replugin, 本打算直接开怼源码, 阅读了几段代码, 发现极其困难, 这个也是自己目前的一个问题, 先不要急着直接开始进行源码阅读, 首先需要尝试了解整个大体框架, 然后针对这个大体框架流程再结合具体的代码进行分析, 会事半功倍. 否则就会陷入代码中之间树木不见森林. 以后在阅读其他代码时, 需要注意 一、外置插件   外置插件是指可通过"下载"、"放置SD卡"的方式来安装并运行的插件, //安装外置插件 Replugin.install("插件Apk路径")   默认情况下, 无论

qq_32290693的博客 1600

Android插件化原理与方案详解

Android插件化是一种开发模式,它允许我们动态地加载和卸载APK,从而实现模块化开发,热更新等功能。本文将详细介绍Android插件化的原理,以及几种主流的Android插件化方案。

陆业聪 6716

Android Replugin实现插件化

在开发Android应用中,App会越来越大,变得越来越不好管理。各模块之间耦合度高、编译效率慢、项目冲突不断等等。那么要怎样才能解决这个问题呢?于是就出现了组件化开发和插件化开发,这里我主要着重讲解Replugin插件化开发。 首先,我们需要认识Replugin框架,开发的app可以作为插件直接安装到宿主app中运行。而这个插件可以随时安装和卸载,非常方便。对于需要频繁更新的app或者使用频率比...

冬瓜去哪儿的博客 1048

[Android]用架构师角度看插件化(1)-Replugin入门剖析

大家好,我系苍王。以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表多谢一直以来的支持,组件化的内容,应该会有一段时间不再更新,一些非常关键的技术将会在我将要出版的组件化书籍中提及。组件化模块化的开发适合于中小型企业的业务叠加,和代码重用。而插件化的开发将组件化和模块的功能完全解耦出来。在国内的开发环...

weixin_34234823的博客 187

唯一插件化Replugin源码及原理深度剖析--插件的安装、加载原理

在Replugin的初始化过程中,我将他们分成了比较重要3个模块,整体框架的初始化、hook系统ClassLoader、插件的加载,3个模块已经说了两个,在第一篇的最后是插件的加载,当时没有说,一个是因为篇幅的原因,另一个原因是想从插件的安装、加载、插件apk初始化、整体的流程梳理下来,这里虽然没有分析插件的卸载,但是当看完安装和加载的过程,就自然能明白卸载了。提示:请不要忽略代码注释,由于通畅上下

yulong0809的专栏 7088

[Android]用架构师角度看插件化--章节列表

大家好,我系苍王。以下是用架构师角度看插件化的相关章节。这个章节持续给大家分析Android插件化知识最新的技术,适合深入进阶插件化技术的同学。一些章节和Android架构师学习资料,将会在小密圈中提前发布,敬请期待吧。[Android]用架构师角度看插件化(1)-Replugin入门剖析[Android]用架构师角度看插件化(2)-Replugin 唯一hook点[Android]用架构师角度看...

weixin_33836874的博客 105

BurpSuite+安卓模拟器双保险:避开真机抓包限制的完整配置指南

本文详细介绍了如何通过BurpSuite与安卓模拟器(如雷电、夜神)协同工作,绕过真机抓包限制的完整配置指南。从环境准备、网络拓扑配置到证书部署和流量分析,提供了一套高效的解决方案,帮助安全测试人员稳定捕获手机数据包,提升测试效率。

Apple的专栏 439

PPO实战:如何用强化学习让小车爬上MountainCarContinuous-v0山顶(附完整代码)

本文提供了使用PPO算法解决MountainCarContinuous-v0环境的完整实战教程。针对该环境的连续动作空间和稀疏奖励挑战,文章详细解析了PPO智能体的网络架构、状态归一化、GAE优势估计等核心实现,并附带了可直接运行的PyTorch代码。同时分享了关键的调参技巧和实战避坑指南,帮助读者高效训练智能体完成小车爬坡任务。

linux的博客 968

有关Android插件化思考

最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接。随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内满足需求和项目的增长,同时又能快速响应问题和迭代新需求,这就是一个矛盾点。此时,插件化技术正好风生水起,去了解各个主流框架实现思路,看看能对目前工作是否有帮助,是很有必要的。主要分为以下几个部分插件化...

idaretobe的专栏 396

一文详解AUTOSAR COM ComSignal结构体

ComSignalLength指定信号的长度,以字节为单位,影响数据的解析范围和精度。比如车速信号若为UINT16类型,ComSignalLength=16。这里需要注意必须ComSignalLength与ComSignalType匹配(比如FLOAT32类型需配置ComSignalLength=32),超出实际物理值范围时需配置缩放(Scaling)参数。ComSignalType定义信号的物理数据类型,决定如何解析原始字节数据。

menghuyouyou的博客 943

终极指南:如何快速上手 RePlugin Android 插件化框架

RePlugin 是一款灵活、稳定、易用的 Android 插件化框架,能够帮助开发者实现应用模块化、动态加载和热修复等功能。作为 Android 开发领域的重要工具,RePlugin 插件化框架让应用具备了更强的扩展性和维护性。 ## 🤔 什么是 Android 插件化框架? Android 插件化框架允许应用在运行时动态加载和卸载功能模块,无需重新安装整个应用。这种技术为应用带来了革命性

gitblog_00782的博客 440

【Godot】实现对话系统

在 Godot 中实现对话系统(Dialogue System)是游戏开发中的常见需求。Godot本身自带的的灵活性和轻量级脚本语言 GDScript 使得实现对话系统变得相对简单。以下是实现一个基础对话系统的示例。(语言为GDScript但高亮选择Python因为类似)通过 Godot 和 GDScript,我们可以给我们的游戏实现一个对话系统。从简单的文本显示到复杂的分支对话,Godot 提供了足够的灵活性来满足我们的需求。如果需要更高级的功能,可以尝试使用现成的插件如 Dialogic。

Octopus2077的博客 2522

永磁同步电机矢量控制——电流内环前馈解耦策略

在采用永磁同步电机矢量控制时,ud和uq的指令值存在耦合项。需要对其进行解耦,目前,常用的解耦设计方法有前馈解耦、偏差解耦以及内模控制,本文主要分享电流内环前馈解耦控制策略。

a12312341ll的博客 8694

android replugin文档,Android插件化之RePlugin集成与使用

一.概述通过本篇文章的学习,你将学会:1.什么是组件化和插件化2.RePlugin集成到自己的项目中3.RePlugin的使用二.组件化和插件化组件化组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。android工程的组件一般分为两种,l...

weixin_39540725的博客 747

NeRF-Pytorch(训练自己的数据集过程全记录+环境配置+COLMAP+问题解决)

写于2025/1/26,在用NeRF训练自己的数据集过程中该踩的坑都踩过了,发现网上并没有详细完整写这些问题解决过程的帖子,遂自己进行一个全记录和复盘。 整篇文章包括:NeRF训练环境配置;COLMAP三维重建过程(直接给出代码,规避一些bug);在训练时候出现的问题。 本篇文章仅针对llff格式数据集。

m0_62577716的博客 1774

Android插件化框架 —— 360RePlugin

插件化有利于 app 各个功能更好的解耦

Alpinist Wang 2217

【云原生技术】云计算与网络:容器服务(Tencent Kubernetes Engine,简称TKE)简介

基本概念主要特点应用场景技术实现容器服务(Tencent Kubernetes Engine,简称TKE)是腾讯云提供的一种托管的容器管理服务,基于开源的Kubernetes系统。TKE旨在简化容器的部署、管理和扩展,并且提供高性能、可靠性和安全性,适用于各种规模的企业和应用。

weixin_46453070的博客 2043

Python爬虫实战教程:如何高效爬取税务局通知通告

税务局发布的通知通告包含政策法规、办税指南、公告信息等,是纳税人、企业合规经营的重要参考。官网发布频率高,手动查看不便,自动爬取并保存,方便信息及时掌握及历史数据归档。本文以合法合规的方式示范,建议实际应用前确认目标网站允许爬取的范围和方式。建议使用pandas进行数据清洗,如去重、空值处理等。对于研究税务政策、进行大数据分析、搭建行业信息平台,爬取税务局通知通告信息尤为关键。公告列表以分页形式展现,包含标题、发布时间和详情页链接。进行政策趋势图、发布频率统计等可视化。爬取公开数据时,务必遵守网站的。

2201_76125261的博客 1781

Android插件化之RePlugin原理解析

Replugin原理解析

拿节 1915

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Replugin插件化框架核心原理

插件化技术随着360公司2016年DroidPlugin、2017年RePlugin的相继公布和开源,达到了顶峰。随后这几年进入了普及和落地期,到今天已不再新鲜和热门。但对于以插件化框架为基础架构进行业务开发的同学而言,熟悉其原理和具体实现,不仅是工作本身需要,也能增进Android内功的修炼。 相信了解过Replugin的同学都知道,Replugin的最大特点是坑位和唯一Hook点。 那么问题来...

chwnpp2的专栏 1170

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

插件化框架Replugin使用

关于replugin不做介绍,可以看其他博客。 环境介绍 Android stuido 3.4 gradle 5.1.1 replugin 2.3.3 androidx 插件化项目结构 坑: Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.localbroadcastmanager.content.LocalBroadcastMan...

一抹离愁 3798

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

是时候来一波Android插件化了

是时候来一波Android插件化了 是时候来一波Android插件化了 前言 Android开发演进 模块化介绍 插件化介绍 前提技术介绍 APK构成 Manifest Application 四大组件 so resource 安装路径 App启动流程介绍 IPC & Binder AMS 插件化技术问题与解决方案 代码加载 Java ClassLoader Android ClassL

流水不腐小夏 2441
上一篇: Android进阶——图片加载框架Picasso的使用
下一篇: Android插件化——Replugin实战初体验
红酒配电影
博客等级 码龄10年 62粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值