无法使用兼容包 v4 解决在 Android 2.3.3 上运行的 FragmentActivity

Posted

技术标签:

【中文标题】无法使用兼容包 v4 解决在 Android 2.3.3 上运行的 FragmentActivity【英文标题】:Unable to resolve FragmentActivity running on Android 2.3.3 with compatibility package v4 【发布时间】:2011-12-06 08:37:14 【问题描述】:

我正在构建一个简单的 hello world 应用来了解 android 兼容包。我能够让应用程序在 3.2 模拟器上运行,但是当我在 2.3.3 模拟器上运行它时,我得到了

10-12 11:36:14.474: WARN/dalvikvm(469): Unable to resolve superclass of Lcom/example/MyActivity; (11) 
10-12 11:36:14.564: WARN/dalvikvm(469): Link of class 'Lcom/example/MyActivity;' failed 
10-12 11:36:14.564: DEBUG/AndroidRuntime(469): Shutting down VM 
10-12 11:36:14.584: WARN/dalvikvm(469): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
10-12 11:36:14.624: ERROR/AndroidRuntime(469): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to instantiate activity ComponentInfocom.example/com.example.MyActivity: java.lang.ClassNotFoundException: com.example.MyActivity in loader dalvik.system.PathClassLoader[/data/app/com.example-1.apk]

所以显然它找不到 FragmentActivity(它是 com.example.MyActivity 的超级)。我只是不知道为什么。

注意事项:

1) 我正在关注http://mobile.tutsplus.com/tutorials/android/android-compatibility-working-with-fragments/ 的教程,这不是很彻底。

2) 我很确定我正在使用 maven 正确地将兼容性包构建到 APK 中。我将 jar 安装在我的本地 maven 存储库中,并依赖它进行编译。我认为如果我没有正确构建它,它就不会在 3.2 模拟器上运行。

3) 我尝试使用 IntelliJ 和 maven-compiler-plugin 进行构建。结果一样。

任何帮助将不胜感激。谢谢。

编辑... 这是清单

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="11" />
<uses-permission android:name="android.permission.INTERNET" />

<application android:label="@string/app_name" android:icon="@drawable/icon">
    <activity android:name=".MyActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".TutViewerActivity"
              android:label="@string/app_name" >
    </activity>
</application>
<uses-sdk android:minSdkVersion="7" />

和 MyActivity 定义

public class MyActivity extends FragmentActivity implements TutListFragment.OnTutSelectedListener

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,问题是兼容性包没有正确包含。异常是模棱两可的,因为它说它找不到 MyActivity,但完整的堆栈跟踪将显示它无法链接的 FragmentActivity。检查范围,并确保您的存储库中存在正确的版本,并且确实在构建时包含它。

如果您仍然遇到此问题,请尝试在此处包含您的 pom.xml。

【讨论】:

我也遇到了这个问题。我找到了你的评论,丹,按照你说的做了。右键单击项目,Android 工具,添加支持库。成功了! 感谢 Davek804,我已经为这个问题生气了这么多天了。不知道ADT团队有没有针对这件事情发表过官方声明!!! 是的,也请查看answer。导出构建路径中未选中的私有依赖项可能是一个问题。【参考方案2】:

我遇到了同样的问题,兼容性包没有正确内置到 apk 中。为此,您可以使用以下步骤:

来自developer.android.com:

要将其中一个库添加到您的 Android 项目:

In your Android project, create a directory named libs at the root of your project (next to src/, res/, etc.)
Locate the JAR file for the library you want to use and copy it into the libs/ directory.

For example, the library that supports API level 4 and up is located at <sdk>/extras/android/support/v4/android-support-v4.jar.
Add the JAR to your project build path.

In Eclipse, right-click the JAR file in the Package Explorer, select Build Path > Add to Build Path.

【讨论】:

【参考方案3】:

将以下内容添加到 MyActivity 的导入中:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;

即使你没有使用这些类。

【讨论】:

以上是关于无法使用兼容包 v4 解决在 Android 2.3.3 上运行的 FragmentActivity的主要内容,如果未能解决你的问题,请参考以下文章

Android 支持包/兼容性库 - 使用 v4 还是 v13?

使用 android.support.v4.app 蜂窝兼容包导出签名应用时出现 Proguard 错误

Android Support v4,v7,v13的区别和应用场景

我可以使用兼容包 v4 创建 Fragment ListActivity 吗?

Android Support v4,v7,v13的区别和应用场景

兔子--Android Support v4包丢失的解决的方法