网站首页 > 技术文章 正文
对安装包中的资源文件将进行如下方法进行优化:
1.图片压缩
1.对apk中的资源图片进行压缩. 可以使用webp图片。WEBP 是google推出的意图改变web图片JPG、PNG、GIF三分天下局势的一种图片格式。它不仅支持无损或有损压缩、alpha通道,还支持动画演示。在同画质的情况下,webp格式图片占用体积相较于jpg图片大约减少40%,相较于无损png图片大约减少30%。
2.使用svg图片。svg图片是对图片的描述,牺牲了CPU的计算能力,节省了空间。
WebP的使用方法
官方提供了jpg/png/gif到webp的互转的工具,以及使用方法。官方网址
下载转化工具
下载自己对于的系统的安装包。我以window为例。需要配置环境变量到path中去。安装完成后测试结果如下
工具主要包含四个。
分别用于png等转换为webp;webp转化为png;Git转化为webp;查看webp图片;最后一个是用于创建webp动画文件的。
5.对于资源文件中的图片,都是支持的。如果在代码中调用图片,如果是android4.0以上可以直接调用和其他图片使用是一样的。对于以下的网上有许多参考。现在手机基本上多少android4.0以上的了。
cwebp-q50-losslesspicture.png-opicture_lossless.webpcwebp-q70picture_with_alpha.png-opicture_with_alpha.webp
2.资源动态加载
动态的从服务器下载资源图片,把不必要的图片不放在apk资源包中。也可以使用一些插件化进行动态加载
3.Lint工具 设置优化点
检查没有使用到的布局进行删除
检查未使用到的资源进行删除
删除string.xml中没有使用到的字符
4.极限压缩
使用7zip工具压缩。下面会用到。
5.进行混淆
让apk变小。 原理:
可以删除注释和不用的代码
将java文件的名字修改短。a.java
方法名字也修改短。
6.对resources.arsc进行优化
资源打包过程
资源打包
资源存放格式
resources.arsc包中的文件是对资源文件的2进制的保存。其实我们也可以像优化dex包即混淆的方法把其中的包含 arrt,drawable,string,layout,color,menu,anim,styles等文件的名字和路径修改成a.png等名字。这样resources.arsc的大小就小了。
具体的使用我们可以使用微信开源工具AndResGuard做Android资源混淆。
微信开源工具AndResGuard做Android资源混淆
准备工具。 到微信github下载工具。在tool_output目录下。
2.包含的文件
3.配置文件config.xml
<?xmlversion="1.0"encoding="UTF-8"?><resproguard><!--defautpropertytoset--><issueid="property"><!--whetheruse7ziptorepackagethesignedapk,youmustinstallthe7zcommandlineversioninwindow--><!--sudoapt-getinstallp7zip-fullinlinux--><!--andyoumustwritethesigndatafist,andifoundthatifweuselinux,wecangetabetterresult--><seventzipvalue="true"/><!--thesigndatafilenameinyourapk,defaultmustbeMETA-INF--><!--generally,youdonotneedtochangeitifyoudontchangethemetafilenameinyourapk--><metanamevalue="META-INF"/><!--ifkeeproot,res/drawablewillbekept,itwon'tbechangedtosuchasr/s--><keeprootvalue="false"/></issue><!--whitelist,someresourceidyoucannotproguard,suchasgetIdentifier--><!--isactive,whethertousewhitelist,youcansetfalsetocloseitsimply--><issueid="whitelist"isactive="true"><!--youmustwritethefullpackagename,suchascom.tencent.mm.R--><!--forsomereason,weshouldkeepouriconbetter--><!--anditsupport*,?,suchascom.tencent.mm.R.drawable.emoji_*,com.tencent.mm.R.drawable.emoji_?--><!--<pathvalue="<your_package_name>.R.drawable.icon"/>--><!--<pathvalue="<your_package_name>.R.string.com.crashlytics.*"/>--><!--<pathvalue="<your_package_name>.R.string.umeng*"/>--><!--<pathvalue="<your_package_name>.R.layout.umeng*"/>--><!--<pathvalue="<your_package_name>.R.drawable.umeng*"/>--><!--<pathvalue="<your_package_name>.R.anim.umeng*"/>--><!--<pathvalue="<your_package_name>.R.color.umeng*"/>--><!--<pathvalue="<your_package_name>.R.style.*UM*"/>--><!--<pathvalue="<your_package_name>.R.style.umeng*"/>--><!--<pathvalue="<your_package_name>.R.id.umeng*"/>--><!--<pathvalue="<your_package_name>.R.string.UM*"/>--><!--<pathvalue="<your_package_name>.R.string.tb_*"/>--><!--<pathvalue="<your_package_name>.R.layout.tb_*"/>--><!--<pathvalue="<your_package_name>.R.drawable.tb_*"/>--><!--<pathvalue="<your_package_name>.R.color.tb_*"/>--></issue><!--keepmapping,sometimesifweneedtosupportincrementalupgrade,weshouldkeeptheoldmapping--><!--isactive,whethertousekeepmapping,youcansetfalsetocloseitsimply--><!--ifyouuse-mappingtosetkeepmappingpropertyincammandline,thesesettingwillbeoverlayed--><issueid="keepmapping"isactive="false"><!--theoldmappingpath,inwindowuse\,inlinuxuse/,andthedefaultpathistherunninglocation--><pathvalue="{your_mapping_path}"/></issue><!--compress,ifyouwanttocompressthefile,thenameisrelativepath,suchasresources.arsc,res/drawable-hdpi/welcome.png--><!--whatcanyoucompress?generally,ifyourresources.arsclessthan1m,youcancompressit.andithinkcompress.png,.jpgisok--><!--isactive,whethertousecompress,youcansetfalsetocloseitsimply--><issueid="compress"isactive="false"><!--youmustuse/separation,anditsupport*,?,suchas*.png,*.jpg,res/drawable-hdpi/welcome_?.png--><pathvalue="*.png"/><pathvalue="*.jpg"/><pathvalue="*.jpeg"/><pathvalue="*.gif"/><pathvalue="resources.arsc"/></issue><!--sign,ifyouwanttosigntheapk,andifyouwanttouse7zip,youmustfillinthefollowingdata--><!--isactive,whethertousesign,youcansetfalsetocloseitsimply--><!--ifyouuse-signaturetosetsignpropertyincammandline,thesesettingwillbeoverlayed--><issueid="sign"isactive="true"><!--thesignaturefilepath,inwindowuse\,inlinuxuse/,andthedefaultpathistherunninglocation--><pathvalue="release.keystore"/><!--storepass--><storepassvalue="testres"/><!--keypass--><keypassvalue="testres"/><!--alias--><aliasvalue="testres"/></issue></resproguard>
其中包含 7zip的压缩,设置白名单,即在混淆的时候不混淆。设置mapping路径。签名等。
4.下载7zip文件
配置7zip环境变量
7zip压缩比
5.开始编译
setjdkpath=D:\ProgramFiles\Java\jdk1.7.0_79\bin\java.exesetstorepath=release.keystoresetstorepass=testressetkeypass=testressetalias=testressetzipalign=D:\soft\dev\android\sdk\build-tools\23.0.2\zipalign.exe"%jdkpath%"-jarAndResGuard-cli-1.2.3.jarinput.apk-configconfig.xml-outoutapk-signature"%storepath%""%storepass%""%keypass%""%alias%"-zipalign"%zipalign%"pause
这是微信build_apk.bat.的配置。其中config.xml默认是打开的。如果按照上面的运行默认是使用7za的,如果在下载7zip没有现在extra就运行错误。不会生成。如果在命令后边 加上 -7zip 然后指定到 7z.exe也是可以运行的。
6.最终压缩结果
这样压缩就结束了。其实可以在android studio中配置。可以参考开源。
猜你喜欢
- 2024-09-29 reFlutter:一款针对Flutter的逆向工程分析工具
- 2024-09-29 APP编译打包流程 编译apk
- 2024-09-29 抖音团队内测新版本 应用于PC、平板端
- 2024-09-29 android 5.0 创建多用户 双开多开应用(1)
- 2024-09-29 MT管理器-简单实战-去除启动页 怎么用mt管理器去掉软件启动广告
- 2024-09-29 windows11 安装安卓应用apk,访问google play商店!详细安装教程
- 2024-09-29 微信发布安卓内测版 7.0.23 更新 安卓微信7.0.21内测
- 2024-09-29 APK 是怎么来的?Android 构建流程解析
- 2024-09-29 软件测试 | 应用程序签名机制实现的源代码分析
- 2024-09-29 Android 用命令给apk签名 apk签名工具怎么使用
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)