美文网首页
编译后SDK大小减小方案

编译后SDK大小减小方案

作者: 带土的旋律 | 来源:发表于2016-10-25 00:22 被阅读0次

本文主要从编译,图片压缩,平台等方面对App集成sdk后所带来的增量的减小优化方案进行分析。

清除无用代码和资源

  • Code Shrinking, 代码混淆,清除无用的代码
    混淆可以删除一些没用的类,字段,方法和一些属性,包括我们引入的一些其它库,同时混淆器也优化了字节码,移除了一些用不到的字节码指令,并且用了更短的名称混淆了留下来的一些类的名称,字段名称和方法名称。
    要想混淆你的代码,首先在你app的build.gradle文件中加入如下代码
android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile(‘proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }
    ...
}

其中proguard-android.txt为系统SDK默认的混淆规则,在proguard-rules.pro文件中编辑你的混淆规则。
官方文档的提供了一点:

To add more ProGuard rules that are specific to each build variant, add another proguardFiles property in the corresponding productFlavor block.

具体到编译变量 这个目前没有试,官方给了个例子:

android {
    ...
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                   'proguard-rules.pro'
        }
    }
    productFlavors {
        flavor1 {
        }
        flavor2 {
            proguardFile 'flavor2-rules.pro'
        }
    }
}

这样flavor2总共用了三个混淆规则。

  • Resource Shringking 清除无用资源
    无用的代码清除完之后,就会有很多无用的资源文件残留,在build.gradle文件中设置shrinkResources为true.
android {
    ...
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }s
}
  • 清除为使用的可替代资源
    上面的Gradle resource shrinker只是删除掉代码中为引用的资源文件,但意味着不会删除不同配置设备的可替代资源,例如项目中依赖的v7、v4中包含的20种国家的语言,有很多都用不到,可以通过设置resconfigs删除这些可替代的资源文件:
android {
    defaultConfig {
        ...
        resConfigs "en"
    }
}

图片压缩

apk中最占资源之一的就是这些资源图片了,而且一张稍微大点的图片,不但占空间,在差的手机上经常会出现OOM,

  • WebP谷歌提供的一种图片数据格式,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,原生支持Android4.0以上的,其他版本需要官方的依赖库。
  • 矢量图SVG:一个字体TextView代替一张资源文件
    目前只试过矢量图

使用Splits针对不同的设备编译不同的apk

  • 针对不同的屏幕进行拆分

针对不同密度的屏幕,同一个应用程序拆分为hdpi版本和mdpi版本

android {
  ...
  splits { 
  //Configures screen density split settings 
    density {       
    //Enables density APK splits        
      enable true        
      /*Specifies a list of screen densities Gradle should not create APK splits for**/      
      exclude "ldpi", "tvdpi", "xxxhdpi"        
      /** Specifies a list of compatible screen size settings for the manifest**/
      compatibleScreens 'small', 'normal', 'large', 'xlarge'
    }
  }

构建完成后可以在out/apk/目录下看到多个版本的APK

  • 针对不同的CPU进行拆分

按ABI拆分,根据不同的CPU类型,只用相应的.so库,之前测试的时候是只用的一个v7a的兼容的so库。

android {
  ...
  splits {

    // Configures screen ABI split settings
    abi {

      // Enable ABI APK splits
      enable true

      // By default all ABIs are included, so use reset() and include to specify that we only
      // want APKs for x86, armeabi-v7a, and mips

      // Resets the list of ABIs that Gradle should create APKs for to none
      reset()

      // Specifies a list of ABIs that Gradle should create APKs for
      include "x86", "armeabi-v7a", "mips"

      // Specify that we do not want to also generate a universal APK that includes all ABIs
      universalApk false
    }
  }
}

其它

...

参考文献:

相关文章

  • 编译后SDK大小减小方案

    本文主要从编译,图片压缩,平台等方面对App集成sdk后所带来的增量的减小优化方案进行分析。 清除无用代码和资源 ...

  • Android SDK 开发系列二 代码混淆

    现在大多商业应用都是经过混淆的,混淆后虽然不能防止反编译,但是可以增加反编译后的难度,减小包的大小,做sdk开发一...

  • 减小sdk大小

    1、如何减小第三方提供的sdk大小(客户) 第一步:查看sdk包含哪些架构 一般我们能看到四种架构 i386、x...

  • Please select Android SDK

    编译后,运行右侧有×;错误提示 Please select Android SDK 解决方案: 一路next,ne...

  • Please select Android SDK

    编译后,运行右侧有×;错误提示Please select Android SDK 解决方案: 一路next,nex...

  • Please select Android SDK

    编译后,运行右侧有×;错误提示Please select Android SDK 解决方案: 一路next,nex...

  • 关于我和 docker 和 k8s 和 golang 的故事

    1. 编译镜像:尽量减小大小的故事 最小的镜像是 alpine,比 ubuntu,centos,redhat 小很...

  • 减小包大小

    减小包大小不仅可以使缩短用户下载时间,还可以节省流量,同时AppStore对包大小也有限制。 排查Resource...

  • 减小wasm大小

    缩减.wasm代码大小[https://pearzl.gitbooks.io/rustwasm-book-zh/c...

  • AndroidManifest 合并出错

    接入安全联盟1.1.0的sdk后,编译报错了 打开oaid_sdk_1.1.0.aar这个包后发现AndroidM...

网友评论

      本文标题:编译后SDK大小减小方案

      本文链接:https://www.haomeiwen.com/subject/plszyttx.html