我正忙着我的应用程序超过一个星期,突然间:
11-12 07:59:17.860 1653-1653/nl.test.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{nl.test.MyApp/nl.test.MyApp.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "nl.test.myapp.MainActivity" on path: DexPathList[[zip file "/data/app/nl.test.myapp-2.apk"],nativeLibraryDirectories=[/data/app-lib/nl.test.myapp-2, /system/lib]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
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:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "nl.test.myapp.MainActivity" on path: DexPathList[[zip file "/data/app/nl.test.MyApp-2.apk"],nativeLibraryDirectories=[/data/app-lib/nl.test.MyApp-2, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
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:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
这是我的AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="nl.test.myapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="nl.test.myapp.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".welcomewizard.WelcomeWizardIntroPage"
android:label="@string/app_name" />
<activity android:name=".welcomewizard.WelcomeWizardPage1"
android:label="@string/app_name" />
<activity android:name=".welcomewizard.WelcomeWizardPage2"
android:label="@string/app_name" />
<activity android:name=".welcomewizard.WelcomeWizardPage3"
android:label="@string/app_name" />
<activity android:name=".welcomewizard.WelcomeWizardPage4"
android:label="@string/app_name" />
<activity android:name=".welcomewizard.WelcomeWizardFinishPage"
android:label="@string/app_name" />
<activity android:name=".CompanySelectorActivity"
android:label="@string/compsel_actionbarlabel" />
</application>
</manifest>
在我的R.java遇到一些问题之后发生这种情况(视图的id不正确),重建项目后发生这个问题
我已经尝试过IDE文件菜单中的Invalidate Cashes / restart
更新14:51 : 这是我的compiler.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Javac" />
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>
我的MainActivity.java文件(\ src \ main \ java \ nl \ test \ myapp \ MainActivity.java):
package nl.test.myapp;
import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.widget.RelativeLayout;
import nl.test.myapp.welcomewizard.WelcomeWizardIntroPage;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setBackground(R.drawable.background_grey);
Intent intent = new Intent(this, WelcomeWizardIntroPage.class);
startActivity(intent);
finish();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void setBackground(int drawable){
int currentApiVersion = android.os.Build.VERSION.SDK_INT;
if(currentApiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN){
RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout_main);
layout.setBackground(getResources().getDrawable(drawable));
}
}
}
答案 0 :(得分:7)
关闭android studio。导航到项目文件夹。删除与intelliJ(Android Studio)相关的所有文件,即
还要确保软件包名称与android manifest.xml中的软件包匹配。
然后重新导入项目。
这发生在我身上,因为我重命名了root包,IntelliJ(android studio)没有跟踪这个。
答案 1 :(得分:5)
我在Android studio中创建了一个新项目,并将旧项目中的所有内容复制到新项目中。现在它再次运行,没有对代码进行任何(!)修改。
答案 2 :(得分:2)
我有同样的问题,结果我搞砸了一些最后的方法。
请务必在之前检查logcat输出中的dalvikvm
个错误。我会给你一些关于这个问题的提示。在我的例子中,我有一个已经在基类中定义的最终方法(isResumed
) - 导致运行时崩溃。在编译时没有抱怨。
检查日志:
E/dalvikvm( 9984): Method Lcom/your/package/ui/SomeActivity;.isResumed overrides final Landroid/app/Activity;.isResumed
W/dalvikvm( 9984): failed creating vtable
...
D/AndroidRuntime( 9962): Shutting down VM
...
E/AndroidRuntime(10065): FATAL EXCEPTION: main
E/AndroidRuntime(10065): Process: com.yourpackage.ui, PID: 10065
E/AndroidRuntime(10065): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.yourpackage.ui/com.yourpackage.ui.HomeActivity}: java.lang.ClassNotFoundException: Didn't find class "com.yourpackage.ui.HomeActivity" on path: DexPathList[[zip file "/data/app/com.yourpackage.ui-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.yourpackage.ui-2, /vendor/lib, /system/lib]]
...
答案 3 :(得分:2)
我碰到了这个。我的应用程序运行正常,有一天它刚刚开始运行这些ClassNotFoundExceptions。我的代码根本没有改变。
据我所知,它最终成为Android Studio构建中的一个错误。我最近更新了金丝雀频道的最新版本。
在开发频道上切换回旧版本让事情再次发挥作用:
答案 4 :(得分:1)
这也发生在我身上,这里的帖子都没有帮助。我的问题也是由于我重命名了root包。我的ClassNotFoundException显示了一个DexPathList,它是我的包的旧路径。我发现原因在我的Gradle脚本中名为“build.gradle(Module:app)”我有一句话:applicationId“old package name”。我把它更改为新的包名,做了一个gradle同步,一切正常。
答案 5 :(得分:1)
我遇到了类似的问题。我记得,以前没有足够的记忆&#34;显示消息,应用程序上传过程无法完成,因错误而停在dexDebug上。然后我释放了足够的内存,但是应用程序以ClassNotFoundException开始。
对我有用的解决方案是删除所有&#34; build&#34;项目中的文件夹。我想gradle可以将损坏的文件放到&#34; build&#34;内存不足时的文件夹。
答案 6 :(得分:1)
您可以查看Multidex机制。原因可能是方法编号溢出。
添加MultiDex.install(this);到您的申请:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
并添加
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
if (dx.additionalParameters == null) {
dx.additionalParameters = []
}
dx.additionalParameters += '--multi-dex' // enable multidex
}
}
到你的app模块的gradle.build
答案 7 :(得分:0)
使用Android Studio时,请确保包含Java类的“src”文件夹标记为“Source Root”。否则,它不会进入APK。
答案 8 :(得分:0)
我遇到了同样的错误,所以我添加了 Main_activity 的副本并将其命名为 MainActivity。成功了。
答案 9 :(得分:0)
https://stackoverflow.com/a/29821331/11480535为我工作了一点点补充,我还必须删除projectFilesBackup/
!
答案 10 :(得分:0)
GO to Build Menu and Clean Project.
The above solution worked perfectly fine for me.
答案 11 :(得分:0)
如果您正在创建一个Android库,您可能只是忘记使用implementation project
关键字在您的app build.gradle中导入您的库:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:design:27.0.2'
implementation 'com.android.support:mediarouter-v7:27.0.2'
implementation project(':mylib-module:mymodule')
implementation 'com.google.firebase:firebase-core:10.0.1'
}
希望这会有所帮助:)
答案 12 :(得分:0)
就我而言,它是项目中android.app.Application
的明确声明和模块中的实际代码。
答案 13 :(得分:0)
我不知道这会对你有所帮助..但是试着将应用程序主题用作@ style / Theme.AppCompat ..我们必须根据开发者论坛使用。
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
答案 14 :(得分:0)
正如我在你的日志中看到的那样,
nativeLibraryDirectories=[/data/app-lib/nl.test.myapp-2, /system/lib
为此,您可以将lib
更改为libs
,我这样做了,它解决了我的问题。
你会在项目中看到一些错误标记来解决项目属性和java构建路径,从那里删除所有库。您不会再次看到此错误。 :)
答案 15 :(得分:0)
您的MainActivity.java被排除在编译之外,因此该类不包含在.apk中。删除行:
<file url="file://$PROJECT_DIR$/src/nl/test/MyApp.java" />
来自.idea / compiler.xml文件的excludeFromCompile部分(或者您可以从IDE设置执行此操作)。
答案 16 :(得分:0)
看起来你某处有命名空间错字。搜索MyApp
并将其更改为myapp
。
答案 17 :(得分:0)
try:
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>