2020年Android大厂面试必备:插件化、模块化、组件化、热修复、增量更新、Gradle

五、插件化、模块化、组件化、热修复、增量更新、Gradle

1.对热修复和插件化的理解
2.插件化原理分析
3.模块化实现(好处,原因)
4.热修复、插件化
5.项目组件化的理解
6.描述请点击 Android Studio 的 build 按钮后发生了什么

参考答案:
1.对热修复和插件化的理解

Android 类加载器 PathClassLoader.java DexClassLoader.java BaseDexClassLoader.java DexPathList.java 复制代码

(1)PathClassLoader:只能加载已经安装到Android系统中的apk文件(/data/app目录),是Android默认使用的类加载器。

(2)DexClassLoader:可以加载任意目录下的dex/jar/apk/zip文件,比PathClassLoader更灵活,是实现热修复的重点。
在这里插入图片描述

// PathClassLoader
public class PathClassLoader extends BaseDexClassLoader {
   
    public PathClassLoader(String dexPath, ClassLoader parent) {
   
        super(dexPath, null, null, parent);
    }
 
    public PathClassLoader(String dexPath, String librarySearchPath, ClassLoader parent) {
   
        super(dexPath, null, librarySearchPath, parent);
    }
}
 
 
// DexClassLoaderpublic 
class DexClassLoader extends BaseDexClassLoader {
   
    public DexClassLoader(String dexPath, String optimizedDirectory,
            String librarySearchPath, ClassLoader parent) {
   
        super(dexPath, new File(optimizedDirectory), librarySearchPath, parent);
    }
}

BaseDexClassLoader

dexPath:要加载的程序文件(一般是dex文件,也可以是jar/apk/zip文件)所在目录。
optimizedDirectory:dex文件的输出目录(因为在加载jar/apk/zip等压缩格式的程序文件时会解压出其中的dex文件,该目录就是专门用于存放这些被解压出来的dex文件的)。
libraryPath:加载程序文件时需要用到的库路径。
parent:父加载器

阿里系:DeXposed、andfix:从底层二进制入手(c语言)。阿里andFix hook 方法在native的具体字段。
art虚拟机上是一个叫ArtMethod的结构体。通过修改该结构体上有bug的字段来达到修复bug方法的目的,
但这个artMethod是根据安卓原生的结构写死的,国内很多第

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Gradle 是一种现代的构建工具,可以帮助你轻松地构建、测试和打包 Java 项目。在 Gradle 中,你可以使用模块化的方式来组织你的项目,使得项目的不同部分可以相互独立地开发和测试。 下面是一个简单的 Gradle 模块化项目的搭建步骤: 1. 创建项目根目录和 Gradle 构建文件 在你的计算机上创建一个新的项目根目录,例如 `myproject`。在 `myproject` 目录下创建一个名为 `build.gradle` 的文件,这是 Gradle 构建文件,用于定义构建和测试任务。 2. 创建模块目录 在 `myproject` 目录下创建一个名为 `src` 的子目录,该目录将包含你的 Java 代码和测试代码。在 `src` 目录下创建两个子目录:`main` 和 `test`,分别用于存放主要代码和测试代码。 3. 创建模块 在 `src/main` 目录下创建一个名为 `java` 的子目录,该目录将包含你的 Java 代码。在 `java` 目录下创建一个或多个包,用于组织你的代码。例如,你可以创建一个名为 `com.example.myproject` 的包。 在 `src/test` 目录下创建一个名为 `java` 的子目录,该目录将包含你的测试代码。在 `java` 目录下创建一个或多个包,用于组织你的测试代码。例如,你可以创建一个名为 `com.example.myproject.test` 的包。 4. 配置 Gradle 构建文件 打开 `build.gradle` 文件,并添加以下内容: ``` plugins { id 'java' } repositories { mavenCentral() } dependencies { // 添加你的依赖项,例如: implementation 'com.google.guava:guava:30.1.1-jre' testImplementation 'junit:junit:4.13.2' } sourceSets { main { java { srcDirs = ['src/main/java'] } } test { java { srcDirs = ['src/test/java'] } } } ``` 这个 Gradle 构建文件配置了一个 Java 插件和一个 Maven 仓库,还定义了项目的依赖项和源代码目录。你可以添加更多的依赖项,根据你的项目需要进行适当的修改。 5. 构建和测试项目 在命令行中进入 `myproject` 目录,运行以下命令构建项目: ``` gradle build ``` 这将编译你的 Java 代码,并使用 JUnit 运行你的测试代码。如果构建成功,你将会在 `myproject/build/libs` 目录下找到一个名为 `myproject.jar` 的文件,这是你的项目的可执行文件。 你还可以运行以下命令来仅仅运行测试: ``` gradle test ``` 这将使用 JUnit 运行你的测试代码,并输出测试结果。 以上就是使用 Gradle 进行模块化搭建 Java 项目的基本步骤。你可以根据你的项目需求进行适当的修改,例如添加更多的模块或配置更多的构建任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值