Tại sao Eclipse tự động thêm hỗ trợ thư viện appcompat v7 bất cứ khi nào tôi tạo một dự án mới?


217

Tại sao Eclipse tự động thêm appcompat v7hỗ trợ thư viện bất cứ khi nào tôi tạo một dự án mới?

Tôi đang tạo một dự án đơn giản mà MainActivitynên mở rộng Activity, nhưng không được. Eclipse tự động thêm hỗ trợ thanh hành động.

Làm thế nào để tôi tạo một dự án đơn giản mà không có appcompatthư viện? FYI, tôi đã tải xuống phiên bản ADT mới nhất với mọi thứ được cập nhật gần đây. Tôi đang sử dụng Window 7 x64.

Nhập mô tả hình ảnh ở đây

Câu trả lời:


105

Như đã nêu trong Tổng quan về Thư viện hỗ trợ của Android , việc mặc định bao gồm thư viện hỗ trợ được coi là thông lệ tốt vì sự đa dạng lớn của các thiết bị và sự phân mảnh tồn tại giữa các phiên bản Android khác nhau (và do đó, các API được cung cấp).

Đây là lý do tại sao các công cụ mẫu mã Android có trong Eclipse thông qua việc Android Development Tools (ADT)tích hợp chúng theo mặc định.

Tôi lưu ý rằng bạn nhắm mục tiêu API 15trong mẫu của bạn, nhưng SDK bắt buộc cho gói của bạn là API 10, mà các thư viện tương thích có thể cung cấp một lượng lớn API tương thích ngược. Một ví dụ sẽ là khả năng sử dụng ứng dụng Fragment APIxuất hiện trên API 11 (Android 3.0 Honeycomb) trên thiết bị chạy phiên bản cũ hơn của hệ thống này.

Cũng cần lưu ý rằng bạn có thể hủy kích hoạt tự động đưa Thư viện hỗ trợ theo mặc định.


54
Vâng đó là BS. Tôi đã sử dụng nhật thực ở cấp độ 10 trong 2 tháng qua và nó chưa bao giờ nhập thư viện tương thích hoặc bố cục mảnh cho đến khi apk kitkat kỳ dị này xuất hiện. Tại thời điểm này, cách đơn giản nhất để ngăn chặn nó xuất hiện là không tự động tạo một Hoạt động. Vì vậy, bạn sẽ phải bỏ chọn "tạo hoạt động" và tạo riêng của bạn khi dự án đã được tạo.
dùng3223214

2
Vâng, đó là điểm chính, thư viện sẽ luôn được đưa vào vì những lý do trên.
Halim Qarroum

1
Chà, thư viện hỗ trợ không cung cấp khả năng tương thích ngược cho nhiều thành phần của SDK Android. Không chỉ dành cho ActionBar. Bạn có thể tìm thấy một loạt các API được hỗ trợ trong phiên bản mới nhất của thư viện hỗ trợ. Bạn có thể muốn xem qua developer.android.com/tools/support-l Library / index.html để biết thêm chi tiết.
Halim Qarroum

1
Có phải tốt hơn để tránh app_compat?
Neolardo Va Dinci

2
Trời ơi google !!! thoát khỏi việc vá lỗi và vá lỗi và vá lỗi, tất cả các lỗi và phiên bản hỗ trợ Thư viện này đang khiến chúng ta thất vọng.
Josh

59

Tạo một cái mới Android Application Projectbỏ chọn Create activity trong bước hai (Cấu hình dự án).


Cảm ơn Nhưng menuthư mục đã không được tạo trong dự án của tôi.
Steve

1
Xóa dự án appcompat_v7 khỏi không gian làm việc của tôi và tạo một dự án Android mới bằng cách bỏ chọn tùy chọn 'Tạo hoạt động' đã giúp tôi. Những điều được chỉ định trong các câu trả lời khác không làm việc cho tôi. Cảm ơn.
Srinivasan N

22

Tại sao nhật thực của tôi tự động thêm hỗ trợ thư viện appcompat v7 bất cứ khi nào tôi tạo dự án mới

Vì SDK mục tiêu của bạn được đặt thành 15, trong đó Action Bar được bật theo mặc định và SDK được hỗ trợ tối thiểu của bạn được đặt thành 10. Action Bar xuất hiện trong 11, vì vậy bạn cần một thư viện hỗ trợ, Eclipse sẽ thêm nó cho bạn. Tài liệu tham khảo.

Bạn có thể cấu hình các thư viện dự án trong đường dẫn xây dựng của các thuộc tính dự án.


12
Nếu tôi định cấu hình sdk tối thiểu là 12 hoặc 13, tôi vẫn nhận được hành vi tương tự từ nhật thực ...
mikey

18

Eclipse tự động tạo ra appcompat_v7. Bởi vì Kitkat Api tự khởi chạy, nó tự động thêm appcompat_v7fragment_main.xml.

Cách tốt nhất để giải quyết những điều này:

  1. Đầu tiên trong dự án , Right click->properties->Android. Bạn có thể thấy red marked appcompatvị trí được đặt trong Reference. Nhấp vào đó và xóa nó. Sau đó, chọn đúng tên mục tiêu Project Build Target.

  2. Xóa tệp Fragment_main.xmlAppcompat được tạo trong Eclipse của bạn .

  3. Chỉnh sửa và thay đổi Activity_main.xml của bạn như sau:

    <?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. Trong res / value / style.xml:

    <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
    
        </style>
    
        <!-- Application theme. -->
        <style name="AppTheme" parent="AppBaseTheme">
    
        </style>
    
    </resources>
  5. Trong res / value-v11 / style.xml, bạn phải thay đổi như sau:

    <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Holo.Light">
        </style>
    
    </resources>
  6. Trong res / value-v14 / style.xml, bạn phải thay đổi như sau:

      <resources>
    
        <style name="AppBaseTheme" parent="android:Theme.Light">
        </style>
    
        <style name="AppTheme" parent="AppBaseTheme">
        </style>
    
    </resources>
  7. Thay đổi menu / main.xml của bạn như sau:

    <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>
  8. Cuối cùng thay đổi MainActivity.java của bạn như sau:

    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);
    
    }
    
    }

LikeWise bạn phải làm điều đó để tạo một dự án mới


2
Họ đang nghĩ gì vậy? Eclipse không nên có một giải pháp một cú nhấp chuột cho việc này?
Pacerier

1
@Pacerier: Vâng. Bằng cách sử dụng appcompat_v7.
David Liu

8

Nó được bao gồm bởi vì phiên bản SDK tối thiểu của bạn được đặt thành 10. Phiên bản ActionBarđược giới thiệu trong API 11. Eclipse tự động thêm nó để ứng dụng của bạn có thể trông nhất quán hơn trong toàn bộ các phiên bản Android bạn đang hỗ trợ.


4

Nếu bạn không nhắm mục tiêu các phiên bản 2.x, bạn có thể đặt phiên bản sdk tối thiểu là 4.x và sau đó tạo dự án. Appcompat V7 lib sẽ không được tạo.


4

Tôi mới sử dụng Android và dự án appcompat_v7 luôn được tạo khi tôi tạo dự án ứng dụng Android mới khiến tôi rất khó chịu.

Đây chỉ là một cuộc dạo chơi. Chọn Thuộc tính dự án -> Android, sau đó vào hộp Thư viện, chỉ cần xóa appcompat_v7_x và thêm appcompat_v7. Bây giờ bạn có thể xóa appcompat_v7_x.

Bỏ chọn Tạo hoạt động trong trình tạo dự án không hoạt động, bởi vì khi tạo hoạt động bằng trình hướng dẫn, appcompat_v7_x sẽ xuất hiện lại. Phiên bản ADT của tôi là v22.6.2-1085508 .
Tôi xin lỗi nếu tiếng Anh của tôi kém.


1
Kiểm tra rất nhiều câu trả lời có mặt ở đây. Phần này là để trả lời. Bạn đã đăng câu hỏi trong phần trả lời.
Talha Q

1
Tôi chỉ muốn chỉ ra một cách để xóa appcompat_v7_x và tôi không nghĩ đây là một câu hỏi. Nếu tôi mắc lỗi, xin hãy tha thứ cho tôi vì tôi là người mới với stackoverflow.
Lê Quang Duy

3

Xin lỗi với tiếng Anh của tôi, Khi bạn tạo một dự án Android mới, bạn nên chọn api ở cấp độ cao, ví dụ: từ api 17 đến api 21, Nó sẽ không có appcompat và rất dễ chia sẻ dự án. Nếu bạn đã làm điều đó với API thấp hơn, bạn chỉ cần chỉnh sửa trong Android Manifest để có API trên :), sau đó, bạn có thể xóa Appcompat V7.


2

Theo http://developer.android.com/guide/topics/ui/actionbar.html

API ActionBar lần đầu tiên được thêm vào Android 3.0 (API cấp 11) nhưng chúng cũng có sẵn trong Thư viện hỗ trợ để tương thích với Android 2.1 (API cấp 7) trở lên.

Nói tóm lại, dự án được tạo tự động mà bạn đang thấy đã mô đun hóa quá trình thêm ActionBar vào API 7-10.

Ví dụ về ActionBar trên Froyo

Xem http://hmkcode.com/add-actionbar-to-android-2-3-x/ để được giải thích đơn giản và hướng dẫn về chủ đề này.


0

Tôi nhận thấy việc tạo thư viện 'appcompat' trong khi tạo dự án Android mới với phiên bản ADT 22.6.2, ngay cả khi minSDK được đặt thành 11 và targetSDK được đặt 19

Điều này đã xảy ra bởi vì, trong mẫu dự án mới, android đang sử dụng một số thuộc tính từ thư viện hỗ trợ. Chẳng hạn, nếu một dự án mới được tạo bằng thanh hành động thì trong tệp main.xml của menu có thể tìm thấy app:showAsAction="never"từ thư viện hỗ trợ.

  • Nếu ứng dụng được nhắm mục tiêu từ phiên bản Android 11 trở lên thì người ta có thể thay đổi thuộc tính này thành android:showAsActiontrong tệp main.xml của menu
  • Ngoài ra, bộ chủ đề mặc định có thể là "Theme.AppCompat.Light.DarkActionBar" như được hiển thị bên dưới (Styles.xml)

    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
           <!-- API 14 theme customizations can go here. -->
       </style> 

    Trong trường hợp này, chủ đề gốc trong style.xml phải được thay đổi thành "android: style / Theme.Holo.Light.DarkActionBar"

  • Ngoài ra, nếu tham chiếu đến Fragment, Fragment Manager từ thư viện hỗ trợ đã được tạo theo mã của MainActivity.java, chúng phải được thay đổi một cách thích hợp thành Fragment, FragmentManager của SDK.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.