gpt4 book ai didi

java - dex 文件不包含 MainActivity 类

转载 作者:行者123 更新时间:2023-12-01 17:15:03 35 4
gpt4 key购买 nike

运行我的应用程序时出现以下错误:

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< 的结构

java/
lang/*
util/*
io/*
com/google/devtools/build/...

我注意到我自己的类以及 MainActivity 都丢失了。据我了解 dex 文件(来自 this SO 问题),我自己的类也应该在那里。由于它们不在那里,我明白为什么我收到找不到我的类的错误。

我在自己的设备上遇到此错误:Samsung、Lollipop 5.0.2、API 21,在虚拟设备上遇到此错误:Google Pixel、Oreo 8.0.0、API 26。

我尝试过的

我用谷歌搜索并找到了多个建议,但没有一个对我有用。这些建议是:

  • 禁用即时运行。文件 > 设置 > 构建、执行、部署 > 即时运行 > 取消选中即时运行。

  • 清理项目。构建 > 清理。然后重建项目,Build > Rebuild。

  • 使缓存无效/重新启动。

  • 从设备中卸载应用程序,然后重试。

  • list 中使用不同的路径命名。将 activity 标记中的 android:name=".MainActivity" 更改为 android:name="com.name.app.MainActivity"

  • 禁用预索引,如this回答。

将以下内容添加到build.gradle

dexOptions {
preDexLibraries false
}
  • 启用多重索引,已关注 this关联。首先在 build.gradle 中启用 multidex,然后将 MultiDexApplication 添加到我的 list 中。我的 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'
}

list (仅相关部分)

<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没有解决问题。

最佳答案

我的文件夹的结构是

.gradle/
.idea/
app/
build/
src/main
gen/
java/
res/
build/
gradle/

gen 文件夹不应位于此处。该文件夹包含生成的文件,例如 R.java。这些文件也在 app/build/generated/source/* 中(但正确)。只需删除 gen 文件夹并清理项目即可解决问题。

我不知道 gen 文件夹是如何结束的,因为我从磁盘中删除了该项目并多次克隆了 git 存储库(没有此文件夹)。一旦我知道它是如何到达那里的,我就会更新这个答案。

关于java - dex 文件不包含 MainActivity 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51245439/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com