当我创建一个新项目时,为什么Eclipse会自动添加appcompat v7库支持?

217
为什么每次我创建新项目时,Eclipse都会自动添加 appcompat v7 库支持?
我正在创建一个简单的项目,其中的MainActivity应该扩展自Activity,但实际上没有。Eclipse 自动添加了操作栏支持。
如何在不使用 appcompat 库的情况下创建简单项目?顺便提一下,我已经下载了最新版本的 ADT,最近更新过所有内容。我正在使用 Window 7 x64。

输入图片描述

10个回答

105
如Android的支持库概述所述,由于设备的大量多样性和不同版本的Android(因此提供的API也不同)之间存在的碎片化,通常将支持库默认包含在其中被认为是一种良好的做法。
这就是为什么Eclipse中的代码模板工具通过Android Development Tools (ADT)默认集成它们的原因。
我注意到您在示例中针对API 15进行了定位,但是您的软件包所需的最低SDK是API 10,而兼容性库可以提供大量向后兼容的API。例如,使用Fragment API的能力出现在API 11 (Android 3.0 Honeycomb)上,而在运行旧版本系统的设备上也可以使用。
还应该注意,您可以取消默认情况下自动包含Support Library的设置。

54
那太扯了。我过去两个月一直在使用API级别10的Eclipse,它从来没有导入兼容库或片段布局,除非使用该破KitKat API。现在看来,停止它出现的最简单方法是不要自动创建一个Activity。因此,在项目创建后,您需要取消“创建Activity”的勾选,并自己创建一个。 - user3223214
2
是的,这就是重点,由于上述原因,该库将始终被包含。 - Halim Qarroum
1
嗯,支持库确实为Android SDK的许多组件提供了向后兼容性。不仅仅是ActionBar。在最新版本的支持库中,您可以找到大量支持的API。您可能需要查看http://developer.android.com/tools/support-library/index.html以获取更多详细信息。 - Halim Qarroum
1
避免使用app_compat是否更好? - Broskiee
2
天哪,Google!!!别再不停地打补丁了,这些支持库的错误和版本问题让我们都快疯了。 - Josh
显示剩余2条评论

59
创建一个新的Android 应用程序项目,并在第二步(配置项目)中取消选中创建活动

谢谢,但是我的项目中没有创建“menu”文件夹。 - Stephen
1
从我的工作区中删除 appcompat_v7 项目,并通过取消选中“创建活动”选项来创建一个新的 Android 项目,这对我起了作用。其他答案中指定的事项对我没有起作用。谢谢。 - Srinivasan N

22
当我创建新项目时,为什么我的eclipse会自动添加appcompat v7库支持?
因为您的目标SDK设置为15,在其中操作栏默认启用,而您的最低支持SDK设置为10。操作栏在11中出现,因此您需要一个支持库,Eclipse会为您添加它。参考资料。 您可以在项目属性的构建路径中配置项目库。

12
如果我将最小SDK配置为12或13,仍然会从Eclipse获得相同的行为... - mikey

18

Eclipse自动创建了appcompat_v7。由于Kitkat Api自身启动,它会自动添加appcompat_v7fragment_main.xml

解决这些问题的最佳方法:

  1. 首先在项目中,右键单击->属性->Android。在那里您可以看到参考下的标记为红色的appcompat。单击它并删除它,然后在项目构建目标中选择正确的目标名称。

  2. 删除您的中创建的fragment_main.xmlAppcompat文件。

  3. 编辑并更改您的activity_main.xml如下:

    <?xml version="1.0" encoding="utf-8"?>
    
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    
    </RelativeLayout>
    
  4. res/values/styles.xml 文件中:

  5. <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
    
        </style>
    
        <!-- Application theme. -->
        <style name="AppTheme" parent="AppBaseTheme">
    
        </style>
    
    </resources>
    
  6. res/values-v11/styles.xml 中,您需要进行以下更改:

  7. <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
        </style>
    
    </resources>
    
  8. res/values-v14/styles.xml 中你需要像这样做出修改:

  9.   <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
        </style>
    
        <style name="AppTheme" parent="AppBaseTheme">
        </style>
    
    </resources>
    
  10. 将您的 menu/main.xml 文件更改如下:

    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <item
            android:id="@+id/action_settings"
            android:orderInCategory="100"
            android:showAsAction="never"
            android:title="@string/action_settings"/>
    
    </menu>
    
  11. 最后修改您的MainActivity.java文件如下:

  12. import android.app.Activity;
    import android.os.Bundle;
    
    
    public class MainActivity extends Activity {
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    }
    
    }
    

同样你也需要这样做来创建一个新项目。


2
他们在想什么?Eclipse不应该有一个一键解决方案吗? - Pacerier
1
@Pacerier:是的,通过使用appcompat_v7。 - David Liu

8

这是因为您的最小SDK版本设置为10,所以它被包括在内。 ActionBar 是在API 11中引入的。Eclipse会自动添加它,这样您的应用程序在支持的所有Android版本上看起来更加一致。


4

我是一个Android新手,每当我创建新的Android应用程序项目时,总是会自动创建一个名为appcompat_v7的项目,这让我感到很不舒服。

以下是解决方法:选择Project Properties -> Android,然后在Library框中删除appcompat_v7_x并添加appcompat_v7。这样你就可以删除appcompat_v7_x了。

不要勾选创建项目向导中的Create Activity,因为创建向导中的活动时,appcompat_v7_x会再次出现。我的ADT版本是v22.6.2-1085508

如果我的英文不好,请见谅。


1
请注意,这里只有答案。您已经在答案部分发布了问题,请查看是否有足够的答案可供参考。 - Talha Q
1
我只是想展示一种移除appcompat_v7_x的方法,我不认为这是一个问题。如果我犯了错误,请原谅我,因为我是stackoverflow的新手。 - Lê Quang Duy

4

如果您不打算支持2.x版本,您可以将最低sdk版本设置为4.x,然后创建项目。这样就不会创建Appcompat V7库。


3
抱歉我的英文不太好。当你创建一个新的安卓项目时,应该选择高级别的api,例如:从api 17到api 21,这样就不会有appcompat,而且非常容易共享项目。如果你使用低级别的API,只需在Android Manifest中进行编辑以获得更高的API即可:),然后你可以删除Appcompat V7。

2

0

我注意到在使用ADT 22.6.2版本创建新的Android项目时,即使将minSDK设置为11,targetSDK设置为19,也会创建'appcompat'库。

这是因为在新的项目模板中,Android使用了一些来自支持库的属性。例如,如果使用actionbar创建新项目,则可以在菜单的main.xml中找到app:showAsAction="never",这是来自支持库的。

  • 如果应用程序的目标是安卓11或以上版本,那么可以在菜单的main.xml中更改此属性为android:showAsAction
  • 此外,默认的主题集可以设置为"Theme.AppCompat.Light.DarkActionBar" 如下所示(styles.xml):

    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
           <!-- API 14 主题自定义可以放在这里.-->
       </style> 
    

    在这种情况下,style.xml中的父级主题必须更改为"android:style/Theme.Holo.Light.DarkActionBar"

  • 除此之外,如果在MainActivity.java代码中使用了support库中的Fragment、Fragments Manager 的引用,则必须适当地更改为SDK的Fragment、FragmentManager。

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