android dex文件超出限制个数分包方案

主要说明在使用apktool打包的时候遇到超过个数限制的时候怎么处理。
解决需要在已经完成的apk内增加smali文件导致的超出。
根据谷歌要求dex内函数个数不应超过65k,如果超出可以分成多个dex 文件
谷歌提供android-support-multidex.jar 支持加载多个dex文件。
使用方法:

你的工程中已经含有Application类,那么让它继承android.support.multidex.MultiDexApplication类,

如果你的Application已经继承了其他类并且不想做改动,那么还有另外一种使用方式,覆写attachBaseContext()方法:

public class MyApplication extends FooApplication {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

 apktool 支持打多个dex文件。
注意事项:  分smail 时 第二个应该是从smail_classes2 开始命名

关于函数个数官方说明是 引用的函数个数(不重复的)
个人稍微总结了下函数个数计算方式:
   定义的类算一次计量 ,
   定义的函数算一次计量,(被调用不在增加计量)
   函数被重载一次增加一个函数计量,
   子类继承父类接口 增加一次计量
   调用系统接口一个算一次。 (重复调用不增加计量)

smail文件格式内函数计算
   .class        为类名          格式为:.class public Lcom/test/test_class;
   .method    为定义函数    格式为:.method public constructor <init>()V
   invoke-     为调用函数  格式为:   Lcom/test/test_class;-><init>()V

逐行检测,统一函数保存格式:
     .class  转译为:   Lcom/test/test_class;
     .method 转译为 包名+“->”+函数名+字段类型+返回格式  
                   列入 .method public constructor <init>()V
                   转译为: Lcom/test/test_class;-><init>()V

    invoke-  直接保留  Lcom/test/test_class;-><init>()V

计算方式为   所有类 +( 所有定义的函数  + 调用的函数  - 重复的)



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值