集成Tinker后的坑 , noclassdeffounderror异常
来源:互联网 发布:手机克隆软件 编辑:程序博客网 时间:2024/05/17 01:39
在集成Tinker时遇到的坑:
在build.gradle当中为了方便在一般测试时方便给
apply from: 'tinker.gradle'
这句代码加了判断 , 不走这行代码, 但Application的改造是按照Tinker集成的, 结果发现在Android5.0以下手机中运行发现在ApplicationLike类当中报noclassdeffounderror异常 .
为什么会在5.0以下手机才会报这个错误下面会说.
该项目已经方法已经超过65K需要分包, 之前也用了multidex ,所以在我将apk包解压有class.dex以及class2.dex , 第一个是主包 ,利用工具后发现主包中缺少报异常的那个类 .那个类是在第二个包当中 .至此在网上找到了将制定类分到主包当中的方法 .
如果你的主代码的父文件夹叫app
那么你需要在app目录下创建一个maindexlist.txt文件 .
并在app\build\intermediates\multi-dex\debug(如果找不到, 运行一遍就有了)目录下的maindexlist.txt当中全部复制到你自己创建的文件当中. 之后在该文档中按照你cv的格式加入指定类.
并在工程项目的build.gradle文件中加入
android{
...
dexOptions {
preDexLibraries = false
javaMaxHeapSize "4g"
additionalParameters = ['--multi-dex', '--main-dex-list=' + project.rootDir.absolutePath + '/app/maindexlist.txt', '--minimal-main-dex',
'--set-max-idx-number=1000']
}
}
--multi-dex //方法数越界时则生成多个dex文件
--main-dex-list=project.rootDir.absolutePath + '/app/maindexlist.txt//指定的所有class会打包到主dex中
--minimal-main-dex//指定的所有class会打包到主dex中
--set-max-idx-number=1000//改变dex方法数上线为1000,超过后进行拆分
最后一个可以去掉.
这里只是说明强制将类分到主包当中.
我所遇到的问题只需将
apply from: 'tinker.gradle'
这行加上就行了.
至于为什么是Android5.0以下版本才会Crash是因为如下原因:
Multidex支持Android 5.0之前的版本
Android5.0版本的平台之前,Android使用的是Dalvik Runtime执行的程序代码。默认情况下,限制应用到一个单一的classes.dex。
Dalvik字节码文件每APK。为了绕过这个限制,你可以使用multidex支持库,成为你的应用程序的主要部分和DEX文件进行管理,获得额外的dex文件,它们包含的代码。
Multidex支持Android 5.0及更高版本
Android 5.0和更高的Runtime 如art,本身就支持从应用的APK文件加载多个DEX文件。art支持预编译的应用程序在安装时扫描类(..)。Dex文件编译成一个单一的Android设备上执行.oat文件。
- 集成Tinker后的坑 , noclassdeffounderror异常
- Tinker集成和使用(一)Tinker简介和运行Tinker示例出现的问题
- 热更新Tinker的初次集成使用
- 热更新Tinker的集成使用
- Tinker的集成和多渠道打包
- Android 集成Tinker的Gradle配置文件
- Android 集成Tinker的gradle脚本
- 热更新Tinker 的研究与集成
- Jdbc的异常 NoClassDefFoundError
- Tinker集成步骤和集成中所需要的问题
- MultiDex后java.lang.NoClassDefFoundError异常解决
- 集成tinker热更新
- Tinker集成步骤
- tinker(一)-集成
- Tinker接入踩的坑
- tinker热修复--集成tinker patch 详解
- 微信Tinker热修补的快速集成详细步骤
- 微信Tinker热修补的快速集成详细步骤
- llinux学习之find和touch指令
- 利用 LeakCanary 来检查 Android 内存泄漏
- Handler的正确使用,防止内存泄漏
- android 6.0权限全面详细分析和解决方案
- USB 3.0 / SATA 3 速度对比
- 集成Tinker后的坑 , noclassdeffounderror异常
- jsp 乱码处理
- Spring入门——Bean管理的注解实现及例子
- JS实现图片翻书效果
- 为什么做AI的都选Python?
- 剑指offer题目汇总(三)
- WebRTC详解
- Android Studio入门到精通
- eclipse