【问题标题】:Can't find class MainActivity (imported project)找不到类 MainActivity(导入的项目)
【发布时间】:2013-07-15 06:03:50
【问题描述】:

于是我导入了一个android项目,挣扎了一阵子终于完成了,我编译了这个应用程序,它崩溃了。

这是 logcat 文件:

07-16 23:02:23.700: E/AndroidRuntime(23092): FATAL EXCEPTION: main
07-16 23:02:23.700: E/AndroidRuntime(23092): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{si.dvanadva.evanturist/si.dvanadva.evanturist.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "si.dvanadva.evanturist.MainActivity" on path: /data/app/si.dvanadva.evanturist-2.apk
07-16 23:02:23.700: E/AndroidRuntime(23092):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at android.os.Looper.loop(Looper.java:137)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at android.app.ActivityThread.main(ActivityThread.java:5041)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at java.lang.reflect.Method.invokeNative(Native Method)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at java.lang.reflect.Method.invoke(Method.java:511)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at dalvik.system.NativeStart.main(Native Method)
07-16 23:02:23.700: E/AndroidRuntime(23092): Caused by: java.lang.ClassNotFoundException: Didn't find class "si.dvanadva.evanturist.MainActivity" on path: /data/app/si.dvanadva.evanturist-2.apk
07-16 23:02:23.700: E/AndroidRuntime(23092):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
07-16 23:02:23.700: E/AndroidRuntime(23092):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)

从这一行可以看出:

07-16 23:02:23.700: E/AndroidRuntime(23092): Caused by: java.lang.ClassNotFoundException: Didn't find class "si.dvanadva.evanturist.MainActivity" on path: /data/app/si.dvanadva.evanturist-2.apk

发现 MainActivity 类有问题。但为什么呢?

这是我导入项目的方式:

  • 导入的原始项目(不含库)

  • 在项目的 libs 文件夹中添加了 jars

  • 为 jar 添加了缺失的构建路径

  • 导入三个库项目(原项目检测到)

这三个库项目都与原始项目在同一个文件夹中(以防我放错了)

如果您需要任何其他信息,请告诉我,我需要解决这个问题

包及其内容:

AndroidManifest 完整代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="si.dvanadva.evanturist"
android:versionCode="7"
android:versionName="1.1.2" 
android:installLocation="preferExternal">

<!-- ZA MAPE -->
<permission
    android:name="com.dd.evanturist.permission.MAPS_RECEIVE"
    android:protectionLevel="signature"/>
<uses-permission android:name="com.dd.evanturist.permission.MAPS_RECEIVE"/>

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
  <!-- External storage for caching. -->
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <!-- My Location -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  <!-- Maps API needs OpenGL ES 2.0. -->
  <uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>
  <!-- End of copy. -->

<!-- QR STUFF -->

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>

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

<application
    android:allowBackup="true"
    android:name=".MyApplication"
    android:icon="@drawable/ic_launcher"
    android:label="@string/evanturist"
    android:theme="@style/AppTheme" >
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AIzaSyDK5zGCwh3awW08BOAwupjU4hw8750WuLM"/>
    <activity
        android:name=".MainActivity"
        android:label="@string/evanturist" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".DBActivity"></activity>
    <activity android:name=".DbTestActivity"></activity>
    <activity android:name=".PlaceItemActivity"></activity>
    <activity android:name=".CheckpointsActivity"></activity>
    <activity android:name=".OptionsActivity"></activity>
    <activity android:name=".MapDirectionsActivity"></activity>
    <activity android:name=".VictoryActivity"></activity>
    <activity android:name=".QrActivity"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"></activity>
    <activity android:name=".QrPortraitActivity"
        android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar"></activity>

</application>

构建路径中的导出选项卡:

【问题讨论】:

  • 带有兼容包的Eclipse?
  • @gunar 对不起,我不太明白你的问题。我正在使用eclipse,但你是什么意思?
  • 您的MainActivity 扩展自ActivityFragmentActivity
  • @gunar FragmentActivity
  • 我猜你没有任何编译错误,对吧?

标签: java android eclipse import logcat


【解决方案1】:

问题解决了!!

整个问题是由 Google Play Services 库项目引起的。当有人发给我这个项目时,他还附上了项目所需的所有三个库项目。然后我直接从他发给我的文件中添加了所有三个库项目。

现在的问题是,您总是需要从 SDK 下载位置添加 google play 服务(而不是从其他任何地方 - 外部来源),所以我只是删除了当前的 google play 服务并添加了我使用 SDK 管理器下载的服务问题就解决了。

【讨论】:

    【解决方案2】:

    1) 将所有活动保存在同一个包下[比如 com.compname.proj.views]。

    2) 确保在清单中,包属性设置为上述包[即 com.compname.proj.views]。

    3) 在清单中,在所有活动标签下,确保 android:name 属性具有与以下模式匹配的值:

        android:name=".<your activity class name>"
    

    例如:android:name=".SomeActivity"

    我的观点是,清单活动声明不要使用包名+活动类名。

    一旦你确定以上几点,如果问题仍然存在,那么:

    1. 删除 bin 文件夹。

    2. 重建您的项目并运行。

    【讨论】:

    • 感谢您的回答!我有三个包,但清单文件中只声明了主包中的活动。我确实将清单声明更改为 .activityname (我删除了包名称),但它不起作用。我还尝试删除 bin 和清理项目,但错误仍然存​​在。请查看我已编辑的原始帖子,其中我发布了所有包及其内容和清单文件的图片。
    • 如果您的设备/模拟器中有以前版本的 apk,请卸载并安装最新版本的最新版本。从崩溃日志 /data/app/si.dvanadva.evanturist-2.apk 表明系统中有 2 个构建(apks)。此外,在构建应用程序时,您的项目设置/配置可能尚未生效。这可能是由于 eclipse 缓存了项目属性。
    • 我尝试删除以前的版本并安装最新版本,但没有成功。如何解决 2 个构建和设置/配置的问题?还请检查我的新编辑,我在构建路径中发布了导出选项卡的屏幕截图,也许问题存在?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多