Android设备无法实例启动活动 [英] Android device can't instantiate launcher activity

查看:107
本文介绍了Android设备无法实例启动活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试在我的手机上运行我目前的Andr​​oid项目,在成功构建和部署它,我收到此错误:

  E / AndroidRuntime(15869):致命异常:主要
E / AndroidRuntime(15869):工艺:org.hello,PID:15869
E / AndroidRuntime(15869):java.lang.RuntimeException的:无法实例活动ComponentInfo {org.hello / org.hello.MainActivity}:抛出java.lang.ClassNotFoundException:没有找到类org.hello.MainActivity的路径:DexPathList [zip文件/data/app/org.hello-1.apk"],nativeLibraryDirectories=[/data/app-lib/org.hello-1,/供应商/ lib中/系统/ lib目录]
E / AndroidRuntime(15869):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2124)
E / AndroidRuntime(15869):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
E / AndroidRuntime(15869):在android.app.ActivityThread.access $ 800(ActivityThread.java:139)
E / AndroidRuntime(15869):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1210)
E / AndroidRuntime(15869):在android.os.Handler.dispatchMessage(Handler.java:102)
E / AndroidRuntime(15869):在android.os.Looper.loop(Looper.java:136)
E / AndroidRuntime(15869):在android.app.ActivityThread.main(ActivityThread.java:5086)
E / AndroidRuntime(15869):在java.lang.reflect.Method.invokeNative(本机方法)
E / AndroidRuntime(15869):在java.lang.reflect.Method.invoke(Method.java:515)
E / AndroidRuntime(15869):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
E / AndroidRuntime(15869):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
E / AndroidRuntime(15869):在dalvik.system.NativeStart.main(本机方法)
E / AndroidRuntime(15869):抛出java.lang.ClassNotFoundException:产生的原因没有找到类org.hello.MainActivity的路径:DexPathList [zip文件/data/app/org.hello-1.apk ],nativeLibraryDirectories = [/数据/应用-LIB / org.hello-1 /供应商/ lib中/系统/ lib目录]
E / AndroidRuntime(15869):在dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E / AndroidRuntime(15869):在java.lang.ClassLoader.loadClass(ClassLoader.java:497)
E / AndroidRuntime(15869):在java.lang.ClassLoader.loadClass(ClassLoader.java:457)
E / AndroidRuntime(15869):在android.app.Instrumentation.newActivity(Instrumentation.java:1084)
E / AndroidRuntime(15869):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115)
E / AndroidRuntime(15869):11 ...更多
W / ActivityManager(916):强制完成活动org.hello / .MainActivity
 

我的Andr​​oidManifest.xml是:

 < XML版本=1.0编码=UTF-8&GT?;
<舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=org.hello
    安卓版code =1
    机器人:VERSIONNAME =1.0>

    <用途-SDK
        安卓的minSdkVersion =11
        机器人:targetSdkVersion =21/>

    <应用
        机器人:allowBackup =真
        机器人:图标=@可绘制/ ic_launcher
        机器人:标签=@字符串/ APP_NAME
        机器人:主题=@风格/ AppTheme>
        <活动
            机器人:名称=。MainActivity
            机器人:标签=@字符串/ title_activity_main>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>
                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
    < /用途>

< /舱单>
 

主要活动是这样的:

 公共类MainActivity扩展FragmentActivity {
    //片段TabHost作为mTabHost
    私人FragmentTabHost mTab​​Host;

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);

        mTabHost =(FragmentTabHost)findViewById(android.R.id.tabhost);
        mTabHost.setup(这一点,getSupportFragmentManager(),R.id.realtabcontent);

        mTabHost.addTab(mTabHost.newTabSpec(TAB1)setIndicator(TAB1),Tab1Fragment.class,空);
        mTabHost.addTab(mTabHost.newTabSpec(TAB2)setIndicator(TAB2),Tab2Fragment.class,空);
        mTabHost.addTab(mTabHost.newTabSpec(TAB3)setIndicator(TAB3),Tab3Fragment.class,空);
    }
}
 

和源$ C ​​$ C这个类和其他人都被放在目录的src /主/爪哇/组织/你好,从我的项目。

任何人都知道是什么原因造成这个错误?

更新1

我的pom.xml:

 < XML版本=1.0编码=UTF-8&GT?;
<项目的xmlns =htt​​p://maven.apache.org/POM/4.0.0的xmlns:XSI =htt​​p://www.w3.org/2001/XMLSchema-instance
    XSI:的schemaLocation =htt​​p://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    < modelVersion> 4.0.0< / modelVersion>
    <的groupId> org.hello< /的groupId>
    < artifactId的>基本-标签< / artifactId的>
    <版> 0.1.0< /版本>
    <包装> APK< /包装>

    <性状>
        <! - 使用UTF-8的一切 - >
        < project.build.sourceEncoding> UTF-8< /project.build.sourceEncoding>
        < project.reporting.outputEncoding> UTF-8< /project.reporting.outputEncoding>
        < android.sdk.path>的/ home /克莱伯/ Android的SDK-Linux的/< /android.sdk.path>
    < /性状>

    <依赖>
        <依赖>
            <的groupId> com.google.android< /的groupId>
            < artifactId的>的android< / artifactId的>
            <版> 4.1.1.4< /版本>
            <范围>提供与LT; /范围>
        < /依赖性>
        <依赖>
           <的groupId> com.google.android< /的groupId>
           < artifactId的>支持-V4< / artifactId的>
           <版> 20.0.0< /版本>
           <范围>系统< /范围>
           <systemPath>/home/kleber/android-sdk-linux/extras/android/support/v4/android-support-v4.jar</systemPath>
        &LT; /依赖性&GT;
    &LT; /依赖性&GT;

    &LT;建立&GT;
        &LT;插件&GT;
            &LT;插件&GT;
                &LT;的groupId&GT; com.jayway.maven.plugins.android.generation2&LT; /的groupId&GT;
                &LT; artifactId的&GT; Android的行家,插件和LT; / artifactId的&GT;
                &LT;版&GT; 3.9.0-RC.1&LT; /版本&GT;
                &lt;结构&GT;
                    &LT; SDK&GT;
                        &LT;平台&GT; 19&LT; /平台&GT;
                    &LT; / SDK&GT;
                    &LT; deleteConflictingFiles&GT;真&LT; / deleteConflictingFiles&GT;
                    &LT; undeployBeforeDeploy&GT;真&LT; / undeployBeforeDeploy&GT;
                &LT; /结构&gt;
                &LT;扩展&GT;真&LT; /扩展&GT;
            &LT; /插件&GT;
            &LT;插件&GT;
                &LT;的groupId&GT; org.apache.maven.plugins&LT; /的groupId&GT;
                &LT; artifactId的&GT; Maven的编译器插件&LT; / artifactId的&GT;
                &LT;版&GT; 3.1&LT; /版本&GT;
                &lt;结构&GT;
                    &lt;信源&GT; 1.7&LT; /源&GT;
                    &lt;目标&GT; 1.7&LT; /目标和GT;
                    &LT; showDe precation&GT;真&LT; / showDe precation&GT;
                    &LT; showWarnings&GT;真&LT; / showWarnings&GT;
                    &LT;可执行&GT; /home/kleber/jdk1.7.0_55/bin/javac< /可执行&GT;
                    &LT;叉&GT;真&LT; /前叉&GT;
                &LT; /结构&gt;
            &LT; /插件&GT;
        &LT; /插件&GT;
    &LT; /编译&GT;

&LT; /项目&GT;
 

解决方案

我相信你没有正确设置Java源代码和资源文件夹,所以Maven不找他们,他们应该到的地方。默认情况下行家假设源文件夹是在 / src目录,这将使编译类 main.java.org.hello.MainActivity ,这就是为什么它不能被发现。

您应该增加像这样的东西你的Maven构建文件:

 &LT;建立&GT;
    &LT; sourceDirectory&GT;的src / main / java目录&LT; / sourceDirectory&GT;
    &LT;资源&GT;
      &LT;资源&GT;
        &LT;目录&GT;钢骨混凝土/主/ RES&LT; /目录&GT;
      &LT; /资源&GT;
    &LT; /资源&GT;
&LT; /编译&GT;
 

请参阅完整的答案:<一href="http://stackoverflow.com/questions/4955359/changing-the-maven-structure-src-java-to-src-javasource">Changing Maven的结构(SRC / Java中的src /的JavaSource)

When I try run my current android project on my phone, after successfully build and deploy it, I am getting this error:

E/AndroidRuntime(15869): FATAL EXCEPTION: main
E/AndroidRuntime(15869): Process: org.hello, PID: 15869
E/AndroidRuntime(15869): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.hello/org.hello.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "org.hello.MainActivity" on path: DexPathList[[zip file "/data/app/org.hello-1.apk"],nativeLibraryDirectories=[/data/app-lib/org.hello-1, /vendor/lib, /system/lib]]
E/AndroidRuntime(15869):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2124)
E/AndroidRuntime(15869):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
E/AndroidRuntime(15869):        at android.app.ActivityThread.access$800(ActivityThread.java:139)
E/AndroidRuntime(15869):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
E/AndroidRuntime(15869):        at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(15869):        at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(15869):        at android.app.ActivityThread.main(ActivityThread.java:5086)
E/AndroidRuntime(15869):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(15869):        at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(15869):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
E/AndroidRuntime(15869):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
E/AndroidRuntime(15869):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(15869): Caused by: java.lang.ClassNotFoundException: Didn't find class "org.hello.MainActivity" on path: DexPathList[[zip file "/data/app/org.hello-1.apk"],nativeLibraryDirectories=[/data/app-lib/org.hello-1, /vendor/lib, /system/lib]]
E/AndroidRuntime(15869):        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/AndroidRuntime(15869):        at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
E/AndroidRuntime(15869):        at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
E/AndroidRuntime(15869):        at android.app.Instrumentation.newActivity(Instrumentation.java:1084)
E/AndroidRuntime(15869):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115)
E/AndroidRuntime(15869):        ... 11 more
W/ActivityManager(  916):   Force finishing activity org.hello/.MainActivity

My AndroidManifest.xml is that:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.hello"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

the main activity is this:

public class MainActivity extends FragmentActivity {
    // Fragment TabHost as mTabHost
    private FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

        mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab1"), Tab1Fragment.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"), Tab2Fragment.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator("Tab3"), Tab3Fragment.class, null);
    }
}

and the source code for this class and others are all placed in the directory src/main/java/org/hello from my project.

Anyone knows what is causing this error?

UPDATE 1

my pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.hello</groupId>
    <artifactId>basic-tabs</artifactId>
    <version>0.1.0</version>
    <packaging>apk</packaging>

    <properties>
        <!-- use UTF-8 for everything -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <android.sdk.path>/home/kleber/android-sdk-linux/</android.sdk.path>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>4.1.1.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
           <groupId>com.google.android</groupId>
           <artifactId>support-v4</artifactId>
           <version>20.0.0</version>
           <scope>system</scope>
           <systemPath>/home/kleber/android-sdk-linux/extras/android/support/v4/android-support-v4.jar</systemPath>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <version>3.9.0-rc.1</version>
                <configuration>
                    <sdk>
                        <platform>19</platform>
                    </sdk>
                    <deleteConflictingFiles>true</deleteConflictingFiles>
                    <undeployBeforeDeploy>true</undeployBeforeDeploy>
                </configuration>
                <extensions>true</extensions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <showDeprecation>true</showDeprecation>
                    <showWarnings>true</showWarnings>
                    <executable>/home/kleber/jdk1.7.0_55/bin/javac</executable>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

解决方案

I believe you did not properly set up the java source and resource folder, so maven does not find them in the places where they are supposed to. By default maven assumes the source folder is in /src, which would make compile your class to main.java.org.hello.MainActivity and this is why it cannot be found.

You should add something like this to your maven build file:

<build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <resources>
      <resource>
        <directory>src/main/res</directory>
      </resource>
    </resources>
</build>

see full answer: Changing the Maven structure ( src/java to src/Javasource)

这篇关于Android设备无法实例启动活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆