Android 打包相关

Adroid 打包相关

  • apk打包流程

      1. aapt工具打包资源文件,生成R.java文件
      2. aidl工具处理AIDL文件,生成对应的.java文件
      3. javac工具编译Java文件,生成对应的.class文件
      4. 把.class文件转化成Davik VM支持的.dex文件
      5. apkbuilder工具打包生成未签名的.apk文件
      6. jarsigner对未签名.apk文件进行签名
      7. zipalign工具对签名后的.apk文件进行对齐处理
      8. Android应用程序(APK)的编译打包过程
    

Android 打包相关_第1张图片

  • apk安装流程

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

APK主要由以下几部分组成:

    META-INF/ :包含了签名文件CERT.SF、CERT.RSA,以及 manifest 文件MANIFEST.MF。
    assets/ : 存放资源文件,这些资源不会被编译成二进制。
    lib/ :包含了一些引用的第三方库。
    resources.arsc :包含res/values/中所有资源,例如strings,styles,以及其他未被包含在resources.arsc中的资源路径信息,例如layout 文件、图片等。
    res/ :包含res中没有被存放到resources.arsc的资源。
    classes.dex :经过dx编译能被android虚拟机理解的Java源码文件。
    AndroidManifest.xml :清单文件

其中占据较大内存的是res资源、lib、class.dex,因此我们可以从下面的几个方面下手:

  • 代码方面可以通过代码混淆,这个一般都会去做。平时也可以删除一些没有使用类。
  1. 去除无用资源。使用lint工具来检测没有使用到的资源,或者在gradle中配置shrinkResources来删除包括库中所有的无用的资源,需要配合proguard压缩代码使用。这里需要注意项目中是否存在使用getIdentifier方式获取资源,这种方式类似反射lint及shrinkResources无法检测情况。如果存在这种方式,则需要配置一个keep.xml来记录使用反射获取的资源。(https://developer.android.com/studio/build/shrink-code)[压缩代码和资源]

  2. 去除无用国际化支持。对于一些第三库来说(如support),因为国际化的问题,它们可能会支持了几十种语言,但我们的应用可能只需要支持几种语言,可以通过配置resConfigs提出不要的语言支持。

  3. 不同尺寸的图片支持。通常情况下只需要一套xxhpi的图片就可以支持大部分分辨率的要求了,因此,我们只需要保留一套图片。

  4. 图片压缩。 png压缩或者使用webP图片,完美支持需要Android版本4.2.1+

  5. 使用矢量图形。简单的图标可以使用矢量图片。

你可能感兴趣的:(Android进阶)