android dex文件超出限制个数分包方案
2016-05-16 15:44
387 查看
主要说明在使用apktool打包的时候遇到超过个数限制的时候怎么处理。
解决需要在已经完成的apk内增加smali文件导致的超出。
根据谷歌要求dex内函数个数不应超过65k,如果超出可以分成多个dex 文件
谷歌提供android-support-multidex.jar 支持加载多个dex文件。
使用方法:
你的工程中已经含有Application类,那么让它继承android.support.multidex.MultiDexApplication类,
如果你的Application已经继承了其他类并且不想做改动,那么还有另外一种使用方式,覆写attachBaseContext()方法:
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
计算方式为 所有类 +( 所有定义的函数 + 调用的函数 - 重复的)
解决需要在已经完成的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
计算方式为 所有类 +( 所有定义的函数 + 调用的函数 - 重复的)
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories