美文网首页
apk 瘦身记录

apk 瘦身记录

作者: BIGLEFT_393d | 来源:发表于2020-07-10 15:49 被阅读0次

了解apk结构
apk文件包含以下目录:

assets/: 包含了应用的资源,这些资源能够通过AssetManager对象获得。

lib/: 包含了针对处理器层面的被编译的代码。这个目录针对每个平台类型都有一个子目录,比如armeabi,armeabi-v7a, arm64-v8a, x86, x86_64和mips。

res/: 包含了没被编译到resources.arsc的资源。

META-INF/:

包含CERT.SF和CERT.RSA签名文件,也包含了MANIFEST.MF文件。(译注:校验这个APK是否被人改动过)

包含以下文件:

classes.dex: 包含了能被Dalvik/Art虚拟机理解的 dex 文件格式的类。

resources.arsc: 包含了被编译的资源。该文件包含了res/values目录的所有配置的 xml内容。打包工具将 xml

内容编译成二进制形式并压缩。这些内容包含了语言字符串和styles,还包含了那些内容虽然不直接存储在resources.arsc文件中,但是给定了该内容的路径,比如布局文件和图片。所以又叫

资源映射表

AndroidManifest.xml:

包含了主要的Android配置文件。这个文件列出了应用名称、版本、访问权限、引用的库文件。该文件使用二进制 xml格式存储。(译注:该文件还能看到应用的minSdkVersion, targetSdkVersion等信息)

1.使用SVG对资源图片优化

SVG(ScalableVectorGraphics),可缩放矢量图。SVG不会像位图一样因为缩放而让图片质量下降。优点在于可以减小APK的尺寸。常用于简单小图标。

svg是由xml定义的,标准svg根节点为<svg>。

Android中只支持 <vector>,我们可以通过 vector 将svg的根节点 <svg> 转换为 <vector>。

在AndroidStudio中打开工程,在res目录中点击右键

注意:通过svg处理200*200一下的图片


SVG批量转换

如果有多个svg需要转换为android的vector,则可以通过第三方工具 svg2vector进行批量转换。

执行转换命令:

java -jar svg2vector-cli-1.0.0.jar -d . -o a -h 20 -w20

-d 指定svg文件所在目录

-o 输出android vector图像目录

-h 设置转换后svg的高

-w 设置转换后svg的宽

矢量图向后兼容--生成PNG

Android 5.0(API 21)之前的版本不支持矢量图,使用Vector Asset Studio 有两种方式适配。

方式一:生成 png 格式的图片

Vector Asset Studio 可在构建时 针对每种屏幕密度将矢量图转换为不同大小的位图,在

build.gradle 中配置如下:

SVG 适用于 Gradle 插件1.5 及以上版本;

android{

   defaultConfig{

        //5.0(API 21)版本以下,将svg图片生成指定维度的png图片

       generatedDensities = ['xhdpi','xxhdpi']

    }

}

默认会在drawable开头的几个文件件都生成png

方式二:支持库

在 build.gradle 中配置如下,适用于 Gradle 插件2.0及以上版本:

android{

    // GradlePlugin 2.0+

   defaultConfig{

        //利用支持库中的 VectorDrawableCompat 类,可实现 2.1 版本及更高版本中支持 VectorDrawable

       vectorDrawables.useSupportLibrary = true

    }

}

dependencies {

  // 支持库版本需要是23.2 或更高版本

  compile'com.android.support:appcompat-v7:23.2.0'

}

使用矢量图 必须使用 app:srcCompat 属性,而不是 android:src,如下:

Tint着色器

我们一般让矢量图为黑色,然后用Tint 着色器去修改矢量图的颜色。(不建议直接在文件内修改)

Tint着色器-点击效果

创建两个选择器,然后正常使用即可

<!-- drawable 选择器 battery_selector.xml-->

<!-- color 选择器 battery_tint_selector.xml-->

<!-- 使用 -->

2.移除无用资源

1.AS 给我们提供了一键移除所有无用的资源,如图。

但是这种方式不建议使用,因为如果某资源仅存在动态获取资源id 的方式,那么这个资源会被认为没有使用过,从而会直接被删除。

动态获取方式:

getResources().getIdentifier("name","defType",getPackageName());

2,。lint 使用

建议对代码比较熟悉,能够大致清楚哪些文件是无用的,进行筛选删除

3.国际化配置

通过在gradle 文件配置我们需要的语言:

android{

   defaultConfig{

        // 只适配英语

       resConfigs 'en'

    }

}

这样打包apk 内就只有我们配置的语言

4.压缩代码

将 minifyEnabled 设置为 true 即可

但是我们会发现,运行时会报错,因为 minifyEnabled 即压缩了代码,也混淆了代码,所以我们需要处理下混淆

5.压缩资源

资源压缩只与代码压缩协同工作

默认情况未启用严格模式,如需启动则需设置 shrinkMode,创建keep.xml,如下

非严格模式:对于动态获取方式如:

getResources().getIdentifier("name","defType",getPackageName());

会对name开头的文件都做保留

严格模式:只保留被使用的资源文件名一致的文件

将该文件保存在项目资源中,例如,保存在 res/raw/keep.xml。构建不会将该文件打包到

APK 之中。

如果你有想要保留或舍弃的特定资源,则可以创建如下的 xml

文件,然后在 tools:keep 属性中指定每个要保留的资源,在 tools:discard 属性中指定每个要舍弃的资源。

相关文章

  • Android apk瘦身实践

    写在前面 最近刚做了一波apk瘦身优化,瘦身后apk大小降低了19%左右。打铁要趁热,赶紧记录一下先。 APK A...

  • apk 瘦身记录

    了解apk结构apk文件包含以下目录: assets/: 包含了应用的资源,这些资源能够通过AssetManage...

  • APK瘦身 减小APP体积

    APK dex瘦身 APK res瘦身 APK减小语言包 APK 重新打包 PNG转JPG tiny处理png w...

  • Drawable 着色的后向兼容方案

    Drawable 着色的后向兼容方案(APK瘦身实践APK瘦身实践)[http://www.cnblogs.com...

  • Android性能优化

    Apk瘦身实用总结 Apk瘦身 Apk的大小对于用户是否选择下载应用起着至关重要的影响下面是对于减小Apk大小的一...

  • Android性能优化:实战讲解包体积优化(上)

    一、瘦身优化及 Apk 分析方案介绍 1、瘦身优势 我们首先来介绍下,为什么我们需要做 APK 的瘦身优化? AP...

  • app性能优化

    Android冷启动时间优化 Android开发——避免内存泄露 APK瘦身实践 APK瘦身记,如何实现高达53%...

  • apk瘦身

    Android性能优化之APK瘦身详解(瘦身73%) - 简书

  • android apk瘦身

    apk瘦身会带来哪些好处,本文就不赘述了,会依照下面的目录来对apk瘦身进行总结 目录 apk都有啥? 从资源下手...

  • Android APK瘦身实践

    本文记录自己之前做的一些apk瘦身措施,都是在网上搜索整理的通用方法 依据官方文档进行瘦身 参考文章:压缩代码和资...

网友评论

      本文标题:apk 瘦身记录

      本文链接:https://www.haomeiwen.com/subject/zgvpcktx.html