APK打包优化

apk优化方案

1、采用SVG

不会因为缩放影响图片质量下降,同时可节约内存,常用用于简单图标,svg由xml定义,标准的svg是以<svg>为根节点,在Android中是以<vector>为根节点,需要进行转化,通过new->Vector Asset

https://developer.android.google.cn/studio/write/vector-asset-studio.html

//支持使用support-v7兼容
vectorDrawables.useSupportLibrary = true
//指定svg图片生成的不同密度类型
vectorDrawables.generatedDensities('xhdpi', 'xxhdpi')
在布局里 采用 app:srcCompat="@drawable/apple_aire"引用

2、使用tint着色器,进行上色,tint可以让图片变色,只需一张图片来显示不同颜色,能够减小apk体积,此外可以用在selector点击效果上

3、资源打包配置,resource.asrc 包含大量国际化资源,可保留知道和默认资源,string.xml中的描述都会翻译为不同国家的语言,可在指定某种语言和默认,譬如中文,在defaultConfig里进行resConfigs('zh-rCN')

4、动态库的打包配置,对so的库的指定,so文件比较大,影响apk体积明显,由于所有的x86/x86_64/armeabi-v7a/arm64-v8a设备都支持armeabi架构的.so文件,因此似乎移除其他ABIs的.so文件可以很明显减少APK大小,但事实上并会影响到函数库的性能和兼容性。 反编译某几个大厂的apk可以看到大家确实用了这个方法,所以可以用用,但是要在不同机子上进行测试看情况,来处理

5、移除无用资源(建议这类操作先来个备份,再删除)

一键移除 Refactor->Remove Unused Resources(此方法不建议,因为使用动态id资源或反射获取资源会出问题,系统不会检测出该资源被使用 也会被删除,) 

https://developer.android.google.cn/studio/build/shrink-code

推荐使用Analyze->Run Inspection by Name->Unused Resources进行移除无用资源,

6、代码混淆 

7、开启资源压缩  shrinkResources true 开启后 并不是删除掉,而是在打包过中,对未使用的资源进行特殊处理,一种占位,譬如,a.xml写了很多控件但未被使用,在打包后,它依然存在,但是a.xml基本为空内容,图片资源也类似 会做特殊压缩处理, 从而导致降低apk体积

8、资源混淆和7zip压缩  减小apk的大小,增加破解难度

通过resource.arsc文件格式,混淆步骤:1 解析resource.arsc文件(主要为全局与资源名称字符串池);2 修改字符串池中的字符串,用以无意义的a b c等替换; 3 修改apk中res目录资源文件名称;4 打包7zip,对齐,签名处理;

https://github.com/shwenzhang/AndResGuard

9、webp 采用webp图片,好处质量影响小 同时压缩效果明显

在Android 4.0(API level 14)中支持有损的WebP图像,在Android 4.3(API level 18)和更高版本中支持无损和透明的WebP图像

android {
    compileSdkVersion 28
    buildToolsVersion "29.0.0"
    defaultConfig {
        applicationId "com.superdesk.apptool"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        //https://developer.android.google.cn/studio/write/vector-asset-studio.html

        //指定svg图片生成的不同密度类型
//        vectorDrawables.generatedDensities('xhdpi','xxhdpi','xxxhdpi')

        //支持使用support-v7兼容
        vectorDrawables.useSupportLibrary = true

        //只保留指定和默认的资源, string.xml国际化语言很多种,根据实际使用范围,指定所需语言即可
        resConfigs('zh-rCN')
        //配置so库cpu架构
        ndk {
            abiFilter('armeabi')
        }
        flavorDimensions "default"
    }
    buildTypes {
        debug {

            minifyEnabled true
            //开启资源压缩混淆
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        release {
            //代码压缩 代码压缩通过 ProGuard 提供,ProGuard 会检测和移除封装应用中未使用的类、字段、方法和属性,
            // 包括自带代码库中的未使用项(这使其成为以变通方式解决 64k 引用限制的有用工具)。ProGuard 还可优化字节码,
            // 移除未使用的代码指令,以及用短名称混淆其余的类、字段和方法。混淆过的代码可令您的 APK 难以被逆向工程
            minifyEnabled true
            //开启资源压缩混淆
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    //修改资源id 更改appt源码,编译器修改pp段(资源id是由8位16进制数表示,表示为0xPPTTNNNNPP段)
    aaptOptions {
        additionalParameters "--allow-reserved-package-id", "--package-id", " 0x50"
    }

    //将so库 打包到apk中
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

    //改applicationId
    productFlavors {
        free {
            applicationIdSuffix ".free"
        }
        pro {
            applicationIdSuffix ".pro"
        }
    }
}

 

10、扫描重复代码,进行处理Simian工具

下载地址http://www.harukizaemon.com/simian/get_it_now.html

java -jar simian-2.5.10.jar -ignoreVariableNames+ -threshold=5  H:\as_project\xxx\src\main\**.java>>E:\soft_tool\simian-2.5.10\bin\duplication.txt

-ignoreVariableNames+ 表示忽略变量名,+号表示要添加这个属性,-号表示不添加这个属性(也可以不写);
-threshold=10 表示10行以上的重复才统计;

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值