本文转载至http://quanke.name/2016/07/19/%E5%AE%8C%E7%BE%8E%E8%A7%A3%E5%86%B3-java-lang-NoClassDefFoundError-R-R-%E5%B7%A8%E5%9D%91/
完美解决 java.lang.NoClassDefFoundError R R 巨坑
发表于2016-07-19|分类于android开发|
转载请注明出处,谢谢
此坑有点大,害我同事弄了一周没有搞定
开始的时候是报另外一个错误,也是NoClassDefFoundError异常,但这个是因为包冲突的问题,删除掉一些包就好了。但是这个问题没有这么简单。
首先描述一下我们的场景吧:
我们做了一个优谈TOPAPP,主要的逻辑代码是在一个单独的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中增加(非rootbuild.gradle)
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
defaultConfig {
multiDexEnabled true
}
第二步:
在AndroidManifest.xml增加
...
android:name="android.support.multidex.MultiDexApplication">
...
如果需要自己实现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/9870995/android-java-lang-noclassdeffounderror