Java dex文件不包含MainActivity类
运行我的应用程序时,我遇到以下错误:Java dex文件不包含MainActivity类,java,android,android-studio,gradle,dex,Java,Android,Android Studio,Gradle,Dex,运行我的应用程序时,我遇到以下错误: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.name.app/com.name.app.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.name.app.MainActivity" on path: DexPathList[[zip file
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.name.app/com.name.app.MainActivity}:
java.lang.ClassNotFoundException: Didn't find class "com.name.app.MainActivity" on path:
DexPathList[[zip file "/data/app/com.name.app-2/base.apk"],
nativeLibraryDirectories=[/vendor/lib, /system/lib]]
我已经使用Android Studio apk analyzer(构建>分析apk)来分析我的apk(app/Build/outputs/apk/debug/app debug.apk)和类的结构
java/
lang/*
util/*
io/*
com/google/devtools/build/...
我注意到我自己的课程,以及主要的活动,都不见了。
因为就我所理解的dex文件而言(从这个问题来看),我自己的类也应该存在。
由于它们不在那里,我明白了为什么会出现找不到我的类的错误
我在自己的设备上(三星、棒棒糖5.0.2、API 21)和虚拟设备上(谷歌像素、Oreo 8.0.0、API 26)都出现了这个错误
我尝试过的
我在谷歌上搜索了很多建议,但没有一个对我有用。
这些建议是:
- 禁用即时运行。文件>设置>生成、执行、部署>即时运行>取消选中即时运行
- 清理项目。构建>清理。然后重建项目,构建>重建
- 使缓存无效/重新启动
- 从设备卸载应用程序,然后重试
- 在
清单
中使用不同的路径命名。将activity
标记中的android:name=“.MainActivity”
更改为android:name=“com.name.app.MainActivity”
- 禁用预索引,如回答中所示
将以下内容添加到build.gradle
dexOptions {
preDexLibraries false
}
- 启用多索引,然后是链接。首先在
build.gradle
中启用多索引,然后将MultiDexApplication
添加到我的清单中。我的main活动
扩展了AppCompatActivity
(因此它不扩展应用程序
)
启用multidex会产生类似的错误:
java.lang.RuntimeException: Unable to instantiate application android.support.multidex.MultiDexApplication:
java.lang.ClassNotFoundException: Didn't find class "android.support.multidex.MultiDexApplication" on path:
DexPathList[...]
下面是启用multidex的新增功能
格雷德尔先生
舱单(仅相关部分)
更新
我正在使用Android Studio 3.1.3。我曾尝试使用另一台笔记本电脑运行我的应用程序(通过版本控制,使用Android Studio 3.1.3),但没有出现错误。由于文件完全相同,我怀疑我的Android Studio设置有问题
删除Android Studio及其所有设置,然后从下载并安装Android Studio并没有解决问题。我的文件夹的结构是
.gradle/
.idea/
app/
build/
src/main
gen/
java/
res/
build/
gradle/
gen
文件夹不应在此。
此文件夹包含生成的文件,如R.java
。
这些文件也(尽管正确)存在于app/build/generated/source/*
中。
只需删除gen
文件夹并清理项目即可解决问题
我不知道那gen
文件夹是如何在那里结束的,因为我从磁盘中删除了该项目,并多次克隆了git存储库(没有这个文件夹)。
一旦我发现它是如何出现的,我将更新此答案。您的mainactivity类是否为kotlin类?希望您的com.name.app.mainactivity已在清单中定义。xml@NiravBhavsar不,我的主要活动是Java类。我还有其他Kotlin类。@Sreehari是的,当然是。@cricket_007是在模拟器上的。只要在物理设备上运行它,这条路径就更有意义了。我将编辑这个问题以避免混淆。这不是一个全新的项目,而是我正在改进的前一个项目(大约一年后,当它第一次“完成”时),并慢慢地将Java转换为Kotlin。我们最近将Gradle升级到了4.7,所以这可能与它有关(尽管我记得它可以很好地工作)。
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:design:26.1.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-simplexml:2.3.0'
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
testImplementation 'org.junit.platform:junit-platform-engine:1.2.0'
testImplementation 'org.jetbrains.spek:spek-api:1.1.5'
testImplementation 'org.jetbrains.spek:spek-junit-platform-engine:1.1.5'
}
.gradle/
.idea/
app/
build/
src/main
gen/
java/
res/
build/
gradle/