在使用docker时,会随着时间的累积,产生越来越多的未使用的镜像和启动失败、停止使用的容器,且不会再使用到。...这部分数据无用且还占用空间,这时我们需要将无用的数据一键删除掉 一键删除无用容器或已停止容器 需Docker 1.13版本以后 docker container prune -f 一键删除未使用的
前言 在iOS项目开发的过程中,如果版本迭代开发的时间比较长,那么在很多版本开发以后或者说有多人开发参与以后,工程中难免有一些垃圾资源,未被使用却占据着api包的大小!...这里我通过Python脚本来查找项目中未被使用的图片、音频、视频资源,然后删除掉;以达到减小APP包大小的目的!...代码 先查找项目中所以的资源文件存到你数组里面 def searchAllResName(file_dir): global _resNameMap fs = os.listdir(file_dir...,那就先删除project.pbxproj中的引用,再删除本地资源文件; # 删除无用的资源文件 def delAllRubRes(): global _resNameMap, _hadDelMap...,开始从_resNameMap中移除已被处理过的资源文件 # 并删除本地的对应的资源文件 for item in _needDelResName: tmp_path = _resNameMap
根据 Java 官方介绍,Proguard 对应的具体中文定义如下: 它是一个包含代码文件压缩、优化、混淆和校验等功能的工具 它能够检测并删除无用的类、变量、方法和属性 它能够优化字节码并删除未使用的指令...它能够将类、变量和方法的名字重命名为无意义的名称从而达到混淆效果 最后,它还会校验处理后的代码,主要针对 Java 6 及以上版本和 Java ME 资源压缩 Android 中,编译器为我们提供了另外一项强大的功能...资源压缩能够帮助我们移除项目及依赖仓库中未使用到的资源,有效地降低了apk包的大小。...Affected Modules: app 自定义要保留的资源 当我们开启了资源压缩之后,系统会默认替我们移除所有未使用的资源,假如我们需要保留某些特定的资源,可以在我们项目中创建一个被 <resources...这时,资源压缩器会采取防御性行为,将所有具有匹配名称格式的资源标记为可能已使用,无法移除。
根据 Java 官方介绍,Proguard 对应的具体中文定义如下: 它是一个包含代码文件压缩、优化、混淆和校验等功能的工具 它能够检测并删除无用的类、变量、方法和属性 它能够优化字节码并删除未使用的指令...它能够将类、变量和方法的名字重命名为无意义的名称从而达到混淆效果 最后,它还会校验处理后的代码,主要针对 Java 6 及以上版本和 Java ME 2.3 资源压缩 Android 中,编译器为我们提供了另外一项强大的功能...资源压缩能够帮助我们移除项目及依赖仓库中未使用到的资源,有效地降低了apk包的大小。...Affected Modules: app 2.4 自定义要保存的资源 当我们开启了资源压缩之后,系统会默认替我们移除所有未使用的资源,假如我们需要保留某些特定的资源,可以在我们项目中创建一个被标记的...这时,资源压缩器会采取防御性行为,将所有具有匹配名称格式的资源标记为可能已使用,无法移除。
实际项目中肯定是图片资源占比相对较大) 从上图看出,实际上 APK Analyzer 的作用不光是查看 APK 大小,从它的名字也能看出它是用来分析 APK 的,因此可以使用它来分析一些优秀 APK...安装包优化实践 Lint查找无用文件 使用 Lint 查看未引用资源。Lint 是一个静态扫描工具,它可以识别出项目中没有被任何代码所引用到的资源文件。...具体使用也很简单,只要在 Android Studio 中点击 Analyze -> Inspect Code,如下所示: image.png 选中整个项目,如下所示 image.png 如果项目中有未被使用资源...image.png 上面就是未使用的资源:会使应用程序变大,并降低构建速度。 还有很多就不多介绍了,感兴趣的可以去玩玩。...关于 App Bundle 这个功能就跟ios一样了,他们就是将所有资源全部打到项目中,然后App Store,根据安装设备的属性,来选取相应资源打包进行下载。
ProGuard来删除未使用的资源文件和类,以减小APK体积。...通过精简和优化代码,可以减小APK文件的大小。 代码混淆:使用ProGuard或R8进行代码混淆,删除未使用的类和方法,减小APK文件的大小。...移除未使用的库和依赖项,可以显著减小APK体积。 资源优化:使用向量图标代替位图图标,减小图标资源的大小。同时,删除未使用的资源文件。...Lint分析:使用Android Studio的Lint工具来分析应用,它会识别和报告未使用的资源文件。根据Lint的建议,删除未使用的资源。...压缩工具:使用APK压缩工具,如APKTool来手动优化APK文件,删除未使用的资源。 结论 APK瘦身是Android应用开发中的关键任务,可以提高应用的性能和用户体验。
在资源目录中分类组织资源后,我们就可以通过引用资源 ID 来引用资源,所有资源的ID 都在项目中aapt工具自动生成的./gen/R类中定义,该文件不能被手动修改,当资源发生变动时,它会相应更新。...Android Lint是针对Android的静态代码分析工具,能够对Android项目中潜在的bug、可优化的代码、安全性、性能、可用性、可访问性、国际化等进行检查。...resource文件 3、也可以在Android Studio中使用Analyze-unUsedResources项查找出所有未被引用的资源列表: 在结果上右键选择ApplyFix’Android Lint...Quick Fixes’,可以直接删除所有无用的资源: 可能存在的误删除与白名单配置 lint扫描工具无法判断出通过反射方式(android.content.res.Resources#getIdentifier...()返回true,那么代码中的资源引用会触发visitResourceReference()处理函数: 3、同样的,查找xml文件中的引用: 4、从收集到的资源声明列表中删除被引用的资源列表并去除xml
1 系统API的坑 Android library中的资源ID在R.java中不是final类型: 问题现象:在library中使用switch语句区分不同的资源ID时,IDE...Task是放在一个独立的后台线程中执行的,也就是如果有多个Task同时被调用也是顺序执行的;从1.6开始,改为通过线程池可以支持并行执行多个Task;但从3.0开始,又改回只有一个独立的后台线程执行所有...Android这样做的目的是防止广播无意或者不必要地开启未启动的APP后台服务。...也就是说在Android3.1及以上的版本,程序在未启动的情况下通过应用自身完成一些操作是不可能的,但Android提供了一种借助其它应用发送指定Flag广播的方式,达到应用在未启动的情况下仍然能够收到消息的效果...从Android 3.1开始,系统给Intent定义了两个新的Flag,分别为FLAGINCLUDESTOPPEDPACKAGES(表示包含未启动的App)和FLAGEXCLUDESTOPPEDPACKAGES
Android应用程序包 Android App Bundle是一种新的上传格式,其中包含应用程序的所有已编译代码和资源,但会延迟APK生成并登录到Google Play商店。...这些新的检查范围从关于潜在可用性问题的警告到关于潜在安全漏洞的高优先级错误。 新的Gradle目标 使用新的lintFixGradle任务将lint检查建议的所有安全修复直接应用于源代码。...这意味着,如果您有使用V1编译的库依赖项,则可以将它们与使用Data Binding V2的项目一起使用。但是请注意,使用V1的项目无法使用通过V2编译的依赖项。...通过此版本,您现在还可以查看和检查包含在导入到应用项目中的外部C / C ++库依赖项的头文件。...在cpp 目录中,位于应用程序项目范围内的所有头文件都将在每个本地C / C ++库依赖项的include节点下进行组织。
以依赖项形式添加您的库 要在另一个应用模块中使用您的 Android 库的代码,请按以下步骤操作: 1、通过两种方式之一将库添加到您的项目(如果您是在相同项目中创建的库模块,则该模块已经存在,您可以跳过此步骤...要阻止您的库用户访问仅供内部使用的资源,您应通过声明一个或多个公开资源的方式来使用这种自动私有标识机制。 要删除某个公开资源,请将一个声明添加到您的库的 public.xml文件中。...如果多个 AAR 库之间发生冲突,将使用依赖项列表首先列出(位于 dependencies块顶部)的库中的资源。...为了避免常用资源 ID 的资源冲突,请使用在模块(或在所有项目模块)中具有唯一性的前缀或其他一致的命名方案。...从主模块和库模块生成的 R 类会在所需的所有软件包(包括主模块的软件包和库的软件包)中创建。
删除不必要的空白字符、注释和换行符。 优化代码结构,例如内联函数、删除未使用的代码和资源等。 对控制流进行混淆,例如添加冗余代码、修改循环结构等。...io.flutter.plugin.** { *; } 三、优化应用程序包体积 3.1、移除未使用的资源 移除项目中未使用的资源(如图片、字体和动画),以减小应用程序的包体积。...在Android项目中,可以使用shrinkResources选项来移除未使用的资源: android { ... buildTypes { release { ... shrinkResources...true } } ... } 3.2、压缩图片资源 压缩项目中的图片资源,以降低它们的文件大小。...可以使用像ipaguard这样的工具来压缩图片资源。 四、提高反编译难度 4.1、混淆字符串 为了提高反编译的难度,可以在编译阶段处理掉明文字符串。
从APK的构成中可以看出占比较大的几个部分,可以着重对其优化 优化 res文件夹 图片资源压缩 1、ImageOptim 提供了相应客户端,支持通过客户端批量处理,mac上可以使用如下命令开启: ?...开发了一个gradle插件来批量操作,网上也有一些类似的插件:TinyPng Gradle插件 移除无用资源 1、通过使用Lint检测删除无用资源,某些业务代码删除的时候遗漏了相应资源,可以写个脚本检测移除不再使用的资源...xxhdpi"配置支持的资源,只能人肉删除。...资源混淆 开源解决方案AndResGuard可以看下,通过使用段路径和压缩可以减小apk,需要注意的是你的项目中某些资源需要keep,减少了1.5M。...架构支持 Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64
如果您使用 Jetpack Compose 构建 Android 应用程序,请使用 collectAsStateWithLifecycle API 从您的UI以生命周期感知的方式收集流。...在后台保持资源活跃 Android 应用程序可以在无数的 Android 设备上运行。不幸的是,并非所有设备和所有用户都拥有无穷无尽的资源。应用程序通常在受限环境中运行。...运行 Android 应用时,有一些重要因素会影响用户体验和设备系统健康: CPU 使用率:在所有设备组件中,CPU 的电池消耗量最高。电池寿命是用户长期关注的问题。...如果被滥用,用户可能会卸载您的应用。 数据使用:在未连接到 Wi-Fi 时减少应用程序中的网络流量可以帮助用户节省资金。 内存使用:应用程序如何使用内存会对设备的整体稳定性和性能产生非常大的影响。...但是,在 Android 应用程序中使用 Compose 时,Android 生命周期在如何管理资源方面也起着至关重要的作用。
Proguard是一个免费的Java类文件压缩、优化、混淆、预先验证的工具,可以检测和移除未使用的类、字段、方法、属性,优化字节码并移除未使用的指令,并将代码中的类、字段、方法的名字改为简短、无意义的名字...4、 Apk瘦身之资源瘦身 对于重要性,代码和资源的瘦身同样重要,但是从效果上来说,资源文件的瘦身效果比代码的瘦身效果要好非常多。...4.1 移除无用的资源文件 移除无用资源文件要比移除无用代码容易,在Android Studio的任何文件中右击,选择清除无用资源即可删除没有用到的资源文件。 ?...目前Android共支持七种不同类型的CPU架构,分别是:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),Mips (从2012年起),ARMv8,Mips64和x86_64 (...一点经验:对Apk进行瘦身,瘦身So以及资源文件是见效最快的操作。瘦身So以及删除不用的图片、压缩图片之后,Apk会缩减很大的比例;而针对Dex的优化可能作用不会很明显。
在Application Icon选项中,我们可以任意选择一个已有的图片资源文件,并设置为应用程序的图标....然后,链接器将丢弃未使用(或引用)的所有未使用的程序集,类型和成员。这就使得我们最终的应用大小得到了显着的降低。...ProGuard通常用于减少APK中大型附加库(如Google Play服务)的占用空间来获得较小的应用程序。 ProGuard会删除未使用的Java字节码,这就会让生成的应用程序更小。...一般,在小型Xamarin.Android应用程序上使用ProGuard通常可以减少大约24%的大小 如果,在具有多个库依赖性的较大应用程序上使用ProGuard通常可以实现更大的尺寸缩小。...Xamarin.Android还支持自定义ProguardConfiguration构建操作。您可以将自定义ProGuard配置文件添加到项目中,右键单击它,并将其作为构建操作选择.
让我们当一次坏人,将我们所有的加载图标替换为单一的单像素黑点,并置于未验证的res/drawable目录中。图片大小约 67 个字节。...但是resources.arsc依然引用了如下项: 一个布局文件; 一个字符串资源; 一个调用图标。 让我们从第一项着手。...这看上去是一个小更改,但是它从resources.arsc中删除了一项,削减了 Manifest 文件中的字符数,并从“res”目录中移除了一个文件。略有裨益,我们削减了 228 个字节。...总而言之,gradle 生成了一个未签名的归档文件,zipalign 更改了未压缩资源的字节对齐方式,用于改进加载 APK 时的 RAM 使用,最后 APK 将被加密签名。...因此,只要简单地删除原始文件并在终端运行touch classes.dex,使用这一空文件就能获得近 10% 的规模削减。 有时看上去最愚蠢的方法反而最有效。
目前而言,项目中使用到真正用到 So 库没几个,全部兼容太过于浪费,据说 arm 属于通用,那么这里同语言设置一样,仅支持 arm 即可。 defaultConfig { ......: 代码优化:通过检测并安全移除未使用的类、字段、方法和属性; 资源压缩:从应用中移除未使用的资源,此过程包含移除库依赖项中未使用的资源文件。...随后我们继续打包,查看混淆、资源压缩后 Apk 大小以及部分变化: ? dex 从 3 个降低到 2 个。未 Keep 的文件均已混淆,而 Keep 的文件依旧傲娇挺立,如下图: ?...其目的是要确保所有未压缩数据的开头均相对于文件开头部分执行特定的对齐。具体来说,它会使 APK 中的所有未压缩数据(例如图片或原始文件)在 4 字节边界上对齐。...这样一来,即可使用 mmap() 直接访问所有部分,即使其中包含具有对齐限制的二进制数据也没关系。这样做的好处是可以减少运行应用时消耗的 RAM 容量。 如何使用?
一个APK文件就是ZIP包,其中包含了组成你的应用的所有文件,比如Java类文件,资源文件,和一个包含被编译资源的文件。...当lint工具发现了项目中潜在的未使用的资源,它会打印以下类似信息: res/layout/preferences.xml: Warning: The resource R.layout.preferences...为了使用shrinkResources,你必须要启用代码混淆。在构建过程中,首先proguard移除了未使用的代码,然后gradle移除未使用的资源。...尽管Android支持所有这些屏幕密度,但你不需要为每个密度都配置相应的资源。 如果你知道某种特定屏幕密度已经很少有用户使用了,那么你可以考虑是否需要为这个屏幕密度配置资源。...使用Android NDK提供的arm-eabi-strip工具,能从Native库中删除不必要的调试符号,之后你再编译release包。
领取专属 10元无门槛券
手把手带您无忧上云