2017-04-14 41 views
4

我在Eclipse上有一个项目,其中包含许多库项目。然后我将它们移至Android Studio。经过艰苦的努力,使得gradle build成功。现在我可以运行我的项目并将apk安装到设备上。但是当我打开一个扩展AppCompatActivity的活动时,我在运行时得到了一个N​​oClassDefFoundError。但是如果我使用Activity而不是AppCompatActivity,则不会发生错误。我在清单中定义了活动。NoClassDefFoundError使用AppCompatActivity时

这是logcat的输出:

E/AndroidRuntime: FATAL EXCEPTION: main 
java.lang.NoClassDefFoundError: com.my.packagename.activities.MyActivity 
at com.my.packagename.activities.LoginActivity$2.onClick(LoginActivity.java:163) 
at android.view.View.performClick(View.java:4475) 
at android.view.View$PerformClick.run(View.java:18786) 
at android.os.Handler.handleCallback(Handler.java:730) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5493) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
at dalvik.system.NativeStart.main(Native Method) 

这是我有活动的模块deoencencies:

compile 'com.google.android.gms:play-services-gcm:10.2.1' 
compile 'com.android.support:support-v4:24.0.0' 
compile 'com.android.support:appcompat-v7:24.0.0' 
compile 'com.android.support:design:24.0.0' 

我缺少什么?

编辑我的清单文件:

... 
<activity 
     android:name=".activities.MyActivity" 
     android:theme="@style/MyTheme" 
     android:label="@string/title_activity_my_activity"/> 
</application> 

而且我的风格文件:

... 
<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar"</style> 

这里是我的活动扩展AppCompatActivity(actullaty一个非常简单的活动):

public class MyActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my); 
    } 
} 

和我打开这个活动的代码。我只放置了onClick监听器代码,因为整个活动时间太长,无法放在这里:

btnSignUp.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (!getIsOnline()) { 
      toast.setText(R.string.no_network); 
      toast.show(); 
      return; 
     } 
     Intent intent = new Intent(getApplicationContext(), MyActivity.class); 
     startActivity(intent); 
    } 
}); 

好的。我删除了multidex。我把谷歌播放服务只有gcm包,这解决了我的方法数问题。 gradle构建文件被更新。之后,我运行'gradlew clean'并且'使缓存失效/重新启动'。但问题仍在继续。

+1

显示您的清单..并请不要使用播放服务...只是不..它会导致你的应用程序dex问题..使用个人依赖关系,而不是 – ZeroOne

+0

升级PlayService 7.8至9.8或以上和用户个人依赖 – Sach

+0

尝试将'getApplicationContext()'更改为'CurrentActivity.this' –

回答

1
  • 检查你的主题,应该是Theme.AppCompat.Light.DarkActionBar或某事。如果您MyActivity存在

  • 检查清单

  • 检查你的method count,如果大于65K以上,请确保您使用Multidex

+0

检查我的编辑。我已经拥有了它们。 – buttib

+0

@buttib然后检查multidex作为其他答案说明,你可以使用这里写的插件 –

+0

@buttib把代码究竟是什么引起异常 –

1

的build.gradle

应更高的gradle版本

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.1.2' 

     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 

的build.gradle:

android { 
    compileSdkVersion 22 
    buildToolsVersion "23.0.0" 

     defaultConfig { 
      minSdkVersion 14 //lower than 14 doesn't support multidex 
      targetSdkVersion 22 

      // Enabling multidex support. 
      multiDexEnabled true 
     } 
} 

dependencies { 
    compile 'com.android.support:multidex:1.0.1' 
} 

Application.Class

public class MyApplication extends Application { 

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

} 

清单:

android:name=".MyApplication" 

变化grade.properties

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 

1.Try文件 - >的Invalidate缓存和res挞工作室。在默认配置

2.增加multiDexEnabled =真

  • 添加在你的依赖编译com.android.support:multidex:1.0.0

  • 应用类扩展MultiDexApplication而不仅仅是应用

  • 5.如果上面的东西不起作用删除您gradle这个,让干净的项目,这将产生一个新的gradle产出。

    +0

    我记下你的步骤,没有人帮助我。 – buttib

    +0

    你有没有使用Multidex extends Application类 – pradeep

    +0

    我没有。我会尝试,但你能解释multidex和AppCompatActivity或com.android.support:appcompat-v7之间的关系是什么? – buttib

    1
    在你的build.gradle

    添加

    defaultConfig { 
    ... 
    multiDexEnabled true 
    ... 
    } 
    

    ,并添加您的活动的onCreate

    MultiDex.install(this); 
    

    从MultiDexApplication扩展您的应用程序

    +1

    并从MultiDexApplication扩展你的应用程序 –

    +0

    你真的认为这个问题是关于multi dex选项的吗?因为我有 'multiDexEnabled真正的' – buttib

    +0

    是的,我是这么认为的 –

    相关问题