使用NativeLibCompression极致压缩APK文件大小

来源:互联网 发布:mysql 存储emoji 编辑:程序博客网 时间:2024/06/05 11:19

使用NativeLibCompression极致压缩APK文件大小

  • * 在一个项目长期迭代开发的过程中,随着功能的不断多样化,APK文件的体积也在不断的扩大 *
  • * 在公司产品推广的过程中,体积庞大的APK文件会让用户望而生畏 *
  • * 因此产品就提出了在不消减APP功能的前提下,最大限度的减少APK文件的大小 *
  • * 因为本APP接入很多第三方jar包、so库,这也是造成APK文件过大的原因 *
  • * 那我们今天就使用NativeLibCompression 工具压缩so文件*

NativeLibCompression 工具介绍

先上工具包下载地址:https://github.com/liyuming1978/NativeLibCompression

安卓压缩工具集提供了一个极为简洁的方法,能够比安卓原有的Zip提供更高压缩比的存储应用内的so文件 (后期版本还可以支持压缩动态加载的jar包,以及游戏资源文件),同时提供了应用内网络更新下载压缩文件的方法,使得应用可以将部分so存储到云端,减小应用的尺寸。

从github上下载本工具解压后得到以下几个文件

这里写图片描述

其中 ApkLibComrepss 为java命令行程序的源码

在此目录的bin子目录中,你可以找到ApkCompress.jar ,使用这个文件可以把一个普通的apk文件转换为压缩的apk文件

CompressDemo为一个样例代码

你可以参考这个代码知道如何整合压缩的SDK。

DecRawso是压缩的SDK

你的开发工程需要引用这个SDK,并进行一些源码上的修改,才能整合压缩的功能,
可以用来依赖到自己的项目中

DecRaws_Jar文件夹

是打包好的NativeLibCompression jar包,
如果不用依赖的方式,也可以把本文件夹中的文件添加到自己的项目中

如何整合压缩SDK

* 方法一 、首先把DecRawso项目添加依赖到自己的工程中 * 

这里写图片描述

* 方法二、 也可以使用添加jar包的方式,把本工具接入到自己的工程中 *
把 \NativeLibCompression-master\DecRawso_Jar\libs\ 下的文件全部复制到自己工程对应的文件中

以上两种方式选择一种就可以了 **

代码块

接入成功后,第一部需要在程序的入口调用DecRawso.NewInstance,例如在MyApplication类中调用:

@Override    public void onCreate() {        super.onCreate();        instance = this;        DecRawso.NewInstance(instance,null,false);        DecRawso.GetInstance().waitdecoding();        startFanfa();    }

DecRawso.NewInstance方法是创建了一个解压的唯一实例。
注意:此方法是异步的,所以你可以传入一个handler接受异步解码完成的消息,如果同时传入参数showProgress=true,SDK内会产生一个进度对话框以阻塞主进程。
我在本项目中使用DecRawso.NewInstance(mContext,null,false);的方式,

在service内load library
因为service是在不同的进程空间,需要在service启动时调用DecRawso.NewInstanceInService

一定要确保在尽可能前的地方调用DecRawso.NewInstance,然后调用waitdecoding阻塞应用。确保在load库之前解压完成后,就可以正常调用自己的方法了

接入好后,正常打包正式签名的APK文件,发布市场前进入压缩

* 用cmd命令行进入 \NativeLibCompression-master\ApkLibCompress\bin\ *

    java -jar ApkCompress.jar     -a C:\Users\Administrator\Desktop\apk\test.apk      //需要压缩的APK文件    -k F:\keystore\testkey              //key文件路径    testpassword                        //key密码    aliaspassword                       //alias密码    aliasname                       //alias名称    XXXX                        //name 如果不写, 默认就是CERT    -o C:\Users\Administrator\Desktop\apk\abc.apk           //定义输出的apk文件名    -noarm                          //不压缩arm库(三星s6手机arm库不能压缩,环信会报错)

使用ApkCompress.jar压缩发布APK。 此工具为命令行工具。
一般的此命令使用方式为:
在命令行运行ComPressApk.jar -a C:/my/test.apk -k c:/key * ### alias -x86 http://www.test.com (也可以运行 java –jar ComPressApk.jar )
-a 后面跟apk路径名, 可以不是全路径
-k 后面是签名文件[key storepass keypass alias name] ,key可以不是全路径名 (name 如果不写, 默认就是CERT)
-x86 表示需要存储x86库文件在云端, 后面跟以http://开头的链接,最后实际的存储位置应该为 http://www.test.com/cloudrawso_x86
命令执行完以后, 会生成test_CompressAlign.apk. 这个apk就是压缩后的apk
新的命令参数
-o outputfilename 定义输出的apk文件名
-slience 不需要显示,在ant打包或者linux命令行执行有用
-nosign 不签名apk
-nox86check 不检测x86,arm混合调用
-noarm 不压缩arm库

在ant打包模式下检测打包成功 (一定要使用-slience)
如果Done.flag文件存在,表示打包成功

最后就可以把压缩后的test_CompressAlign.apk发布到市场了

注意:使用NativeLibCompression时遇到的一些坑 **。

\DecRawso_Jar\libs中的so文件只兼容了 armeabi、x86,

一、自己的项目中请务必删除arm64-v8a、armeabi-v7a,不然在三星S6等系列的手机上会包找不到libDecRawso.so文件的问题
二、在用cmd命令压缩APK文件时,有用到环信libeasemob_jni.so等类似的so库时,
请务必使用-noarm //不压缩arm库(三星s6系列手机arm库不能压缩,环信会报错),

Android 设备的CPU类型(通常称为”ABIs”)

armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。x86: 平板、模拟器用得比较多。x86_64: 64位的平板。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 糖猫电话手表屏碎了怎么办 魅蓝手机没下安装包强制更新怎么办 老婆赌博输了30多万现在怎么办啊 红米nt2手机通话声音小怎么办? 微信退出后重新登录忘记密码怎么办 微退出后再登录忘记密码了怎么办 忘记微信密码又退出微信怎么办 无线网自家密码忘了也连不上怎么办 无线网密码忘了连接不上怎么办 魅蓝手机插口半夜坏了怎么办 魅族手机换屏后出现跳屏怎么办 小米手机微信小程序转发不出怎么办 苹果手机ad码和密码忘了怎么办 魅族手机摔掉无法开机怎么办 魅族音量+电源键直接开机了怎么办 魅蓝2数字锁机了怎么办 苹果5s蓝屏开不了机怎么办 红米pro更新开发版发热卡怎么办 5s手机音量增大键失灵怎么办 眼睛看手机久了模糊应怎么办 华为无线自拍杆连opp手机怎么办 苹果手机进水后自动跳电怎么办 魅族手机返回键不好使怎么办 手机壳是玻璃的摔坏了怎么办 魅族手机进水了开不了机怎么办 打发票机屏忘记了密码怎么办 魅族手机升级显示电量不足怎么办 魅蓝手机的图库没了怎么办 魅蓝5s屏幕碎了怎么办 魅族手机中间的home键失灵怎么办 魅族手机突然关机开不了机了怎么办 魅蓝3s卡顿怎么办视频 魅蓝3s手机太卡怎么办 红米4x外放破音怎么办 魅族手机刷机后内存变小了怎么办 手机用久了内存越来越小怎么办魅族 贴了车膜左右后视镜反光怎么办 贴手机膜时酒精没了怎么办 魅蓝e外屏幕碎了怎么办 贴的手机膜边缘翘起来着怎么办 手机后面贴的膜都是胶怎么办