完美解决 java.lang.NoClassDefFoundError R$layout R$di

此坑有点大,害我同事弄了一周没有搞定

开始的时候是报另外一个错误,也是NoClassDefFoundError异常,但这个是因为包冲突的问题,删除掉一些包就好了。但是这个问题没有这么简单。

首先描述一下我们的场景吧:

我们做了一个优谈TOP APP,主要的逻辑代码是在一个单独的android studio module 实现的,这个主要是为了可以导入到公司其他APP里面,就是把优谈TOP当成sdk,嵌入到公司其他APP里,我们使用优谈TOP单独运行的时候没有一点问题,导入到另外要一个APP的时候,问题就出现了。

百度,Google搜了以大堆资料,都没有解决,最后在stackoverflow找到了一种方案。还真可以

stackoverflow 连接 http://stackoverflow.com/questions/32110859/fatal-exception-java-lang-noclassdeffounderror-android-support-v7-appcompat-r

看了这个才知道,这是Dex超出方法数的限制问题,Dex达到极限时,会创建多个Dex文件,android Lollipop 没有处理,需要在应用中处理 。

第一步:

build.gradle 中增加(非 root build.gradle )

dependencies {
    compile 'com.android.support:multidex:1.0.0'
}
defaultConfig {          
    multiDexEnabled true
}

第二步:

在AndroidManifest.xml增加

<application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
</application>

如果需要自己实现 Application,需要重写attachBaseContext方法

import android.support.multidex.MultiDexApplication;
import android.support.multidex.MultiDex;

public class MyApplication extends MultiDexApplication {
 // ......

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

或者

import android.support.multidex.MultiDex;
public class MyApplication extends Application {
 // ......

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

参考:https://developer.android.com/tools/building/multidex.html#mdex-gradle

这里记录一下没有解决我的问题的方案,也许你有用:

http://stackoverflow.com/questions/32110859/fatal-exception-java-lang-noclassdeffounderror-android-support-v7-appcompat-r?noredirect=1&lq=1

http://stackoverflow.com/questions/27614538/crash-java-lang-noclassdeffounderror-android-support-v7-appcompat-rlayout

http://stackoverflow.com/questions/9870995/android-java-lang-noclassdeffounderror

转载于:https://my.oschina.net/quanke/blog/713597

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值