Apk瘦身、混淆、加固

一、 apk的组成元素:
resources.arsc:编译后的布局文件
assets:目录存放一些配置文件
lib:下的子目录armeabi存放一些so文件或者jar包
META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全
res:apk图片资源
AndroidManifest.xml:清单文件
classes.dex:是java源码编译后生成的java字节码文件
二、瘦身方案:修改都在Module的builder.gradle文件里进行
1.开启minifyEnabled,具体看混淆的 proguard-rules.pro 文件配置
团队开发的时候每个人在引用第三方资源的时候就应该把自己的混淆设置好,要不然别人很难帮你混淆。
2.开启shrinkResources(去除无用资源)
    buildTypes {
        release {
            minifyEnabled true
     shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
提示:记着去除工程中临时展示的图片,也可以减小APK的体积
3.删除无用的语言资源
    defaultConfig {
.....
resConfigs "zh"
}
4.使用tiypng有损压缩(官方网站:https://tinypng.com/或者腾讯的智图:https://zhitu.isux.us/)
>* TinyPNG使用一种智能有损压缩技术(通过降低图片中的颜色数量,来减少存储图片所需的数据)来降低PNG图片的大小
这样的压缩对图片的效果影响是很小的,但是可以大大降低图片的大小,并且还能保持PNJ的alpha透明度
Apk瘦身、混淆、加固_第1张图片
>*因为TinyPNG将PNG图片压缩成8位的PNG(而不是24位),所以它的压缩比例非常高,至少都是50%以上的压缩比例,有些甚至可以达到70%,并且压缩之后的图片和原图人眼看不出来
可以使用 Zopfli 算法压缩 png 图片。它们看起来是一样的(无损),而且一样快。
如果你不想要压缩,你可以使用 WebP。它比 Jpeg 小 30%,在安卓 4.0 以上的系统中支持非透明的 PNG 图片,在 4.2.1 以上的系统中支持带透明度的无损图片。
5.把图片PNG转换为JPG(软件:格式工厂)
原因:PNG包含了图片一些和显示效果无关的信息,转换为JPG,体积也会变小,且转换之后的图片和原图人眼看不出来
如果图片中没有透明度的要求,可以将png图片转换为jpg图片.但如果png进行过有损压缩可能会让转换后的图片文件变大.
6.webp仅仅安卓里面支持
////////////////////////////////////////一下的方法,可以减小几K,不像上面的方法,消除的体积大,所以不常用////////////////////////////////
7.使用shape(android新特性里的属性:Vector)文件替换简单图片
8.删除或者替换兼容包(V4,V7,V13)中无用的一些图片
删除drawable-ldret:是layout-direction-right-to-left的缩写,意味着布局方式从右到左,主要是为了适配阿拉伯语.这是API17,android4.2新功能
drawable-ldrtl-xxxhdpi-v4
drawable-ldrtl-xxhdpi-v4
drawable-ldrtl-xhdpi-v4
drawable-ldrtl-hdpi-v4
drawable-ldrtl-mdpi-v4
替换v4,v7,v13中无用图片资源_可选方式
可以使用1*1像素图片,替换V4,V7,V13中的一些图片资源
9.项目使用到的第三方控件,okhttp,Rxjava(RxAndroid),EvnetBus,Fresco,有时你的项目里会用到这个框架其中的一部分.可以找到自己用这个开源框架对应功能的类,把这个类拷贝到自己的项目里面,取消对该框架依赖,从而减少了APK的提交.

三、apk加固实际就是混淆.
作用:
1.使别人不能轻易的反编译代码.
2.被别人植入代码(恶意的脚本,广告),进行二次打包
3.动态修改内存/动态的注入->支付(修改支付账户)
梆梆,爱加密,360加固保,阿里聚安全,以爱加密为例子: http://www.ijiami.cn/
Apk瘦身、混淆、加固_第2张图片

你可能感兴趣的:(Apk瘦身、混淆、加固)