文章目录

  • 一、resources.arsc 资源映射表
  • 二、配置国际化资源
  • 三、完整 build.gradle 构建脚本示例
  • 四、参考资料

一、resources.arsc 资源映射表


分析 Android 应用打包后的 APK 文件 , 打开 resources.arsc 文件 , 该文件是 Android 应用的资源映射表 ,

点击 string , 查看字符串资源 , 在 strings.xml 中定义的字符串 , 都在打包在了该位置 ;

在该资源映射表中的 string 字符串 , 包含了所有语言类型 , 浪费了很多不必要的空间 ;

这些字符串很多都是国际化时用的 , 查看项目源码 , 发现 res 资源目录中 , 并没有进行国际化 , 这些国际化资源都是随着依赖库引入而进入到应用中的 , 国际化资源最多的就是 androidx.appcompat:appcompat 依赖库 , 配置了所有国家语言的国际化资源 ;

二、配置国际化资源


在 build.gradle 构建脚本中的 " android / defaultConfig " 层级配置 resConfigs ‘en’ , 配置后只打包默认资源与英文资源 , 不会打包其它语言的国际化资源 , 最大限度节省空间 ;

android {defaultConfig {// 国际化资源配置, 只打包默认资源与英文资源resConfigs 'en'}
}

配置完毕后 , 选择 " 菜单栏 / Build / Build Bundle(s)/APK(s) / Build APK(s) " , 再次编译生成 APK 安装包 ;

此时就可以看到 APK 减小了 1MB\rm 1 MB1MB , 由 3.9MB\rm 3.9 MB3.9MB , 减小为 3.8MB\rm 3.8 MB3.8MB ;

原来的 resources.arsc 资源映射表文件 , 由 704.6KB\rm 704.6 KB704.6KB 减小为 366.9KB\rm 366.9 KB366.9KB ;

文件中几十种语言的国际化资源只剩下一个默认资源 ;

资源越多 , 该配置减小的体积就越多 ;

三、完整 build.gradle 构建脚本示例


plugins {id 'com.android.application'id 'kotlin-android'
}android {compileSdkVersion 30buildToolsVersion "30.0.3"defaultConfig {applicationId "kim.hsl.svg"minSdkVersion 18targetSdkVersion 30versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"// 生成 PNG 图片配置//generatedDensities = ['hdpi', 'mdpi', 'xhdpi',  'xxhdpi', 'xxxhdpi']// 使用 com.android.support:appcompat 支持库配置vectorDrawables.useSupportLibrary = true// 国际化资源配置, 只打包默认资源与英文资源resConfigs 'en'}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = '1.8'}
}dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"implementation 'androidx.core:core-ktx:1.3.2'// 矢量图支持库 , 支持 5.0 以下版本手机使用矢量图 , 这个是创建应用时自带的配置implementation 'androidx.appcompat:appcompat:1.2.0'implementation 'com.google.android.material:material:1.3.0'implementation 'androidx.constraintlayout:constraintlayout:2.0.4'testImplementation 'junit:junit:4.+'androidTestImplementation 'androidx.test.ext:junit:1.1.2'androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

四、参考资料


博客资源 :

  • GitHub 项目源码 : https://github.com/han1202012/SVG

  • 下载地址 : https://download.csdn.net/download/han1202012/18542570

【Android 安装包优化】资源打包配置 ( resources.arsc 资源映射表 | 配置国际化资源 )相关推荐

  1. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )

    文章目录 一.resources.arsc 资源映射表 混淆 二.resources.arsc 资源映射表二进制格式分析 三.参考资料 资源混淆时 , 需要修改混淆 resources.arsc 资源 ...

  2. 【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 )

    文章目录 一.AAPT2 资源编译工具 二.resources.arsc 资源映射表 工作机制 三.参考资料 一.AAPT2 资源编译工具 资源的编译 , 生成 R.java 文件 , 都是通过 AA ...

  3. 【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )

    文章目录 一.开启资源压缩 二.启用严格模式的资源引用检查 三.自定义保留/移除资源配置 四.资源压缩效果 五.完整配置 1.keep.xml 配置 2.build.gradle 构建脚本 六.参考资 ...

  4. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )

    文章目录 一.resources.arsc 资源映射表文件格式 二.头文件 数据格式 三.全局字符串池 数据格式 四.包数据 数据格式 1.包头 数据格式 2.资源类型字符串池 数据格式 3.资源名称 ...

  5. 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.a 静态库 四.Android Studio 导入 ...

  6. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )

    文章目录 一.拷贝 lib7zr.so 动态库到 Android Studio 工程 二.配置 Module 下的 build.gradle 构建脚本 三.参考资料 一.拷贝 lib7zr.so 动态 ...

  7. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.配置 CMakeLists.txt 构建脚本 1.导入动态库 2.导入头文件 三.完整 CMakeLists ...

  8. 【Android 安装包优化】Android 应用中 7zr 可执行程序准备 ( Android Studio 导入可执行 7zr 程序 | 从 Assets 资源文件拷贝 7zr 到内置存储 )

    文章目录 一.Android Studio 导入可执行 7zr 程序 二.从 Assets 资源文件拷贝 7zr 到内置存储空间 三.参考资料 一.Android Studio 导入可执行 7zr 程 ...

  9. 【Android 安装包优化】WebP 应用 ( 4.0 以下兼容 WebP | Android Studio 中使用 libwebp.so 库向下兼容版本 | libwebp 库测试可用性 )

    文章目录 一. Android Studio 中导入 libwebp.so 库 二. Android Studio 中测试 libwebp.so 库 三.参考资料 一. Android Studio ...

  10. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 )

    文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.so 动态库 四.参考资料 一.修改 7zr 交叉编 ...

最新文章

  1. 小tip: base64:URL背景图片与web页面性能优化(转载)
  2. union的限制, 临时表大小的优化
  3. 吴恩达CNN卷积神经网络第2周作业ResNets
  4. linux 命令 单词,linux常用命令的英文单词缩写
  5. java sort类_JAVA Collections工具类sort()排序方法
  6. 关于移动平台的viewport
  7. 【推荐】不到100行实现的全面NLP教程(pytorch+tensorflow)
  8. 面试中的字符串问题 (1)
  9. ad20/ad21/ad22学习笔记(基本包含一套流程)Altium Designer
  10. 批量保存打开的网页到本地
  11. vue中echarts迁徙图
  12. 关于程序员的冷笑话 (转载www.lenxiaohuadaquan.net )
  13. OpenWrt之DNS 测试工具(nslookup、dig)
  14. 英语五种基本句型判断
  15. 一文了解美团团节社等及分佣机制
  16. 解决“我们注意到您的计算机目前处于离线状态。您需要连接网络以使用EA”
  17. js 中try catch用法
  18. 想要职场安全感?那就请你别停止成长
  19. 英语词性篇 - 非谓语动词
  20. 计算机专业的相关英语词汇,计算机专业英语单词大全

热门文章

  1. 【linux排错】error while loading shared libraries: xxx.so.x 错误的原因和解决办法
  2. FLASHBACK实施笔记
  3. 基于高德地图Windows Phone API 快速开发地图相关APP(二)
  4. python接口自动化(二十四)--unittest断言——中(详解)
  5. c++ static 存储类
  6. 【loj6342】跳一跳 期望dp
  7. linux配置ip 网关 和dns(转)
  8. git diff的用法
  9. discuz_style_default.xml修改
  10. 如何在国内跑Kubernetes的minikube