运行我的应用程序时,出现以下错误:
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分析器(“构建”>“分析APK”)分析我的apk(“ app / build / outputs / apk / debug / app-debug.apk”),classes.dex
的结构为< / p>
java/
lang/*
util/*
io/*
com/google/devtools/build/...
我注意到自己的类以及MainActivity都丢失了。 就我所了解的dex文件(来自this问题)而言,我自己的类也应该存在。 因为他们不在,所以我明白了为什么我得到找不到我的班级的错误。
我在自己的设备:Samsung,Lollipop 5.0.2,API 21和虚拟设备:Google Pixel,Oreo 8.0.0,API 26上收到此错误。
我尝试过的事情
我在Google上搜索并找到了多个建议,但没有一个对我有用。 这些建议是:
禁用即时运行。文件>设置>构建,执行,部署>即时运行>取消选中即时运行。
清理项目。生成>清理。然后重建项目,依次选择Build> Rebuild。
使缓存无效/重启。
从设备上卸载应用程序,然后重试。
在Manifest
中使用不同的路径命名。在android:name=".MainActivity"
标签中将android:name="com.name.app.MainActivity"
更改为activity
。
禁用预删除,如this答案。
在build.gradle
dexOptions {
preDexLibraries false
}
build.gradle
中启用multidex,然后将MultiDexApplication
添加到清单中。我的MainActivity
扩展了AppCompatActivity
(因此它没有扩展Application
)。启用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的新增功能。
build.gradle
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
}
清单(只是相关部分)
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
备注 还有与图书馆相关的建议,请参见this答案。 但是,这是针对Eclipse的,我不确定是否可以解决我的问题。 Gradle应该处理所有依赖关系,对吗? 以防万一,这是我在Gradle(Kotlin版本1.2.51)中列出所有依赖项的方式:
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'
}
更新
我正在使用Android Studio 3.1.3。我尝试使用另一台笔记本电脑(通过版本控制,使用Android Studio 3.1.3)运行我的应用程序,但未出现错误。由于文件完全相同,我怀疑Android Studio设置有问题。
删除Android Studio及其所有设置,然后从here下载并安装Android Studio并不能解决问题。
答案 0 :(得分:0)
我的文件夹的结构是
.gradle/
.idea/
app/
build/
src/main
gen/
java/
res/
build/
gradle/
gen
文件夹不应在此处。
该文件夹包含生成的文件,例如R.java
。
这些文件也(但正确)在app/build/generated/source/*
中。
只需删除gen
文件夹并清理项目即可解决问题。
我不知道那个gen
文件夹是怎么结束的,因为我从磁盘上删除了项目,并多次克隆了git存储库(没有该文件夹)。
一旦找到答案,便会更新此答案。