【转载】ProGuard

博客探讨了如何利用Proguard工具调整类的包名,以优化Dex文件布局,减少内存映射(.dexmmap)的大小。通过理解Dex文件中类的排列方式,作者建议将频繁一起调用的类归入同一包名,以提高加载效率。实现方法包括手动创建Proguard映射文件并应用,以确保类名不变但包名更改,从而改善程序性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的

目的是为了将部分频繁一起调用类指定为同一个包名,目的为是减少.dex mmap的大小
依据来源是:


根据对Dex数据的观察,我们发现Dex文件中数据基本是按类名的字母顺序进行排列的,这样同样包名的类会排在一起。但在实际程序执行中,同一个package下的类并不会全部一起调用,而是和很多其他package下的类进行交互,但mmap加载了整个页面(4K),可能会有很多无用数据。为了减少这样的情况,我们在生成文件时要尽量将使用到的数据内容排布在一起。在APK的编译流程中,Proguard混淆工具正好是能够对类名进行修改的,可以根据程序运行的逻辑,将那些会互相调用的类改为同一个package名,这样就可以使它们的数据排布在一起。


实现方法

【将验证】
proGuard没有一个标准的选项来重命名包,同时保留它们简单的类名。你可以手动创建一个ProGuard mapping文件,如下所示

com.example.MyClass -> a.MyClass:
com.example.MyOtherClass -> a.MyOtherClass:

然后可以使用选项-applymapping mapping.txt 来使用这个mapping文件

参考资料

https://stackoverflow.com/questions/15780865/proguard-keep-class-name-but-change-package-name
https://mp.weixin.qq.com/s/01Abwe0p1h3WLh28Tzg_Dw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值