Android - 无法实例化活动

5
我目前使用Android Studio开发我的自用Android项目(自定义启动器)!问题在于,自从上次更新(版本为0.4.0)后,我无法运行我的应用程序。相反,我收到以下错误信息:
FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.natercio.myhome/com.natercio.myhome.Launcher}: java.lang.ClassNotFoundException: Didn't find class "com.natercio.myhome.Launcher" on path: DexPathList[[zip file "/data/app/com.natercio.myhome-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.natercio.myhome-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 "com.natercio.myhome.Launcher" on path: DexPathList[[zip file "/data/app/com.natercio.myhome-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.natercio.myhome-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)

我已经在我所能想到的所有地方搜索了解决方案(或相关内容),并尝试了很多方法,但都没有成功。

  • 检查 "compiler.xml" 文件(没有排除任何内容)
  • 清理/构建(错误仍然存在)
  • 检查 "AndroidManifest.xml" 文件(一切看起来都正确)
  • 重新创建整个项目(只导入代码和资源,但错误仍然存在)

我注意到这行代码中的一个问题

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.natercio.myhome.Launcher" on path: DexPathList[[zip file "/data/app/com.natercio.myhome-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.natercio.myhome-2, /system/lib]]

在应用程序的名称中,有一个"-2"(有时是"-1")附加在应用程序的名称中(在apk文件和lib路径中都有),但我以前从未注意过,所以我不能确定这是否与我的问题有关。请注意,我使用git,并已尝试还原任何更改到之前的稳定提交之一。
更新:有其他人在Android Studio遇到过这个问题吗?还有没有其他解决此类错误的解决方案,我错过了,或者这可能是最新的android插件中的某个bug。
更新(build.gradle和清单文件):
build.gradle:
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.7.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 18
    buildToolsVersion '18.1.1'

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:+'
    compile 'com.android.support:support-v13:+'
    compile 'com.j256.ormlite:ormlite-android:4.47'
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.natercio.myhome"
          android:versionName="@string/app_version_name">

    <uses-sdk android:targetSdkVersion="17"
              android:minSdkVersion="15"/>

    <uses-permission android:name="android.permission.SET_WALLPAPER"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/Theme.Launcher">

        <service android:name=".profiler.ProfilerService"
                 android:exported="false"/>

        <activity android:name=".Launcher"
                  android:screenOrientation="portrait"
                  android:launchMode="singleTask"
                  android:description="@string/app_description">

            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.HOME"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>

        </activity>

    </application>

</manifest>

你能否提供更多关于你的项目布局的细节,并包含你的build.gradle文件? - Scott Barta
@ScottBarta 我已经包含了更多的细节!如果你需要更多的细节,只需说一声。 - prototyp3PT
我在更新到0.4.0版本后遇到了同样的问题。每次更新Android Studio时,我都会想为什么要用它来进行生产工作。 :) - Brian
6个回答

2

我在将Android Studio升级到0.4.0版本后也遇到了同样的问题。虽然看起来很简单,但我的解决方法是删除整个/build文件夹(即在0.4.0更新之前创建的那个文件夹),然后重新构建。


2

0

检查您的项目设置 -> 模块 -> 您的项目名称 -> 源

确保您的 src 和 res 列表在右边的框架上 (命名为添加内容根目录,res 为资源文件夹,src 为源文件夹)

或者您的项目可能会遇到一些错误,愚蠢的 Android Studio 仍然会将错误的 APK 放在您的设备上运行,当然会出现错误。


0

在 Android Studio 进行了一些更新后,问题自行解决了!


0
错误提示说明您的项目中使用了某个库的多个副本。进入“项目结构”->“模块”,检查“target”或“apk-libs”文件夹,看看Android Studio是否提取了多个副本。我在Android Studio中遇到了同样的错误,结果发现Studio在“target”文件夹中生成了一个名为“unpack”的新文件夹,导致了问题。

我在你提到的菜单中找不到任何相关的信息!相反,我看到了这些选项卡:属性、签名、风味、构建类型和依赖项(最后一个选项卡中没有重复的条目)。 - prototyp3PT
分发网址是什么? - user2511882
distributionUrl=http://services.gradle.org/distributions/gradle-1.9-all.zip - prototyp3PT

0

这里的-2或-1是来自拥有多个副本吗?根据我的经验,至少是这样的。但你在这里具体的问题是什么呢?


我已经更新了帖子! 你说“-#”代表多个副本,但是具体是什么和在哪里(设备还是开发机器)? - prototyp3PT
开发机。如果您没有放置它,那么该程序可能正在使用某种命名约定来处理同名的多个文件。 - Learning2network

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接