- resources.arsc :包含已编译的资源。此文件包含 res/ 文件夹的所有配置中的 XML 内容。打包工具会提取此 XML 内容,将其编译为二进制文件形式,并压缩内容。此内容包括语言字符串和样式,以及未直接包含在 resources.arsc 文件中的内容(例如布局文件和图片)的路径。
- classes.dex :包含以 Dalvik/ART 虚拟机可理解的 DEX 文件格式编译的类。
- AndroidManifest.xml :包含核心 Android 清单文件。此文件列出了应用的名称、版本、访问权限和引用的库文件。该文件使用 Android 的二进制 XML 格式。
二、Android Size Analyzer 插件
首先在 Android Studio 中的插件市场下载安装 Android Size Analyzer 插件。安装插件后,从菜单栏中依次选择 Analyze > Analyze App Size,对当前项目运行应用大小分析。分析了项目后,系统会显示一个工具窗口,其中包含有关如何缩减应用大小的建议。
三、移除未使用资源
移除未使用的资源是减小apk大小最有效的措施
1、应用资源缩减
如果在应用的build.gradle 文件中启用了资源缩减:shrinkResources,则 Gradle 在打包APK时可以自动 忽略未使用资源。 资源缩减只有在与代码缩减:minifyEnabled 配合使用时才能发挥作用。在代码缩减器移除所有不使用的代码后,资源缩减器便可确定应用仍要使用的资源,从而在打包时优化这些资源 。
在项目application模块的build.gradle文件中修改如下
android {
、、、
buildTypes {
release {
signingConfig signingConfigs.config
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
}
、、、
}
2、自定义要保留的资源
我们在第一步中启用资源缩减之后,可能会因为缺少某个资源而不能编译成功,因为可能有的资源被间接引用了,但是也被缩减掉了,这时候我们可以手动配置保留资源;当然也可以声明废弃资源;
如果有想要特别声明需要保留或舍弃的特定资源,创建res/raw/keep.xml ,tools:keep 属性中指定每个要保留的资源,在tools:discard 属性中指定每个要舍弃的资源。这两个属性都接受以逗号分隔的资源名称列表。还可以将星号字符用作通配符。
keep.xml如下所示
<?xml version="1.0" encoding="utf-8"?>3、使用Lint分析器
lint工具是 Android Studio 中附带的静态代码分析器,可检测到res/ 文件夹中未被代码引用的资源。 lint 工具不会扫描assets/ 文件夹、通过反射引用的资源或已链接至应用的库文件。此外,它也不会移除 资源,只会提醒有未使用的资源。
从菜单栏中依次选择Analyze > Run Inspection By Name > 输入“unused resources” 回车执行。 与资源缩减不同,这里点击删除,那就是把文件删了。
因为lint分析并不是非常精确,并且删除是直接把文件删除了,不像资源缩减只是打包时不引入,所示我们使用lint删除文件时需要非常确定此资源确实没有用到。
4、移除未使用的备用资源
一般开发我们都会引入各种依赖,这些依赖可能包含各种备用资源,如中文、英文、日韩文等等。如果我 们不需要这些语言可以让他们不打包进入Apk。
例如我们只打包中文加默认的英文,可以在app的build.gradle中进行如下配置,主要就是是注释1处的配置语句
android {
、、、
defaultConfig {
applicationId “com.xiangxue.arch_demo”
minSdkVersion rootProject.minSdkVersion
targetSdkVersion rootProject.targetSdkVersion
versionCode 1
versionName “1.0”
testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner”
//1
resConfigs “zh-rCN”
}
、、、
}
5、动态库打包配置
目前Android打包可以支持如下CPU架构:
- armeabi-v7a 第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能(支持 armeabi 和 armeabi-v7a,目前大部分手机都是这个架构)
- arm64-v8a 第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bit(支持 armeabi-v7a、armeabi 和 arm64-v8a)
- x86 intel 32位,少数的平板应用此架构(支持 armeabi(性能有所损耗) 和 x86)
- x86_64 intel 64位,少数的平板应用此架构(支持 x86 和 x86_64)
目前市面上手机设备绝大多数都是arm架构,因此armv7a几乎能兼容所有设备。大多数应用只会打包armv7a的so在Apk中。对于第三方服务,如百度地图、Bugly等会提供全平台的cpu架构。因此我们可以进行如下配置,指定只打包armv7a到apk,从而减少apk大小。
build.gradle配置如下注释1处所示;
android {
、、、
defaultConfig {
applicationId “com.xiangxue.arch_demo”
minSdkVersion rootProject.minSdkVersion
targetSdkVersion rootProject.targetSdkVersion
versionCode 1
versionName “1.0”
testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner”
resConfigs “zh-rCN”
//1
ndk{
abiFilters ‘armeabi-v7a’
}
}
、、、
}
对于arm64架构的设备,如果使用armv7a也能够兼容,但是不如使用arm64的so性能。随着现在arm64架构设备渐渐成为主导。因此现在部分应用市场会根据设备提供不同架构的Apk安装。此时我们需要打包出针对arm64的apk与armv7a的apk,可以使用productFlavor;也可以使用APK分包:splits。
方案1 productFlavor
在application的build.gradle进行如下配置
android {
、、、
flavorDimensions “default”
productFlavors{
arm32{
dimension “default”
ndk{
abiFilters “armeabi-v7a”
}
}
arm64{
dimension “default”
ndk{
abiFilters “arm64-v8a”
}
}
}
、、、
}
方案2 splits
在application的build.gradle进行如下配置
android {
、、、
splits {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/91664ac1bdc481351e75a3caecd061d1.jpeg)
如何做好面试突击,规划学习方向?
面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。
学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。
同时我还搜集整理2020年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
id的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!