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

Android 应用构建速度提升的十个小技巧

首先来了解一下 “Google 追踪圣诞老人” 应用的工程背景: 这个应用有约 60M 大小,它包含 9 个模块,有 500 多个 Java 文件,1,700 多个 XML 文件、3,500 多张 PNG...,指的是我们对资源文件的修改,增加减少了图片和字符串资源等。...正确的禁用多 APK 构建的方法是创建一个属性来做判断,这里我们设置了一个名为 “devBuild” 的属性,在构建的过程中把这个值传给 gradle,此时 gradle 会将 splits.abi.enable...构建系统默认会将声明过或者使用过的资源全部打包进 APK,但在开发阶段我们可能只用到了其中一套而已,针对这种情况,我们需要使用 resConfigs() 来指定构建开发版本时所需要用到的资源,如语言版本和屏幕像素密度...特别提出一下关于 APK 体积的问题——对比了启用和禁用 PNG 压缩之后的 APK 体积之后,我们发现前后的体积并没有太大改变,这说明该工程里使用的 PNG 图片在导入之前已经经过了充分优化,PNG

95730

Android 应用构建速度提升的十个小技巧

image.png 首先来了解一下 “Google 追踪圣诞老人” 应用的工程背景: 这个应用有约 60M 大小,它包含 9 个模块,有 500 多个 Java 文件,1,700 多个 XML 文件...,指的是我们对资源文件的修改,增加减少了图片和字符串资源等。...如上图所示,这是我在禁用了多 APK 之后的效果,各项指标都在继续降低。 小技巧 4: 最小化使用资源文件 ?...构建系统默认会将声明过或者使用过的资源全部打包进 APK,但在开发阶段我们可能只用到了其中一套而已,针对这种情况,我们需要使用 resConfigs() 来指定构建开发版本时所需要用到的资源,如语言版本和屏幕像素密度...特别提出一下关于 APK 体积的问题——对比了启用和禁用 PNG 压缩之后的 APK 体积之后,我们发现前后的体积并没有太大改变,这说明该工程里使用的 PNG 图片在导入之前已经经过了充分优化,PNG

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

    Android 减包 - 减少APK大小

    一个APK也包含了以下文件,其中只有AndroidManifest.xml是强制的: resources.arsc: 包含了被编译的资源。...为了使用shrinkResources,你必须要启用代码混淆。在构建过程中,首先proguard移除了未使用的代码,然后gradle移除未使用的资源。...Gradle通过传递resConfigs和defaultConfig给构建系统,构建系统会防止不支持的配置出现在APK中,从而减少APK大小。...最小化第三方库中资源的使用 当开发Android应用时,你经常使用第三方库提升应用的可用性和灵活性。...代码方式绘制图像不需要任何空间因为你不再需要在APK中存储图像文件。 压缩PNG文件 AAPT工具能够在构建过程中通过无损压缩优化res/drawable/中的图片资源。

    1.8K60

    Android减包 - 减少APK大小

    一个APK也包含了以下文件,其中只有AndroidManifest.xml是强制的: resources.arsc: 包含了被编译的资源。该文件包含了res/values目录的所有配置的XML内容。...为了使用shrinkResources,你必须要启用代码混淆。在构建过程中,首先proguard移除了未使用的代码,然后gradle移除未使用的资源。...Gradle通过传递resConfigs和defaultConfig给构建系统,构建系统会防止不支持的配置出现在APK中,从而减少APK大小。...最小化第三方库中资源的使用 当开发Android应用时,你经常使用第三方库提升应用的可用性和灵活性。...代码方式绘制图像不需要任何空间因为你不再需要在APK中存储图像文件。 压缩PNG文件 AAPT工具能够在构建过程中通过无损压缩优化res/drawable/中的图片资源。

    1.8K100

    Gradle For Android(9)--自定义构建

    GooglePlay限制了APK大小50M,而一个更小的APK也就意味着用户会更快的下载和安装,并且减少内存空间的占用。 在这一节我们来看看如何通过Gradle构建配置来减少APK大小。...: $ gradlew clean assembleRelease --info 当使用这个Flag的时候,Gradle会打印出在构建过程中的很多其他信息,包括最终没有打入APK包中的每一个资源。...为了避免这种情况,我们可以在res/raw/目录下创建一个keep.xml文件,用来保持资源: xml version="1.0" encoding="utf-8"?...为了提升编译本身的速度,你可以设置JVM的参数。在Gradle的属性中,名为jvmargs,可以用来为JVM启用设置内存分配的值。这两个参数也会对构建速度有直接的影响:Xms和Xmx。...如果你启用了density分割,Gradle会为了每个density创建一个单独的APK。如果不需要density的话,你可以手动的exclude其中的densities,来提升构建速度。

    69710

    Android Gradle实用技巧(四) | 自动瘦身APK文件

    随着工程越来越大,功能越来越多,开发人员越来越多,代码越来越复杂,不可避免的会产生一些不在使用的资源,这类资源如果没有清理的话,会增加我们Apk的包大小,也会增加构建的时候。...他是一种在构建时,打包成Apk之前,会检测所有资源,看看是否被引用,如果没有,那么这些资源就不会被打包到Apk包中....因为是在这个过程中(构建时),Android Gradle构建系统会拿到所有的资源,不管是你项目自己的,还是引用的第三方的,它都一视同仁的处理,所以这个时机点可以控制哪些资源可以被打包,所以能解决第三方不使用的资源的问题...keep方法使用非常简单,我们要新建一个xml文件来配置,这个文件是 res/raw/keep.xml,然后通过tools:keep属性来配置,这个tools:keep接受一个以逗号(,)分割的配置资源列表...此外,对于res/raw/keep.xml这个文件我们不用担心,Android Gradle构建系统最终打包的时候会清理它,不会把它打包进Apk中的,除非你在代码中通过R.raw.keep引用了它。

    90220

    【玩转腾讯云】在 CODING DevOps 持续集成中使用 Buildx 构建 Docker 镜像

    现在容器化技术快速发展,Docker 镜像作为其基石,构建镜像的技术也在快速演进,去年 Docker 推出的 Buildki 技术试图去解决传统构建镜像过程中所存在的问题: 多系统、架构的 Docker...,下面开始介绍如何在 CODING DevOps 持续集成中使用 Buildx 构建 Docker 镜像。...README.md文件初始化仓库 -> 点击 快速初始化按钮 点击 右上角三个点 -> 新建 -> 文件 -> 输入 Dockerfile -> 点击 创建 写入以下内容 FROM alpine RUN...GIT_COMMIT CMD ["sh","-c","uname","-a"] 点击提交 启用持续集成 选择 持续集成 -> 构建计划 -> 创建持续集成任务(新建构建计划配置) -> 输入 计划名称...-> 在构建过程中点击各个步骤即可查看到构建输出 可以对比 构建镜像 构建镜像-buildx 的执行时间,发现第一次构建两者所用时间相差不大,之后的每次构建 构建镜像-buildx 所用的时间较短(30s

    2.2K2219

    学(kao)习(bei)官方关于64k异常处理 ^_^

    通过 ProGuard 移除未使用的代码 为版本构建启用代码压缩以运行 ProGuard。启用压缩可确保交付的 APK 不含有未使用的代码。...使用这些技巧使我们不必在应用中启用 Dalvik 可执行文件分包,同时还会减小 APK 的总体大小。...该情况不应出现在直接从应用代码访问的代码上,因为构建工具能识别这些代码路径,但可能在代码路径可见性较低(如使用的库具有复杂的依赖项)时出现。...该设置将启用一个名为 pre-dexing 的构建功能,此功能使用仅适用于 Android 5.0(API 级别 21)和更高版本的 ART 格式更快生成 Dalvik 可执行文件分包输出。...这些设置会使适用于 Gradle 的 Android 插件执行以下操作: 执行 pre-dexing:将每个应用模块和每个依赖项构建为单独的 DEX 文件; 将每个 DEX 文件加入 APK,并且不做任何修改

    97620

    Android开发:请你吃一顿史上最全的Android混淆大餐

    > 标记的 XML 文件(如 res/raw/keep.xml),并在 tools:keep 属性中指定每个要保留的资源,在 tools:discard 属性中指定每个要舍弃的资源。...这两个属性都接受逗号分隔的资源名称列表。同样,我们可以使用字符 * 作为通配符。如: xml version="1.0" encoding="utf-8"?...必要时,我们可以使用 Android Gradle 插件的 resConfigs 属性来移除您的应用不需要的备用资源文件(常见的有用于国际化支持的 strings.xml,适配用的 layout.xml...混淆输出结果 混淆构建完成之后,会在 /build/outputs/mapping/release/ 目录下生成以下文件: dump.txt 说明 APK 内所有类文件的内部结构...通过为每个发布构建保留一个 mapping.txt 文件副本,我们就可以在用户提交的已混淆的 StackTrace 来对旧版本应用的问题进行调试和修复。

    5.2K30

    一篇文章带你领略Android混淆的魅力

    XML 文件(如 res/raw/keep.xml),并在 tools:keep 属性中指定每个要保留的资源,在 tools:discard 属性中指定每个要舍弃的资源。...这两个属性都接受逗号分隔的资源名称列表。同样,我们可以使用字符 * 作为通配符。如: xml version="1.0" encoding="utf-8"?...必要时,我们可以使用 Android Gradle 插件的 resConfigs 属性来移除您的应用不需要的备用资源文件(常见的有用于国际化支持的 strings.xml,适配用的 layout.xml...5.1 混淆输出结果 混淆构建完成之后,会在/build/outputs/mapping/release/ 目录下生成以下文件: dump.txt: 说明 APK 内所有类文件的内部结构。...通过为每个发布构建保留一个 mapping.txt 文件副本,我们就可以在用户提交的已混淆的 StackTrace 来对旧版本应用的问题进行调试和修复。

    97320

    【Jetpack】DataBinding 架构组件 ( 数据绑定技术简介 | Android 中的 DataBinding 数据绑定 | 启动数据绑定 | 定义数据类 | 布局文件转换 )

    更加简洁 , 容易理解 , 提高工程的性能和可维护性 ; 二、Android 中的 DataBinding 数据绑定技术 ---- Android 中的 DataBinding 组件 可以将 Layout...组件 中 ; 使用 DataBinding 可以在 Android 的布局文件 中 , 承担部分 Activity 组件的工作 , 减少传统方式用法的 耦合度 ; 如 : 想要将 数据设置到 TextView...构建脚本 中 , " android / defaultConfig " 配置块中 , 配置如下内容 , 启用 DataBinding ; // 启用 DataBinding...data binding layout " 选项 , 选择该选项 , 就可以将布局文件切换成 DataBinding 布局文件 ; 如果没有该选项 , 说明在 build.gradle 构建脚本中 设置了...{ super.onCreate(savedInstanceState) // 设置布局文件 // 布局文件是 activity_main.xml

    1.6K20

    Android Studio 3.6 发布啦,快来围观

    在编辑器窗口的右上角,现在有三个按钮可用于在查看选项之间切换: 要启用拆分视图,请单击“ 拆分”图标 。 要启用XML源代码视图,请单击Source图标 要启用设计视图,请单击“ 设计”图标 ?...查看绑定 视图绑定后可以通过为每个 XML 布局文件生成绑定类来更轻松地编写与视图交互的代码。这些类包含对在相应布局中具有ID的所有视图的直接引用。...五、在APK分析器中反混淆类和方法字节码 使用APK Analyzer检查DEX文件时,可以按以下步骤对类和方法字节码进行模糊处理: 1.从菜单栏中选择 Build > Analyze APK。...启用此选项后,Android Studio会在同步过程中跳过构建任务列表,从而使Gradle Sync更快地完成并改善UI响应速度。...请记住,当IDE跳过构建任务列表时,Gradle面板中的任务列表为空,并且构建文件中的任务名称自动完成不起作用。

    9K20

    实现Android APK瘦身99.99%

    本文作者通过对 APK 内在机制的详细解析,给出了对 APK 各组成成分的优化方法及技术,并实现了一个基本 APK 的最小化过程。 正文: 高尔夫运动中,分数最小者胜出。...、一个字符串资源(Resource)和一个主题(Theme); AppCompat和ConstraintLayout的支持库; 一个AndroidManifest.xml文件; PNG 格式的启动图标...看上去首当其冲的目标是启动图标文件,因为 APK 中共包含了 15 个图像文件,并且在mipmap-anydpi-v26下还有两个 XML 文件。...启用最小化功能(Minification) 我们尚未在 App 的build.gradle文件中设置允许最小化(Minification)和资源收缩(Resource Shrinking)。...对于那些尚未在 App 中启用AndroidManifest.xml和shrinkResources的开发人员,这是本文给出的最需要重视的并应学会的技巧。

    1.9K30

    Kubernetes 安全大揭秘:从攻击面剖析到纵深防御体系构建(下)

    依赖链劫持:篡改基础镜像(如alpine)的APK仓库配置(/etc/apk/repositories),在容器构建阶段下载恶意软件包。...仓库权限滥用:攻击者通过窃取的凭证(如~/.docker/config.json)向私有仓库推送带后门的业务镜像(如frontend:v1.2.0)。...在Dockerfile中启用--security=insecure参数,禁止构建过程中加载外部资源。...运行时完整性校验: 使用Sigstore Cosign验证容器文件系统完整性,阻断未签名的二进制执行。 启用Kubernetes动态准入控制器(如Grafeas),强制Pod使用只读根文件系统。...5.4 技术纵深总结 横向移动与持久化的防御需构建“三位一体”体系: 事前预防:通过零信任网络、最小权限模型和自动化策略限制攻击面; 事中检测:利用eBPF、Falco和审计日志实现实时异常行为捕获;

    10110

    Android混淆你了解多少?

    > 标记的 XML 文件(如 res/raw/keep.xml),并在 tools:keep 属性中指定每个要保留的资源,在 tools:discard 属性中指定每个要舍弃的资源。...这两个属性都接受逗号分隔的资源名称列表。同样,我们可以使用字符 * 作为通配符。 如: xml version="1.0" encoding="utf-8"?...必要时,我们可以使用 Android Gradle 插件的 resConfigs 属性来移除您的应用不需要的备用资源文件(常见的有用于国际化支持的 strings.xml,适配用的 layout.xml...混淆输出结果 混淆构建完成之后,会在 /build/outputs/mapping/release/ 目录下生成以下文件: dump.txt 说明 APK 内所有类文件的内部结构...通过为每个发布构建保留一个 mapping.txt 文件副本,我们就可以在用户提交的已混淆的 StackTrace 来对旧版本应用的问题进行调试和修复。

    1.9K01

    Android性能优化之APK 极限压缩(资源越多,效果越显著)

    那么就会出现打包后的 APK 文件越来越大,如果突然有一天你们老板或领导叫你优化 APK 大小,你还不知道怎么优化那就有点说不过去了,这篇文章咱们就来一起分析并优化 APK 体积大小吧。...构建不会将该文件打包到 APK 之中。 指定要舍弃的资源可能看似愚蠢,因为您本可将它们删除,但在使用构建变体时,这样做可能很有用。...例如,如果您明知给定资源表面上会在代码中使用(并因此不会被压缩器移除),但实际不会用于给定构建变体,就可以将所有资源放入公用项目目录,然后为每个构建变体创建一个不同的 keep.xml 文件。...构建工具也可能无法根据需要正确识别资源,这是因为编译器会添加内联资源 ID,而资源分析器可能不知道真正引用的资源和恰巧具有相同值的代码中的整数值之间的差别。...如果它找到与其类似的字符串,或找到其他看似可用来构建与其类似的网址的字符串,则不会将它们移除。 这些是默认情况下启用的安全压缩模式的示例。

    4.1K30

    Jetpack Compose 使用前后对比

    下面是开启了 资源缩减 的最小化发布版 APK (使用了 R8) 通过 APK Analyzer 所测量的结果: △ 展示 Tivi APK 大小的图表 △ 展示 Tivi 方法数的图表 关于上述数字的说明...使用下面的命令可以排除各种构建文件、自动生成文件以及配置文件。 cloc ....毫不意外的,XML 行数大幅减少了 **76%**。再见了,布局文件,以及 styles、theme 等其他的 XML 文件。 有趣的是,Kotlin 代码的总行数也下降了。...退一步讲,考虑到 Kotlin 编译器与 Compose 编译器插件为我们所做的事情,如位置记忆化、细粒度重组等工作,构建时间能够 减少 29%, 可以说十分惊人。...我进行了许多无关乎迁移的修改,可能会使结果产生偏差。 依赖更新 在这 11 个月的迁移过程中,许多依赖都更新了。其中的大多数均为运行时依赖库,因此最有可能影响 APK 大小这一指标。

    1.1K30
    领券