如何动态加载android的so文件,如何压缩apk尺寸

如何动态加载android的so文件,如何压缩apk尺寸,第1张

您好,很高兴为您解答。

一、 工具集介绍 (项目地址: https://github.com/liyuming1978/NativeLibCompression)

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

压缩原理: 压缩工具会把所有的so使用LZMA算法压缩到assert目录,应用在第一次启动的时候,会解压到应用的私有目录下

二、 工具集组成

工具集为一个安装程序,建议安装在默认路径下,安装在program files下在win7可能有读写权限的问题导致一些异常

安装后,你可以看见4个目录,此目录内都含有源码。

安装后的四个目录如下

其中 ApkLibComrepss 为java命令行程序的源码,在此目录的bin子目录中,你可以找到ApkCompress.jar ,使用这个文件可以把一个普通的apk文件转换为压缩的apk文件

CompressDemo为一个样例代码,你可以参考这个代码知道如何整合压缩的SDK。

DecRawso是压缩的SDK,你的开发工程需要引用这个SDK,并进行一些源码上的修改,才能整合压缩的功能

RawsoCreator为windows下的转换工具, 这个工具一般无需使用, 仅仅在调试和二次开发压缩SDK的时候使用。

三、 如何整合压缩SDK

打开CompressDemo,我们以这个工程为例子讲解如何整合压缩SDK

1. 首先需要引入DecRawso工程

2. 然后需要在你的工程内最初始的地方调用DecRawso.NewInstance。在此demo工程内,是在MainActivity.java的OnCreate内调用了此方法, 此方法是创建了一个解压的唯一实例。注意:此方冲敏法是异步的,所以你可以传入一个handler接受异步解码完成的消息,如果同时传入参数showProgress=true,SDK内会产生一个进度对话框以阻塞主进程。不推荐使用DecRawso.NewInstance(mContext,null,false)的方式,此方式不接受任何消息,且无进度御判迟对话框,解压会在后台自动完成,并且在应用第一次load so的时候阻塞直到后台解压完成。所以如果阻塞时间过长,可能会导致应用无响应。

3. 修改load so文件的方法:所有的System.loadlibrary(***)改为 System.load(DecRawso.GetInstance().GetPath(“***"))

新版本, 这步可以省略了,sdk会修改system的libaray加载路径,一般情况下,系统升级不会出问题 (非正规代码,小概率镇李会随android升级修改新的代码),如果方便的话,还是采用System.load(DecRawso.GetInstance().GetPath(“***"))

经过这几个简单的步骤,压缩的SDK已经整合到工程内了。

四、 如何压缩发布APK

使用ApkCompress.jar压缩发布APK。 此工具为命令行工具。一般的此命令使用方式为:在命令行运行ComPressApk.jar-a C:/my/test.apk -k c:/key *** ### alias -x86http://www.test.com (也可以运行 java –jarComPressApk.jar )

-a 后面跟apk路径名, 可以不是全路径

-k 后面是签名文件[key storepasskeypass alias name] ,key可以不是全路径名 (name 如果不写, 默认就是CERT)

-x86 表示需要存储x86库文件在云端, 后面跟以http://开头的链接,最后实际的存储位置应该为 http://www.test.com/cloudrawso_x86

命令执行完以后, 会生成test_CompressAlign.apk. 这个apk就是压缩后的apk

五、 开发模式和压缩模式

为了方便开发,在实现开发的过程中(修改了源码支持压缩后),也可以不压缩so,apk也可以正常运行,压缩的SDK内部会自动判断是否有压缩包, 如果没有压缩包,则加载的路径恢复成android默认的路径。所以最方便的开发是,先整合代码,在开发过程中和原来一样开发(不压缩),在发布的时候才压缩apk

六、 X86和ARM库混合调用

在实现开发过程中,可能会有某些第三方库确实没有x86版本,通常情况下ISV并不在x86目录下放置arm的第三方库,那么在实际运行过程中会导致缺库现象的发生。在缺库的情况下,压缩的SDK会在x86设备上自动解压arm的压缩包,避免缺库现象的发生。(只有真正加载了缺失的库才是缺库,库文件不一致并不一定就是缺库)

但是显然这样会导致运行的低效率,如果在第三方so和x86的库完全没有相互引用的情况下(也就是说这些库都是java层使用JNI调用的,在native层没有相互调用),可以拷贝arm的第三方库到x86目录下,这样就不会出现缺库的情况。当然这种情况会导致arm库多余的拷贝,在以前的zip压缩情况下,会使得压缩包变大,但是在新的LZMA压缩情况下,库大小完全不会增大,因为LZMA压缩由于字典比较大,能够尽可能的压缩关联的几个文件,如果文件完全相同,LZMA的压缩会和单个文件基本一致。

如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】

希望我的回答对您有所帮助,望采纳!

~ O(∩_∩)O~

问题一:如何压缩才能让原文件变小很多 so easy 啦

首先右键目郸文件,选择“添加到压缩文件”,勾选“创建固实压缩文件”在压缩方式下选择“最好”。再切换到“高级”标签,点击压缩,d出“高级压缩参数”对话框,下面根据目标文件的类型进行设置:

1.若为文本文件,再文件压缩栏下选择“强制”将“预测顺序”设置为“63”(范围为2-63),“内存使用设置为”256“。这两个值可以根据实际情况设置。值越大,占用内存资源就越多,而且当解压缩时机器的内存小于压缩时机器内存时,文件可能出现问题

2.“真彩压缩”选择是专门针对图片文件的,选择其中的“强制”就可以了。最后设置“字典大小”为“4096”,就码中烂可以点击确定,进行压缩了。

问题二:怎样压缩文件才会变的最小 绝大多数视频文件都是已迟漏经经过压缩编码的文件(就是说,视频在制作或录制完后,本身在保存的时候已经经过了压缩处理,且压缩率很高) 所以如果再用软件进行压缩,文件也不会明显变小,甚至可能会使文件体积更大 类似的还有JPEG图片等,压缩后大小都差不多 建议用WinRAR压缩,可以试试: 1.压缩时,压缩方式选“最好”; 2.如果是同时压缩多个文件,勾选“创建固实压缩文件”,倒是能减小很多 要想再减小视频文件体积 最有效的方法就是,降低视频的尺寸、分辨率等 但这样做会使视频的质量下降,且转换一次要花很长时间,不推荐

问题三:怎样压缩文件才能把压缩大小压的更小??? 用winrar这个软件,在压缩时的高级选项里,有一个压缩比,压缩比越高,文件压缩后越小,抚是压缩的速度也就越慢!

问题四:7 zip怎么样压缩文件可以让文件变小? 你可以设置压缩率,这样就可以压的小一点。

问题五:怎么压缩文件变小 程序属于无损压缩,所以文件基本不会小很多,WinRAR下,压缩的时候将字典大小选为4096,创建固实常缩文件,这样就能达到最小化。

问题六:怎么用WinRAR把rar文件压缩到最小? 右击文件 添加到压缩文件 你找找 下面有个选项 压缩分卷大小,字节 希望采纳

问题七:怎样可以把大容量软件压缩变小 不好用, 100兆, 压完是96.5兆, 呵呵, 压缩比太小, 我就纳闷了, 怎么介绍的那么好呢? 我用7-Zip试过3天, 虚假广告, 12315!!!

问题八:怎样把照片压缩变小,比如把一张2M照片变成200KB的照片? 可以用ps修改分辨率以及降低图像品质来压缩,方法:

1、先查看原图大小,右击图片选择属性,看到“大小”显示为2.00MB;

2、用ps打开图片,选择图像→图像大小,将原分辨率300改为150;

3、文件→图片另培戚存为,最大品质是12,这是无损品质,但现在要压缩图片大小,只能降低品质,我们设置品质为5,保存;

4、最后,再右击图片查看属性,”大小“显示为176kb,成功压缩至200kb以下了。

问题九:winrar压缩文件后怎么基本没变小 1、有可能你选成了仅存储方式

2、部分文件已经是压缩格式(不是压缩文档格式)就基本不能压缩,比如jpg是压缩图片格式,再用RaR压缩基本都百分之九十几的压缩率(基本压不动)

问题十:如何将一个压缩文件变成几个小的压缩文件 第一步:选中压缩文件

按下Win+E键启动“资源管理器”,再选中欲压缩的文件或文件夹(可以配合Ctrl和Shift键多选),右击,选择WinRAR→“添加到压缩包”命令,此时WinRAR会打开“压缩包名称和参数”窗口。

第二步:设置分割大小

在此窗口中单击“压缩包名称”下文本框,把压缩文件名改为“分割文件”。然后单击“分卷,字节数”下拉列表框,从中选择分割文件的大小,一般选择1,457,664字节,表示一张软盘大小,当然,大家也可以自己键入自定义分割大小。

第三步:压缩、分割文件

完成设置后,单击“确定”按钮,这样WinRAR压缩软件就会把软件压缩并按你设置的大小分割成相应的文件了。由于设置压缩文件名为“分割文件”,所以WinRAR会将选中的文件以分割文件.part1、分割文件.part2、分割文件.part3……等文件压缩存放在一个文件夹下。

1、找到需宏孝要压缩的文件,鼠标右击型哗该文件d出压缩选项框。

2、在d出的对话框中点击添加到压缩文件选项,打开电脑中的压缩软件页面。

3、在打开压缩界面后点击叶所设置界面上的字典大小选项右蔽租稿侧的三角形下拉菜单,打开下拉菜单。

4、在打开下拉菜单后点击选择最小的问价大小,并点击页面右下角的确定选项,确定将文件压缩成所设置的大小即可大幅度减小压缩文件所占的内存空间大小。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12258329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存