【Android热修复、零】android分包64K实践

前言:

之所以命名为《Android热修复、零:android分包64K实践》,因为本文只是为热修复起一个抛砖引玉的铺垫效果。

由于网上关于分包的方式方法较多,此处仅以官方的处理方式稍作实践。

处理方案:

官方的永远是最简单的:

第一步、gradle引入android.support.multidex包。

第二步、将原来项目的application继承自MultiDexApplication。

public class MainApplication extends MultiDexApplication {}
然后就完事了。

本文主要是记录一下验证这一场实践的过程:

查看包内方法数。

ebj1831:22.0.1 user$ ./dexdump -f /Users/user/BeatyYuEducation/beatyyueducation/app/app-release.apk | grep method_ids_size
method_ids_size     : 27257
然后我加了这么一个类:
public class SomeFunc {
    public void func1() {

    }

    public void func2() {

    }

    public void func3() {

    }

    public void func4() {

    }

    public void func5() {

    }
}
重新打包,重新查看apk内方法数:
ebj1831:22.0.1 user$ ./dexdump -f /Users/user/BeatyYuEducation/beatyyueducation/app/app-release.apk | grep method_ids_size
method_ids_size     : 27263

一开始以为只是方法数,但是加了6个,说明应该是类加上方法数的个数。为了验证上述说法:

public class SomeFunc1 {

}
我添加了一个空类,打包,查看apk内方法数:事实证明,加了一个。
ebj1831:22.0.1 user$ ./dexdump -f /Users/user/BeatyYuEducation/beatyyueducation/app/app-release.apk | grep method_ids_size
method_ids_size     : 27264

然后我把一些第三方jar包放到lib文件下,虽然并没有引用它们。再次查看包内方法数:

ebj1831:22.0.1 user$ ./dexdump -f /Users/user/BeatyYuEducation/beatyyueducation/app/app-release.apk | grep method_ids_size
method_ids_size     : 39694
直接解压后,发现只有一个classes.dex,原来我方法数太少。那么我就通过complie随便添加一堆第三方吧:(为此我操碎了心) 我添加了这么一大堆第三方:后面的我都没有用到。

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile files('libs/android-async-http-1.4.7.jar')
    //    compile files('libs/android-support-v7-appcompat.jar')

    //    compile files('libs/android-support-v4.jar')
    compile files('libs/volley.jar')
    compile files('libs/gson-2.3.1.jar')
    compile files('libs/universal-image-loader-1.9.3.jar')
    compile files('libs/alipaySdk-20160825.jar')
    compile files('libs/libammsdk.jar')
    compile files('libs/GetuiSDK2.9.3.0.jar')
    compile files('libs/json_simple-1.1.jar')
    //    compile 'com.android.support:recyclerview-v7:+'
    compile project(':library')
    //noinspection GradleCompatible
    compile 'com.android.support:support-v4:24.0.0'
    //noinspection GradleCompatible
    compile 'com.android.support:recyclerview-v7:24.0.0'
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.android.support:support-annotations:24.0.0'
    compile 'com.android.support:support-v13:24.0.0'
    compile 'com.android.support:appcompat-v7:24.0.0'
    compile 'com.android.support:support-vector-drawable:24.0.0'
    compile 'com.android.support:design:24.0.0'
    compile 'com.android.support:gridlayout-v7:24.0.0'
    compile 'com.android.support:mediarouter-v7:24.0.0'
    compile 'com.android.support:cardview-v7:24.0.0'
    compile 'com.android.support:palette-v7:24.0.0'
    compile 'com.android.support:leanback-v17:24.0.0'
    compile 'com.android.support:recyclerview-v7:24.0.0'
    compile 'com.android.support.test:runner:0.5'
    compile 'com.android.support.test.espresso:espresso-core:2.2.2'
    compile 'com.android.support.test.espresso:espresso-contrib:2.2.2'
    compile 'joda-time:joda-time:2.3'
    compile 'com.squareup.picasso:picasso:2.3.2'
}
查看一下方法数:发现只能查看最大的dex的方法数。

ebj1831:22.0.1 user$ ./dexdump -f /Users/user/BeatyYuEducation/beatyyueducation/app/app-release.apk | grep method_ids_size
method_ids_size     : 65201
问我为什么知道的?我分别对分包后的两个包dex文件,查看方法数如下:

ebj1831:22.0.1 user$ ./dexdump -f /Users/user/BeatyYuEducation/beatyyueducation/app/aaaaa/classes.dex | grep method_ids_size
method_ids_size     : 65201
ebj1831:22.0.1 user$ ./dexdump -f /Users/user/BeatyYuEducation/beatyyueducation/app/aaaaa/classes2.dex | grep method_ids_size
method_ids_size     : 3889
成功分包!classes.dex ,classes2.dex。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值