首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android插件化架构 - Activity的启动流程分析

概述 Android插件化架构,目前第三方的框架比较多,早几年自己用的是DL框架,这个框架的源码比较简单主要用的是静态代理。...如果我们自己要去写一个插件化架构框架那要解决的问题会分为几个方面,类的加载,资源和布局的加载,广播的管理方式,Activity的加载和生命周期管理,Service的插件化,ContentProvider...的插件化等等等等,反正加载一个没有运行的app到主程序,需要解决的问题基本就这么多,如果能够一一解决那么就可以实现插件化了。   ...那么结合动态代码设计模式以及Activity的启动流程,我们就可以尝试去拦截Activity的启动流程,让没有在AndroidMainfest.xml中注册的Activity也能启动并且不报错,这样我们就算是跨出了插件化架构的第一步了...相关视频 一次让你彻底掌握Android插件化,征服面试!

45930
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android 应用程序签名

    Android应用程序签名相关的理论知识包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。 1、什么是签名?      ...Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!...Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。...这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。 3、为什么我开发的Android应用程序没有做什么签名也能在模拟器和手机上运行?      ...你没有给Android应用程序签名并不代表Android应用程序没有被签名。为了方便我们开发调试程序,ADT会自动的使用debug密钥为应用程序签名。debug密钥?它在哪?

    1.7K20

    Android的动态加载插件

    Android的动态加载插件apk 分析 动态加载主要分为加载使用插件的资源和管理插件的Activity、service、BroadcastReceiver的功能 1.插件的资源加载 我们都知道要获Res..., (检索在包归档文件中定义的应用程序包的总体信息) PackageInfo dexPackageArchiveInfo = manager.getPackageArchiveInfo(pluginPath...Activity管理,这边只做了native页面的管理 定义插件和宿主共同的接口,放在单独的module,让宿主和插件的module同时引用 import android.app.Activity; import...接着创建插件包的DexClassLoader对象,利用DexClassLoader加载资源的R类,通过反射拿到插件的资源resId,再利用插件的Resource对象获取对应的资源id的资源。...2、管理插件的native窗口,插件和宿主同时定义共同的接口,宿主利用DexClassLoader反射加载插件的native窗口类,判断插件类是否继承了相同的接口,反射接口对象,去管理插件页面

    1.9K30

    android插件化

    文章目录 一、插件化的由来 二、插件化要解决的问题 1、动态加载APK 2、资源加载 3、代码加载 一、插件化的由来 一个dex文件方法数限制: 因为现在的一个app中功能模块的解耦和运维团队的分离越来越厉害..., 如果每一个功能模块升级都对所有的模块进行升级,这样,发布流程的效率就太低了。...因此产生了插件化技术。 二、插件化要解决的问题 1、动态加载APK 有一个宿主程序,他会到我们指定的sd卡中加载apk, 会通过代理的activity去执行。...2、资源加载 AssetManager类,里面有一个隐藏的方法。来添加资源。...3、代码加载 类加载机制, android中的两个类加载器: DexClassLoader可以从jar文件中加载字节码的类加载器,主要用于类加载和代码的热更新; PathClassLoader 只能加载文件目录中的

    34910

    Android Gradle插件

    Gradle脚本是基于Groovy语言来编译执行的,Java、Groovy、Kotlin等都是基于JVM运行的,所以他们在语法上共性很多,熟悉Java的同学应该对Groovy上手很快 编写方法 在 Android...下的 gradle 插件共分为 两大类: 脚本插件:同普通的 gradle 脚本编写形式一样,可以直接写在build.gradle文件中,也可以自己新建一个 gradle 脚本文件中写 对象插件:通过插件全路径类名或...", ReleaseInfoTask) task 的作用就是通过实现自定义的 Extension,可以在 Gradle 脚本中增加类似 android 这样命名空间的配置,Gradle 可以识别这种配置...Gradle Plugin 1.5.0-beta1 开始,为了简化注入自定义 class 的操作,Android 提供了 Transform API,允许第三方插件在 class 文件被转换成 dex...classPool中,否则会编译不过 buildSrc不要在settings.gradle中配置 不管我们有没有修改jar的操作,也要拷贝到目标路径 Android ASM框架详解 Java学习之 javassist

    1.2K20

    Android插件ResourcesNotFoundException

    背景 之前遇到过一种ResourceNotFoundException,是因为在WebView初始化的时候,AssetManager被重新创建了,所有被添加的插件APK路径都被清空了,所以导致资源找不到...解开插件的APK确认: 资源的类型 资源的ID 根据ID找到对应的资源名称确认: 插件的APK中是存在这个资源的 AAPT将ID和资源名都打进了resources.arsc中。...搜索资源的引用: 发现在Activity的Theme中的activityOpenEnterAnimation中使用了该动画 将该资源替换之后,发现还是报同样的错误 最后发现在Activity结束的时候...overridePendingTransition 原因 因为在ActivityManagerService带过去的PackageName是主包的PackageName,而不是插件的,所以在主包的...resource.arsc中找不到对应的插件资源ID,所以导致的Crash。

    1.4K20

    「应用架构」应用程序架构的当前趋势

    图1 摆脱三层架构 应用程序体系结构的分层方法的问题在于它只在一个维度中定义应用程序(图2)。所有不同的数据源都在底层。所有用户界面(UI)逻辑都在顶层。而且,应用程序的其余部分介于两者之间。...图5 放弃过时的应用程序架构假设 应用程序设计人员一直在基于长期以来的假设来设计他们的应用程序。其中一些假设与移动、社交、云计算和新信息管理的交叉带来的新范式相冲突。...相反,应该围绕人际和社会沟通来设计应用程序。 接受应用程序范例和模型 术语“应用程序架构”是指应用程序的结构和组织,包括其组件以及它们之间的交互/相互依赖模型。...应用程序架构师应用架构范例,并使用常见的模式和模型来设计应用程序并定义其架构。...: 范式 模型 结构和组织 范例: 架构范例(有时称为架构样式)是一个总体概念框架,它影响您设计应用程序的方式。

    62820

    基于Flask的Web应用程序插件式结构

    事实上,很多应用程序基于插件式结构开发,可以很方便了扩展软件的功能,并且这些功能完全可以依托于第三方开发者,只要提供好接口和完备文档,比如wordpress、谷歌火狐浏览器等。...Python这样的动态语言天生就支持插件式编程。与C++相比,Python已经定义好模块的接口,想要载入一个插件,一个__import__()就能很轻松地搞定。不需要特定的底层知识。...而且与C++等静态语言相比,Python的插件式结构更显灵活。因为插件载入后,可以利用Python语言的动态性,充分地修改核心的逻辑。...——摘录于“如何设计插件式结构的程序,兼谈Python语言的动态性”         个人在开发个人博客站中,由于为了更“高大上的效果”,参考了一些文章和wordpress插件代码改造成了简单的插件式...,把一些内置的“功能点”改造成为了插件包。

    83720

    Android学习笔记(一)Android应用程序的组成部分

    Android应用程序由松散耦合的组件组成,并使用应用程序Manifest绑定到一起;应用程序Manifest描述了每一组件和它们之间的交互方式,还用于指定应用程序元数据、其硬件和平台要求、外部库以及必需的权限...一、应用程序的基本结构模块   · Activity:应用程序的表示层。每个UI都是通过Activity类的一个或多个扩展实现的。...Android中大量使用了Intent、Service或者Broadcast Receiver广播消息,以及请求对特定的一条数据执行操作。   ...二、Manifest文件简介   每一个Android项目都包含一个Manifest文件——Android Manifest.xml,它存储在项目层次中的最底层。...Manifest文件有一个根manifest标签构成,该标签带有一个被设为项目包的package属性。它通常包含一个xmls:android属性来提供文件内使用的某些系统属性。

    1K70

    前端插件化架构的思考

    一来是公司比较忙,二是自己也在思考一些新的问题。最近一个月,在我脑海回想最多的一个词语是“插件化架构”。作此文,也是想简单分享一下我对这个问题的见解。 来自 Webpack 的启发 ?...从 Webpack 的插件化架构设计上所表现出系统良好的开放性,可持续的简洁性,我自然想象到,为何不在业务系统中采用这样的插件化架构。 什么是插件?...这样理解,有助于我们设计出更容易复用的插件,同时也可以复用已有软件的系统。 插件化架构的优势 正如前文所说,插件化架构一个显而易见的优势就是它是开闭原则在跨系统级别的最佳实践。...何为跨系统,如果说设计模式是设计单个系统的最佳实践,那么我们已经论证,插件化架构可以链接多个子系统,而做到开闭原则。即插件核心和接口不变,系统可以持续接入新插件,来丰富系统的功能。...插件化架构的未来 这里不好说它一定是未来。暂且认为是我设想的未来发展的一种可能。

    2.8K20

    Android插件化——Activity的启动

    在之前的文章中,我们有讲过Android插件化加载资源。其核心思想是,通过仿照安装的流程,自行创建Resources,然后通过ResId去加载相应的资源。...获取插件的Resources的方法参考Android插件化——资源加载 在performLaunchActivity中,完成了newActivity后,在onCreate之前,我们会调用callActivityOnCreate...: 给 Activity的Context 赋予 插件的Resources 给 ContextWrapper 赋予 插件的Context 给 Activity 赋予 插件的Application 给 ContextThemeWrapper...如果包名与宿主不相等,且与已加载的插件包名相等。即将插件的包名和类名以及ActivityInfo放入intent中。...但是,我们的插件App没有安装,我们是如何绕过检查的呢? 首先,我们要了解Android是在哪里对Activity是否有注册进行检查的。

    80170

    Android 安全退出应用程序的方法总结

    Android 安全退出应用程序的方法总结 正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程。...android.os.Process.killProcess(android.os.Process.myPid()) 通过这种方式不能将应用程序完全杀死,并且他不会把当前应用应用的Activity的task...任务栈清空 第二种方法:终止当前正在运行的Java虚拟机,导致程序终止 System.exit(0); 不会把自己的应用程序杀死 第三种方法:强制关闭与该包有关联的一切执行 ActivityManager...-->name -->app //声明该类为整个应用程序全局的实例 添加android:name=".全局实例App" 创建整个应用程序全局的实例 App.class: ArrayList应用程序全局的实例引用 app.activities.add(this); //把当前Activity放入集合中 } public void onDestory(){

    1.2K110

    Android 安全退出应用程序的方法总结

    正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程。...android.os.Process.killProcess(android.os.Process.myPid()) 通过这种方式不能将应用程序完全杀死,并且他不会把当前应用应用的Activity的...task任务栈清空 第二种方法:终止当前正在运行的Java虚拟机,导致程序终止 System.exit(0); 不会把自己的应用程序杀死 第三种方法:强制关闭与该包有关联的一切执行 ActivityManager...-->name -->app //声明该类为整个应用程序全局的实例 添加android:name=".全局实例App" 创建整个应用程序全局的实例 App.class: ArrayList应用程序全局的实例引用 app.activities.add(this); //把当前Activity放入集合中 } public void onDestory(){

    2.8K60

    Android 插件化原理解析——Service的插件化

    在 Activity生命周期管理 以及 广播的管理 中我们详细探讨了Android系统中的Activity、BroadcastReceiver组件的工作原理以及它们的插件化方案,相信读者已经对Android...Framework和插件化技术有了一定的了解;本文将探讨Android四大组件之一——Service组件的插件化方式。...Activity组件的生命周期受用户交互影响,而这种变化只有Android系统才能感知,因此我们必须把插件的Activity交给系统管理,才能拥有完整的生命周期;但Service组件的生命周期不受外界因素影响...android:name="com.weishu.upf.service_management.app.ProxyService" android:process="plugin01..."/> android:name="com.weishu.upf.service_management.app.ProxyService" android:process

    1.2K20

    Android 插件化原理解析——Service的插件化

    在 Activity生命周期管理 以及 广播的管理 中我们详细探讨了Android系统中的Activity、BroadcastReceiver组件的工作原理以及它们的插件化方案,相信读者已经对Android...Framework和插件化技术有了一定的了解;本文将探讨Android四大组件之一——Service组件的插件化方式。...Activity组件的生命周期受用户交互影响,而这种变化只有Android系统才能感知,因此我们必须把插件的Activity交给系统管理,才能拥有完整的生命周期;但Service组件的生命周期不受外界因素影响...android:name="com.weishu.upf.service_management.app.ProxyService" android:process="plugin01...值得一提的是,我们对于Service组件的插件化方案实际上是一种「代理」的方式,用这种方式也能实现Activity组件的插件化,有一些开源的插件方案比如 DL 就是这么做的。

    1.9K20

    现代容器应用程序架构指南

    多云或混合云策略可以提供更高的可靠性。 性能监控和自动化:有效的性能监控和自动化故障恢复机制是至关重要的。 现代容器应用程序架构的特点 可伸缩性:能够根据负载自动调整资源。...这包括采用微服务、容器化、DevOps文化、以及有效的性能监控和灾难恢复策略。 随着技术的不断进步,现代应用程序架构已成为软件开发领域的一个热点话题。...本参考架构专注于以下关键原则: 平台容器云原生:这种架构旨在成为平台不可知的,允许您在不同的容器编排平台上部署应用程序,比如Kubernetes (k8s)或轻量级的k3s。...分布式存储:架构中集成了分布式存储解决方案,以确保应用程序数据的高可用性和可伸缩性。...使用提供的监控堆栈监控您的应用程序。 使用k8s或k3s将您的应用程序部署到目标集群。 设置Nginx入口和DNS,以将流量路由到您的应用程序。 有关更详细的指导和示例,请参阅此仓库中提供的文档。

    34510
    领券