西宁企业网站营销推广,载带 东莞网站建设,免费h5在线制作,芜湖建设机械网站瘦身主要是下载转换率提高头部App都有Lite版本渠道合作产商要求APK 分析工具ApkTool 反编译工具官网#xff1a;https://ibotpeaches.github.io/ApkTool apktool d students.apkAnalyze apkAndroid studio 2.2之后使用 - 查看apk组成大小#xff0c;各资源占比 - 查看dex文件…瘦身主要是下载转换率提高头部App都有Lite版本渠道合作产商要求APK 分析工具ApkTool 反编译工具官网https://ibotpeaches.github.io/ApkTool apktool d students.apkAnalyze apkAndroid studio 2.2之后使用 - 查看apk组成大小各资源占比 - 查看dex文件组成 - 可以进行apk对比通过Analyze app分析打开方式Android Studio下 —— Build—— Analyze appclassyshark 二进制检查工具https://github.com/google/android-classyshark 支持多种格式apk,jar,class,so等nimbledroid app 性能指标系统https://nimbledroid.com/ 可以通过上传apk得知 - 文件大小及排行 - Dex方法数、SDK方法数 - 启动时间、内存等APK 组成APK包结构如下lib/包含特定于处理器软件层的编译代码。该目录包含了每种平台的子目录像armeabiarmeabi-v7a arm64-v8ax86x86_64和mips。大多数情况下我们可以只用一种armeabi-v7a。assets/包含应用可以使用AssetManager对象检索的应用资源。res/包含未编译到的资源 resources.arsc,主要有图片资源文件。META-INF/包含CERT.SF和 CERT.RSA签名文件以及MANIFEST.MF 清单文件。resources.arsc包含已编译的资源。该文件包含res/values/ 文件夹所有配置中的XML内容。打包工具提取此XML内容将其编译为二进制格式并将内容归档。此内容包括语言字符串和样式以及直接包含在resources.arsc文件中的内容路径 例如布局文件和图像。classes.dex包含以Dalvik / ART虚拟机可理解的DEX文件格式编译的类。AndroidManifest.xml包含核心Android清单文件。该文件列出应用程序的名称版本访问权限和引用的库文件。该文件使用Android的二进制XML格式。对lib文件目录进行瘦身往往进行NDK开发的时候so文件都比较大将ndk修改为如下ndk{//设置支持的so库架构abiFilters armeabi-v7a}armeabi-v7主要不支持ARMv5(1998年诞生)和ARMv6(2001年诞生).而许多基于 x86 的设备也可运行 armeabi-v7a 和 armeabi NDK 二进制文件。对于这些设备主要 ABI 将是 x86辅助 ABI 是 armeabi-v7a。如果适配版本高于4.1版本可以直接上面这样写当然如果armeabi-v7a不是设备主要ABI那么会在性能上造成一定的影响。优化resassets文件手动lint检查手动删除无用资源在Android Studio中打开“Analyze” 然后选择Inspect Code...范围选择整个项目然后点击OK。使用tinypng等图片压缩工具对图片进行压缩。打开网址将大图片导入到tinypng替换之前的图片资源。大部分图片使用Webp格式代替。可以给UI提要求让他们将图片资源设置为Webp格式这样的话图片资源会小很多。当然如果对图片颜色通道要求不高可以考虑转jpg,最好用webp,因为效果更佳。尽量不要在项目中使用帧动画一个帧动画几十张图片再怎么压缩都还是占很大内存比重的。所以建议是让UI去搞这里可以参考使用lottie-android如果项目中动画效果多的话效果更加明显。使用gradle开启shrinkResources每1000行代码在apk当中才会占用5kb的空间 设置shrinkResources true移除无用资源文件要通过 ProGuard 启用代码压缩请在 build.gradle 文件内相应的构建类型中添加 minifyEnabled true对无用的代码进行删除minifyEnabled 这个是用来开启删除无用代码比如没有引用到的代码shrinkResources 用来开启删除无用资源也就是没有被引用的文件经过实测是drawable,layout实际并不是彻底删除而是保留文件名但是没有内容等等但是因为需要知道是否被引用所以需要配合mififyEnable使用只有当两者都为true的时候才会起到真正的删除无效代码和无引用资源的目的同样的资源代码测试只有minififyEnable false或者 minififyEnable false shrinkResources trueAPK大小为1.39M 资源文件和layout都存在且是有内容的只有minifyEnable true866K 资源文件和layout都存在且是有内容的minifyEnable true shrinkResources true资源文件在但是没有内容大小都变成67字节layout文件内容被清空减少chasses.dex大小classes.dex中包含了所有的java代码当你打包时gradle会将所有模板力的.class文件转换成classes.dex文件当然如果方法数超过64K将要新增其他文件进行存储。可以通过multidexing分多个文件比如这里的classes2.dex。换句话说就是减少代码量。我们可以通过以下方法来实现 尽量减少第三方库的引用这个在上面我们已经做过优化了。 避免使用枚举可能几十个枚举的内存占有量才相当一张图片这样子优化效果也不会特别明显。当然如果你是个追求极致的人我不反对你用静态常量替代枚举。 如果你的dex文件太大检查是否引入了重复功能的第三方库图片加载库glide,picasso,fresco,image_loader如果不是你一个人单独开发完成的很容易出现这种情况尽量做到一个功能点一个库解决。第三方库处理基础库统一选择更小的库Android Methods Count仅引入需要的部分代码Fresco的webp支持图片压缩https://tinyjpg.com/TinyPngPlugin选择不同的图片格式其他 用7zip代替压缩资源。 删除翻译资源只保留中英文 尝试将andorid support库彻底踢出你的项目。 尝试使用动态加载so库文件插件化开发。 将大资源文件放到服务端启动后自动下载使用。Facebook的redex优化字节码 redex是facebook发布的一款android字节码的优化工具需要按照说明文档自行配置一下。redex input.apk -o output.apk --sign -s KEYSTORE -a KEYALIAS -p KEYPASS