实现ActionBar支持v7库后,Android 2.3及以上版本的应用程序崩溃。

4
我已经成功在Eclipse中创建了一个应用程序,并且它适用于Android 4.0及以上版本。现在我想使它也兼容Android 2.3及以上版本。在我的应用程序中,我使用了操作栏,因此我在我的工作区中将android-support-v7-appcompat库项目添加到了我的工作集中。按照http://developer.android.com/tools/support-library/setup.html的说明后,现在我的项目的Android私有库部分下有'android-support--v7-appcompat.jar'和'android-support-v4.jar'。同时,我还将jar文件放在了我的项目的libs文件夹中。
在我的主活动中,我已经导入了:
import android.support.v7.app.ActionBarActivity;
    import android.support.v7.app.ActionBar;

在AndroidManifest.xml文件中,我已经声明:
<application android:allowBackup="true" 

    android:theme="@style/Theme.AppCompat"

此外,对于不同的活动,声明如下:
 <activity android:
                 android:uiOptions="splitActionBarWhenNarrow"

之前我的 AndroidManifest.xml 文件是这样的:

<application android:allowBackup="true" 

        android:theme="@style/<theme>"

res>values文件夹下的styles.xml文件如下所示:

    <resources xmlns:android="http://schemas.android.com/apk/res/android">

       <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
       -->
       <style name="<base>" parent="android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
        </style>

        <!-- Application theme. -->
       <style name="<theme>" parent="<base>">
        <!-- All customizations that are NOT specific to a particular API-level can go      here. -->
    </style>

</resources>

使用过的

  <style name="<base>" parent="android:Theme.Holo.Light">
            <!-- API 11 theme customizations can go here. -->
        </style> 

在 values-v11 文件夹中和

<style name="<base>" parent="android:Theme.Holo.Light.DarkActionBar">
            <!-- API 11 theme customizations can go here. -->
        </style> 

在values-v14文件夹中。

我现在已经将库项目中的所有styles_base.xml和themes_base.xml文件包含到我的项目中。同时,通过替换Theme,改变了styles.xml文件。

每次运行应用程序时,我都会遇到崩溃,甚至对于4.0及更高版本的Android也是如此。错误信息:

 java.main.NoClassDefFounderError: android.support.v7.appcompat.R$styleable
    at android.support.v7.app.ActionBarActivityDelegate.onCreate

请帮忙。
1个回答

4
请确保在项目属性 -> Java Build Path --> Order and Export 部分勾选了兼容库,如下所示:

enter image description here

否则,它们将不会包含在生成的APK中。

编辑:

我认为你应该重新开始,因为你真的不应该向自己的项目添加这些来自支持库的XMLs。

  1. 删除所有来自支持库的XMLs和JARs
  2. 根据您提供的链接重新建立一个Android库项目(按照“添加具有资源的库”说明进行)
  3. 将Android库项目添加到您的项目中
  4. 清理并重新构建项目

我已经检查了项目属性-> Java Build Path-> Order and Export 部分。android-support-v4.jar和android-support-v7-appcompat.jar文件都在那里。但是每个jar文件都出现了两次。一个显示位置为我的项目libs,另一个显示为我下载库项目的位置。还有一件事,这些jar文件中没有一个被选中,只有Android Dependencies被选中。我需要在这里做出任何更改吗? - MSIslam
我很惊讶居然没有因为有两个相同库的实例而出现错误。你应该尝试:1. 删除重复项,只保留一个实例;2. 检查它们两个;3. 清理并运行项目。 - Kai
谢谢你的建议。在删除jar文件之前,我想确认一下,在我的项目中,我有以下两种类型的jar文件:一个是属于Android Private Libraries部分的jar文件,另一个是存放在我的项目libs文件夹中的jar文件。请问我应该删除哪个?此外,我需要在 Project Properties -> Java Build Path --> Order and Export 部分取消选中 Android Dependencies 吗? - MSIslam
另外,我想再添加一个问题。我尝试在Styles.xml中这样做:<style name="AppTheme" parent="@style/Theme.AppCompat.Light"> <!-- 所有不特定于特定 API 级别的自定义内容都可以放在这里。 --> @style/Widget.Styled.ActionBar </resources> 出现错误:检索父项时出错,因为没有找到与给定名称“android:Theme.AppCompat.Light”匹配的资源。 - MSIslam
谢谢!我尝试了你和其他一些人提供的解决方案,现在它可以正常工作了! - MSIslam

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