您的位置:首页 > 移动开发

从APK角度提升App性能【Apk瘦身加固】

2016-10-20 17:34 441 查看

APK的基本概念

在Android设备上,直接运行APK文件即可完成安装

APK文件其实是zip格式,但后缀名被修改为apk,通过解压,可以看到Dex文件,Dex是DalvikVM executes的简称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码

下图是解压之后的APK目录



META-INF\ (注:Jar文件中常可以看到);

res\ (注:存放资源文件的目录) ;

AndroidManifest.xml (注:程序全局配置文件) ;

classes.dex (注:Dalvik字节码);

resources.arsc (注:编译后的二进制资源文件)。

windows平台查看某一个文件的大小应该不是很困难的事情吧?

定义分工,优化APK是谁的责任?

首先得从APK的解压目录说起

通常来说占据APK内存大小的前四名为 classes.dex>=res>assets>lib

直接由程序员产生的其实只有classes.dex文件,因为这都是Java代码,所以在这里某些程序员同仁可能要甩锅了,“APK安装包过大,明明就是UI,美工切图的问题!”

给的图片太占内存?宽高几百像素的Imageview,UI给了我2M的图片,尼玛,坑比!

图片适配给的太多?1280*720,1920*1080….整个res目录全是各种分辨率合适吗?

阿西巴,日语,韩语,英语,法语…?国际化素材打包这么多?关键还包含朝鲜语,什么鬼?

应用宝首发,小米首发,各种首发,需要高清大图,安装包满的塞不下啦!

其实不然,不论我们拿到怎样设计稿,切图,作为程序员,我们都应该优雅的解决:

对UI给的图片进行极致压缩

格式压缩,PNG转成WebP,JPEG,压缩工具-iSparta



由此可见WebP的体积减少最高可至80%!

尺寸压缩 压缩工具-tinypng,可以实现在无损压缩的情况下图片文件大小缩小到原来的30%-50%

图片仅使用一套,目前来说放在hdpi或者xhpdi目录下都可以

国际化,多渠道,针对不同情况下,由程序员打不同的APK包

方法1:打包过程中,清除没有被引用过的资源通过
shrinkResources true
minifyEnabled true


android {
...
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}


方法2:通过
resconfig
属性指定的语言。未指定的语言的任何资源都被删除。

android {
defaultConfig {
...
resConfigs "en", "fr"
}
}


方法3:
APK Splits
构建APK,支持按不同ABI,不同分辨率分割打包APK

android {
...
splits {
density {
enable true
exclude "ldpi", "tvdpi", "xxxhdpi"
compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
}


abi {
enable true
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk true
}


其次美工们也应当从根源上做起,切图时需要遵循“图片像素不浪费”原则,设计稿标注多大的像素,那么切的图就应当为多大,此外,保存图片格式时,可以适当降低图片质量,达到减小图片大小的问题。

APK加固

本人对加固技术所知甚浅,此处参考两篇资料作出总结

对时下流行的Android应用加固技术分析

Android App安全加固行业分析报告

大多数移动安全厂商其实的加固方案是整体dex加密技术,定制版加固与免费版加固方案上没有区别,都是可执行文件的加密保护。

总结资料

图片压缩工具-iSparta

图片压缩工具-tinypng

指定打包某一些资源文件至APK中,清除没有被引用的资源

Wep探寻之路

对时下流行的Android应用加固技术分析

Android App安全加固行业分析报告
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息