面试题十:Android项目构建

目录

描述一下apk的打包流程?

了解APK的安装流程吗,描述一下?

Proguard代码混淆

1、Proguard是什么

2、Proguard技术的功能

3、Proguard工作原理

4、为什么需要进行混淆?


描述一下apk的打包流程?

Android的包文件APK分为两个部分:代码和资源,所以打包方面也分为资源打包和代码打包两个方面,这篇文章就来分析资源和代码的编译打包原理。

APK整体的的打包流程如下图所示:

面试题十:Android项目构建_第1张图片

具体说来:

  1. 通过AAPT工具进行资源文件(包括AndroidManifest.xml、布局文件、各种xml资源等)的打包,生成R.java文件。
  2. 通过AIDL工具处理AIDL文件,生成相应的Java文件。
  3. 通过Javac工具编译项目源码,生成Class文件。
  4. 通过DX工具将所有的Class文件转换成DEX文件,该过程主要完成Java字节码转换成Dalvik字节码,压缩常量池以及清除冗余信息等工作。
  5. 通过ApkBuilder工具将资源文件、DEX文件打包生成APK文件。
  6. 利用KeyStore对生成的APK文件进行签名。
  7. 如果是正式版的APK,还会利用ZipAlign工具进行对齐处理,对齐的过程就是将APK文件中所有的资源文件距离文件的起始距离都偏移4字节的整数倍,这样通过内存映射访问APK文件的速度会更快。

注意:AAPT是Android的资源打包工具 

aidl跟binder有关

了解APK的安装流程吗,描述一下?

APK的安装流程如下所示:

面试题十:Android项目构建_第2张图片

复制APK到/data/app目录下,解压并扫描安装包。

  1. 资源管理器解析APK里的资源文件。
  2. 解析AndroidManifest文件,并在/data/data/目录下创建对应的应用数据目录。
  3. 然后对dex文件进行优化,并保存在dalvik-cache目录下。
  4. 将AndroidManifest文件解析出的四大组件信息注册到PackageManagerService中。
  5. 安装完成后,发送广播。

Proguard代码混淆

1、Proguard是什么

Proguard工具是用于压缩、优化、混淆我们的代码,主要作用是可以移除代码中的无用类、字段、方法
和属性(缩小APP体积),同时还可以对它们进行混淆(防止被反编译)。

2、Proguard技术的功能

a、压缩:检查并移除无用的类
b、优化:移除无用的字节码命令
c、混淆:混淆定义的名称,把有意义的变成无意义的
d、预检测:

3、Proguard工作原理

EntryPoint,可以把它理解为一种标记,被标记为EntryPoint的类或方法在Proguard过程中不会被处理(压缩、混淆)。
在Proguard压缩的过程中,会先从EntryPoint类中搜索出哪些类和方法被标记了,这些就不会被处理。

4、为什么需要进行混淆?

Java是一种跨平台的解释性语言,而Java的源代码会被编译成字节码存储在.class文件当中,由于跨平台的需要,Java的字节码中包含了很多源代码的信息,包括变量名、方法名等,并通过这些名称访问变量和方法。而这些名称的语意信息对于运行来说是没有意义的,但是却很容易被跟踪、反编译Java源代码,为了防止这种现象,就需要使用Proguard对Java的字节码进行混淆。

 

你可能感兴趣的:(Android:面试2.0)