分析Dalvik字节码进行减包优化

分析Dalvik字节码进行减包优化

优化思路

通过dexdump反编译apk中的dex,得到对应Dalvik字节码,找到寻找冗余的字节码,尝试去除或替换冗余的字节码

目前主要是替换或去除原有的java代码,减少对应的Dalvik指令,从而减少安装包大小。

现在主要是从Dalvik字节码分析来调整Java代码,之后希望能够通过ASM等框架直接调整字节码减少现在的包大小。

优化效果

去除初始化赋值方案 ————减少整个手q的发布包大小80k左右。

插桩函数优化———减少整个手q的发布包大小2k左右。

其它尝试方案,包括字符串拼接、移除interface很多空方法等,因为效果比较小、难以统一修改等问题,只是列举下分析结果,大家如果项目中出现的量比较多也是可以尝试去优化的。

优化方案如下:

1、去除初始化赋值冗余
1.1、问题分析:
对于初始化赋值为系统分配默认零值的静态变量和成员变量,去掉初始化赋值,直接使用系统赋的系统零值,可以减少和中的Dalvik指令,从而减少包大小,而且可以提高类加载和对象创建的效率。
1.2、优化要点
注意对于static final的变量必须赋初值;

interface的变量都是static final类型的;

注意只有赋值为系统赋予的零值的静态变量和成员变量才能按照这种方式优化,其它比如局部变量的改动会导致编译不通过等问题。

2、字符串拼接
用String.valueOf()绝对是最优方案。少用+”” 或者用StringBuffer。

3、调整interface到class,减少实现接口造成的空方法(该方案的缺点在于修改必须手动,难度大,缩减少,优化难度高收益小,弃坑。)

interface FrostInterface{
public abstract void dosth1();
public abstract void dosth2();
}

public class FrostTest1 implements FrostInterface{

@override
public void dosth1(){
//do thing
}

@override
public void dosth2(){
//do thind 
}
}

改成

public abstract class FrostTest implements FrostInterface{
@override
public void dosth1(){
//do thing
}

@override
public void dosth2(){
//do thind 
}
}

public class FrostTest1 extends FrostTest {

}

开心一刻:管申请驾照的人去管结婚证书后失业了,原因是他习惯性地问:“你们是为了娱乐还是为了商业用途?”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值