【Android 安装包优化】资源打包配置 ( resources.arsc 资源映射表 | 配置国际化资源 )
2023-06-13 09:17:50 时间
文章目录
一、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 减小了
, 由
, 减小为
;
原来的 resources.arsc 资源映射表文件 , 由
减小为
;
文件中几十种语言的国际化资源只剩下一个默认资源 ;
资源越多 , 该配置减小的体积就越多 ;
三、完整 build.gradle 构建脚本示例
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "kim.hsl.svg"
minSdkVersion 18
targetSdkVersion 30
versionCode 1
versionName "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 false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility 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手机搭建Web服务器
- 74款android开机动画,修改Android系统开机动画
- android图片资源加密,Android平台图像文件加密
- android onresume方法,Android onActivityResult()和onResume()的执行顺序
- android中适配器的作用,适配器模式 在Android中的简单理解「建议收藏」
- android系统签名工具,android应用实现重启系统+签名「建议收藏」
- android telephony 原理解析与开发指南_Android逆向pdf
- android terminal emulator_android自启动
- Android触摸事件_android设置按钮点击事件
- android:ListView排序[通俗易懂]
- 【Android 安装包优化】Android 应用中 7zr 可执行程序准备 ( Android Studio 导入可执行 7zr 程序 | 从 Assets 资源文件拷贝 7zr 到内置存储 )
- 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )
- 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★
- 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( DEX 文件准备 | 拷贝资源目录下的文件到内置存储区 | 配置清单文件 | 启动 DEX 文件中的组件 | 执行结果 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ③ ( 执行 compile-ffmpeg.sh clean 命令 | 下载并配置 android-ndk-r10e )
- 【错误记录】Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. ② | 升级 Gradle 版本 )
- 【Android Gradle 插件】自定义 Gradle 插件优化图片 ① ( Android 中的 WebP 图片格式使用 | WebP 格式转换 | WebP 参考文档 )
- 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ⑤ ( 优化 Gradle 构建脚本 | 构建脚本结构 | 闭包定义及用法 | 依赖配置 | android 块配置 )
- Android 开发中的一些小技巧详解手机开发
- Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件详解手机开发
- android查看绑定源码详解手机开发
- android JNI调用机制详解手机开发
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string ‘android-23’ 等错误详解手机开发
- 铃声多多下载 铃声多多手机版 7.7.3.0 Android版下载
- android不同activity之间共享数据解决方法
- Android中实现根据资源名获取资源ID
- Android中引用其他程序的文本资源超简单方法