吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11621|回复: 47
上一主题 下一主题
收起左侧

[Android 转帖] 【适合小白】Apk精简优化详细教程(搬砖)

    [复制链接]
跳转到指定楼层
楼主
景寒杏 发表于 2021-9-25 17:09 回帖奖励
本帖最后由 景寒杏 于 2021-9-25 17:13 编辑

来论坛一年了,这是我的第一篇教程贴,如有错误,请诸位不吝赐教。在此谢过了undefined

本文大部分摘自CSDN的这篇
https://blog.csdn.net/AndroIDAlvin/article/details/103159561

另外还有mt官方文档

还有其它各种文档参考及个人经验,,

总结了这么一篇适合小白的教程。。

闲言少叙,下面是正文

在精简apk之前,首先要了解一下它的结构。


1.结构分析
APK包结构如下:

lib/
so库存放位置。
so库文件分为不同的CPU架构,像armeabi,armeabi-v7a, arm64-v8a,x86,x86_64,和mips。大多数情况下我们可以只用一种armeabi-v7a,后面会讲到原因。

res/
资源文件夹,包含着图片、布局、菜单等文件,resources.arsc 中索引的文件均存放在该目录中(进行过资源混淆的除外)。

assets/
副资源文件夹。

META-INF/
包含CERT.SF和 CERT.RSA签名文件以及MANIFEST.MF 清单文件。

resources.arsc
资源配置文件,包含着字符串、主题、图片文件索引、布局文件索引等信息

classes.dex
包含以Dalvik / ART虚拟机可理解的DEX文件格式编译的类。

AndroidManifest.xml
应用清单文件,版本号、版本名称、权限、应用名称、应用图标、活动、服务、广播等配置信息,均在这个文件中。该文件使用Android的二进制XML格式。


在这些文件中,除了META-INF/其它都是本文的精简对象

下面正式开始


1. 对lib目录下的文件进行瘦身处理

如果我直接告诉你只留下 armeabiv-v7a 文件夹就行是很不负责任的

如果你感兴趣,可以往下看

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

armeabi-v7主要不支持ARMv5(1998年诞生)和ARMv6(2001年诞生).目前这两款处理器的手机设备占比太少。

而许多基于 x86 的设备也可运行 armeabi-v7a 和 armeabi NDK 二进制文件。对于这些设备,主要 ABI 将是 x86,辅助 ABI 是 armeabi-v7a。

最后总结一点:如果适配版本高于4.1版本,可以只留下armeabiv-v7a,当然,如果armeabi-v7a不是设备主要ABI,那么会在性能上造成一定的影响。

so,,,,只留 armeabiv-v7a,,没错的undefined

(至于能省下多大空间,因应用而定)


另,,,如果有termux

  • uname -m
[color=rgb(51, 102, 153) !important]复制代码

可以查看你手机的cpu框架类型

当然还有进阶玩法--精简so文件,,只保留有用的核心代码,,但是,我不会undefined





2. 精简res/asstes


①删除asstes里的广告插件

主要有bdx开头的压缩包(百度)

gdt_开头的文件夹(腾讯)


②使用图片压缩工具对图片进行压缩。
(注:在压缩前要先看一下,不能预览的不要动)
例:
使用tinypng有损压缩
TinyPNG工具只支持上传PNG图片到官网上压缩,然后下载保存,在保持alpha通道的情况下对PNG的压缩可以达到1/3之内,而且用肉眼基本上分辨不出压缩的损失.

Tinypng的官方网站:http://tinypng.com/

注意:图片在打包时已经进行过无损压缩了,,故进行无损压缩是没有任何效果的。

③使用音频压缩工具对音频进行压缩。
(注:在压缩前要先看一下,不能播放的不要动)


④还可以删除abc_开头的图片文件,,
(这种一般都是自动生成的,开发者也不会调用)

  • abc_*.png
[color=rgb(51, 102, 153) !important]复制代码

正则搜索删除。

另:如果有能力,可以尝试把非透明 png 格式大图片转换为 jpg 格式,效果显著!

等等。。



3. 减小classes.dex大小

脱壳的就删无用类,,比如某数字删stub和jg

(mt新版可以一键去除调试信息,下面留作纪念)

(感谢@快乐小牛的提醒~来自545楼)
,,,,,,,,,,,,,,,,,,,,,
删掉dex里的.line x和.prologue也是个不错的方法,听说proguard工具可以一键,,但我不会

留下我的方法
①全dex代码搜
  • .prologue
[color=rgb(51, 102, 153) !important]复制代码
,全部替换即可(替换什么都不要填,强迫症可以填个空格)

②然后就是.line ,这个比较麻烦,因为有一到几千,,所以用正则匹配

  • \.line .+
[color=rgb(51, 102, 153) !important]复制代码

全dex搜索代码,,记得勾正则

虽然意义不大,但也有一定的效果,,而且可以增加dex对比的难度

4月1日补充:有人反应不能保存 (报错) 的问题,猜测是工作量太大导致mt编译出错,,关闭弹窗,然后再保存一遍就好啦。(详见43页)

如果还是不能解决,就别搞了。。编译的太多,手机带不动。。。  强迫症可以一个dex一个dex删
,,,,,,,,,,,,,,,,,,,

高级一点的就是剥离广告sdk,由于我不会,就不多说了。undefined

还有就是用工具,比如proguard,,自行百度

4. 精简 resources.arsc

我有点懒,不多说了,
官方文档有详细教程
路径:逆向功能 - 简单实战 - 汉化应用 - 精简语言包
另附(特别感谢@小狗巧巧):
[答疑解惑]为什么arsc越精简越大?

5.精简AndroidManifest.xml

这个我真的不会说,删掉无用activity 广播  service啥的就可。

用activity 举个例子。


  • <activity开头............xxxx........../>或者</activity>结尾
[color=rgb(51, 102, 153) !important]复制代码


这个是通用的,,建议去设置里开启 显示空白符,一般都是删八个点开头,八个点结束的一段。

常见的广告关键词有

  • qq.e(腾讯)
  • ads.(通用)
  • .ad.(大部分是应用内置)
  • .mobad.(百度)
  • .mobads.(百度)
  • .bytedance.(穿山甲,今日头条旗下)
  • .ss.(穿山甲,和上一个在一块)
  • (如果软件有其它功能和今日头条合作)
  • (删 错 会导致闪退)
  • (建议备份后再删除测试)
  • .bytedance.sdk.openadsdk.
  • (已确定是穿山甲广告)
  • sdk(带有huawei,xiaomi,meizu,vivo , push等 字样的删)
  • 还有 taobao, liulishuo, weibo 这些等等,自行判断
  • push.(通知推送)

[color=rgb(51, 102, 153) !important]复制代码

注:push请根据实际情况删除,,一般破解软件通知推送什么的根本不需要。

(4月26号补充:对不起诸位,我没有说清楚,,把自己的习惯带了进去,其实SDK有讲究的,,比如weibo的sdk删了会导致无法用微博登陆和分享,删淘宝可能会导致无法调用淘宝,

删带有手机型号的可能会导致无法使用手机运营商相关的服务,比如无法使用通知推送,无法调用应用商店更新,等等

再比如删alipay可能导致无法调用支付宝支付,,这些请自行判断)

(因为我平时是不在乎的,通知推送什么的,没有才好。微博本人也不用。。所以没有注明,抱歉,现在补上)


再次声明
本文大部分节选自CSDN的这篇
https://blog.csdn.net/AndroidAlvin/article/details/103159561

及mt官方文档

还有其它各种文档参考及个人经验,,

花了很长时间才写好,,有用的记得给个免费的好评!undefined

。。。THE END。。。


@MiBStudio 来看看啊undefined
(现在叫小狗巧巧undefined)


补几张图,顺序乱了,凑合看吧undefined

补充:关于为什么不能预览/播放的文件不要压缩,

举个例子,吃鸡游戏的安装包里有一个图片文件,1g多的地图,当然不能压缩。

人脸识别的配置文件就是mp3格式,也不可压缩

总结:只能压缩可以查看的文件









原作者:白又白

免费评分

参与人数 31吾爱币 +27 热心值 +26 收起 理由
liyunlongnb + 1 + 1 谢谢@Thanks!
cgl556 + 1 + 1 我很赞同!
ts737505 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
dcrdw + 1 用心讨论,共获提升!
Chenmly + 1 谢谢@Thanks!
槿落沉眠 + 1 + 1 什么叫教程,这就叫教程,有原理有说明有解析。
cgj08 + 1 + 1 热心回复!
MGCWM + 1 + 1 热心回复!
lyk1115 + 1 我很赞同!
411183343 + 1 谢谢@Thanks!
zbaby523 + 1 + 1 谢谢@Thanks!
zlnxlzht + 1 + 1 热心回复!
lingyun011 + 1 + 1 用心讨论,共获提升!
pyw5152 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
马克 + 2 + 1 鼓励转贴优秀软件安全工具和文档!
笨笨家的唯一 + 1 + 1 我很赞同!
winshaw + 1 + 1 用心讨论,共获提升!
北冥鱼 + 1 我很赞同!
芯醉紅颜 + 1 辛苦了
schedule + 1 谢谢@Thanks!
tyoodonvcd + 1 + 1 建议大佬先把微信APP精简下
LzyJay + 1 我很赞同!
参数 + 1 + 1 谢谢@Thanks!
kaix + 1 + 1 我很赞同!
ll52wj1pjo + 1 + 1 热心回复!
Vonalier + 1 + 1 用心讨论,共获提升!
zaq4736 + 1 + 1 谢谢@Thanks!
stefankuok + 1 + 1 我很赞同!
eec + 1 + 1 谢谢@Thanks!
某些人 + 1 + 1 谢谢@Thanks!
5n0w + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
maoshengwang 发表于 2021-9-25 17:25
支持,楼主辛苦了。。。学习一下
3#
花葬 发表于 2021-9-25 17:37
4#
snakenba580 发表于 2021-9-25 19:20
5#
dipper 发表于 2021-9-25 20:33
很详细的教程
6#
ynboyinkm 发表于 2021-9-25 20:50
感谢分享,这是好东西!!
7#
zaq4736 发表于 2021-9-25 20:59
很详细的教程。
8#
o0蜗牛 发表于 2021-9-25 21:34
教程还能再详细一点吗?sdk具体例子
9#
ll52wj1pjo 发表于 2021-9-25 21:56
感谢分享66666,学习一下
10#
legendfok 发表于 2021-9-25 22:20
先收藏,国庆有时间再学些,谢谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 21:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表