Giới thiệu về phát triển ứng dụng Android. Chỉnh sửa tệp kê khai android

Tệp kê khai AndroidManifest.xml cung cấp các thông tin cơ bản về chương trình cho hệ thống. Mỗi ứng dụng phải có tập tin riêng AndroidManifest.xml. Bạn có thể chỉnh sửa tệp kê khai theo cách thủ công bằng cách thay đổi mã XML hoặc thông qua biên tập trực quan Manifest Editor, cho phép bạn trực quan và chỉnh sửa văn bản tập tin kê khai ứng dụng.

Mục đích tập tin

  • khai báo tên gói Java của ứng dụng, đóng vai trò là mã định danh duy nhất;
  • mô tả các thành phần ứng dụng—các hoạt động, dịch vụ, người nhận mục đích quảng bá và nhà cung cấp nội dung—cho phép các lớp triển khai từng thành phần được gọi và khai báo ý định của chúng;
  • chứa danh sách các quyền cần thiết để truy cập các phần được bảo vệ của API và tương tác với các ứng dụng khác;
  • tuyên bố quyền rằng ứng dụng bên thứ bađược yêu cầu tương tác với các thành phần của ứng dụng này;
  • thông báo cấp độ thấp nhất Cần có API Android để ứng dụng hoạt động;
  • liệt kê các thư viện liên quan;

Cấu trúc kê khai chung

Tệp kê khai đóng gói toàn bộ kiến ​​trúc của ứng dụng Android, nó chức năng và cấu hình. Trong quá trình phát triển ứng dụng, bạn sẽ phải liên tục chỉnh sửa tập tin này, thay đổi cấu trúc của nó và thêm các phần tử và thuộc tính mới.

Phần tử gốc của bảng kê khai là . Bên cạnh đó của phần tử này các yếu tố bắt buộc là thẻ . Yếu tố là thành phần chính của bảng kê khai và chứa nhiều phần tử con xác định cấu trúc và hoạt động của ứng dụng. Thứ tự sắp xếp các phần tử nằm trên cùng một mức là tùy ý. Tất cả các giá trị được thiết lập thông qua các thuộc tính phần tử. Ngoài các thành phần bắt buộc nêu trên, bảng kê khai còn sử dụng các thành phần khác nếu cần.

Sự miêu tả

Yếu tố là phần tử gốc của bảng kê khai. Theo mặc định, Eclipse tạo một phần tử có bốn thuộc tính:

Thuộc tính

xmlns:android xác định không gian tên Android. Nó luôn luôn là cùng một gói xác định tên duy nhất của gói ứng dụng mà bạn đã chỉ định khi tạo dự án. Android Marketplace kiểm tra tính duy nhất khi chấp nhận ứng dụng, vì vậy bạn nên sử dụng tên riêng của mình để tránh xung đột với các nhà phát triển khác. Ví dụ: tôi sử dụng tên trang web của mình theo thứ tự ngược lại: ru.alexanderklimov.appname android:versionCode cho biết số phiên bản nội bộ được sử dụng để so sánh các phiên bản chương trình. "Mã phiên bản" phải là số nguyên và Android Market sử dụng giá trị này để xác định xem bạn đã cung cấp phiên bản mới hay chưa bằng cách chuyển trình kích hoạt cập nhật trên thiết bị mà ứng dụng của bạn được cài đặt trên đó. Thường xuyên. bắt đầu từ 1 và tăng lên một nếu bạn phát hành phiên bản mới của ứng dụng. android:versionName chỉ định số phiên bản của người dùng. Bạn có thể sử dụng một chuỗi hoặc tài nguyên chuỗi. Số này được hiển thị cho người dùng.

Yếu tố khai báo một quyền được sử dụng để hạn chế quyền truy cập vào một số thành phần hoặc chức năng nhất định của một ứng dụng nhất định. Phần này mô tả các quyền mà các ứng dụng khác phải yêu cầu để có quyền truy cập vào ứng dụng của bạn. Một ứng dụng cũng có thể bảo vệ các thành phần của chính nó (hoạt động, dịch vụ, người nhận mục đích phát sóng và nhà cung cấp nội dung) bằng các quyền. Nó có thể sử dụng bất kỳ quyền nào của hệ thống do Android xác định hoặc được các ứng dụng khác khai báo và cũng có thể xác định các quyền của chính nó.

Android:name tên của quyền android:label tên của quyền được hiển thị cho người dùng android:description mô tả của quyền android:icon biểu tượng quyền android:permissionGroup xác định tư cách thành viên trong nhóm quyền android:protectionLevel cấp độ bảo vệ

Yếu tố yêu cầu các quyền mà ứng dụng phải được hệ thống cấp để nó hoạt động bình thường. Quyền được cấp trong quá trình cài đặt ứng dụng chứ không phải khi ứng dụng đang chạy.

Android:tên có một thuộc tính duy nhất với tên quyền android:name. Đây có thể là độ phân giải được xác định trên phần tử Ứng dụng này, một quyền được xác định trong ứng dụng khác hoặc một trong các quyền của hệ thống tiêu chuẩn, ví dụ: android:name=”android.permission.CAMERA” hoặc android:name=””android.permission.READ_CONTACTS”

Quyền phổ biến nhất

  • INTERNET- Truy cập Internet
  • READ_CONTACTS- đọc (nhưng không ghi) dữ liệu từ sổ địa chỉ của người dùng
  • VIẾT_CONTACTS— ghi (nhưng không đọc) dữ liệu từ sổ địa chỉ của người dùng
  • RECEIVE_SMS- xử lý tin nhắn SMS đến
  • ACCESS_COARSE_LOCATION- sử dụng vị trí gần đúng bằng tháp di động hoặc điểm truy cập Wi-Fi
  • ACCESS_FINE_LOCATION- xác định vị trí chính xác bằng GPS

Yếu tố Khai báo tên cơ sở cho cây quyền. Phần tử này không tự khai báo quyền mà chỉ khai báo một không gian tên để có thể đặt thêm các quyền vào đó.

Yếu tố xác định tên cho một tập hợp các quyền liên quan đến logic. Cả hai đều có thể được khai báo trong cùng một bảng kê khai với phần tử Quyền như được quảng cáo ở nơi khác. Phần tử này không khai báo quyền một cách trực tiếp mà chỉ khai báo một danh mục mà các quyền có thể được đặt vào đó. Một quyền có thể được đặt trong một nhóm bằng cách gán tên nhóm trong thuộc tính nhóm quyền yếu tố

Yếu tố khai báo một đối tượng thiết bị đo đạc, giúp kiểm soát sự tương tác của ứng dụng với hệ thống. Thường được sử dụng khi gỡ lỗi và kiểm tra một ứng dụng và bị xóa khỏi phiên bản phát hành của ứng dụng.

Yếu tố Cho phép bạn khai báo khả năng tương thích của ứng dụng với một phiên bản được chỉ định (hoặc các phiên bản API mới hơn) của nền tảng Android. Cấp độ API do ứng dụng khai báo được so sánh với cấp độ API của hệ thống thiết bị di động nơi ứng dụng được cài đặt.

Thuộc tính
android:minSdkVersion xác định cấp API tối thiểu cần thiết để ứng dụng chạy. Hệ thống Android sẽ ngăn người dùng cài đặt ứng dụng nếu cấp API của hệ thống thấp hơn giá trị được xác định trong thuộc tính này. Bạn phải luôn khai báo thuộc tính này, ví dụ: android:minSdkVersion=”11″. Để giải trí, bạn có thể đặt giá trị thành 7 rồi 11 và so sánh giao diện của ứng dụng. Ví dụ: phiên bản trẻ hơn sẽ không hiển thị ActionBar. android:maxSDKVersion cho phép bạn xác định phiên bản mới nhất mà chương trình của bạn sẵn sàng hỗ trợ. Ứng dụng của bạn sẽ ẩn trên Google Play đối với các thiết bị có phiên bản mới hơn. Bạn nên cài đặt nó khi bạn hoàn toàn chắc chắn rằng ứng dụng sẽ không hoạt động chính xác trên nền tảng mới. targetSDKVersion cho phép bạn chỉ định nền tảng mà bạn đã phát triển và thử nghiệm ứng dụng. Bằng cách đặt giá trị cho thuộc tính này, bạn đang thông báo cho hệ thống rằng không cần thay đổi nào để hỗ trợ phiên bản cụ thể này.

Yếu tố cho biết cấu hình phần cứng và phần mềm của thiết bị di động cần thiết cho ứng dụng. Ví dụ: một ứng dụng có thể xác định yêu cầu thiết bị phải có bàn phím vật lý hoặc USB-nopTa. Thông số kỹ thuật được sử dụng để tránh cài đặt ứng dụng trên các thiết bị không hỗ trợ cấu hình được yêu cầu. Nếu ứng dụng của bạn có thể hoạt động với các cấu hình thiết bị khác nhau, bạn cần đưa các thành phần cụ thể vào tệp kê khai cho mỗi cấu hình. Bạn có thể chỉ định bất kỳ sự kết hợp nào có chứa các thiết bị sau

  • reqFiveWayNav- Giá trị sử dụng ĐÚNG VẬY, nếu ứng dụng yêu cầu thiết bị đầu vào hỗ trợ điều hướng lên, xuống, trái, phải và nhấp vào mục được đánh dấu. Những thiết bị này bao gồm trackball và D-pad. Về cơ bản đã lỗi thời
  • reqHardBàn phím- Giá trị sử dụng ĐÚNG VẬY, nếu ứng dụng yêu cầu bàn phím phần cứng.
  • reqKeyboardType— cho phép bạn đặt loại bàn phím: nokeys, qwerty, 12key, không xác định
  • reqĐiều hướng— chỉ định một trong các giá trị: nonav, dpad, trackball, bánh xe hoặc không xác định nếu cần có thiết bị điều hướng
  • reqTouchScreen— nếu cần có màn hình cảm ứng thì hãy sử dụng giá trị mong muốn từ các tùy chọn có thể có: notch, bút cảm ứng, ngón tay, không xác định. Bây giờ hầu như tất cả các thiết bị đều có màn hình cảm ứng nên nó cũng lỗi thời rồi

Ứng dụng sẽ không cài đặt trên thiết bị không phù hợp với cấu hình bạn đặt. Tốt nhất, bạn nên phát triển một ứng dụng có thể hoạt động với mọi tổ hợp thiết bị đầu vào. Trong trường hợp này không cần thiết.

Yếu tố tuyên bố chức năng nhất định cần thiết để ứng dụng hoạt động. Bằng cách này, ứng dụng sẽ không được cài đặt trên các thiết bị không có chức năng cần thiết. Ví dụ: một ứng dụng có thể xác định rằng nó yêu cầu máy ảnh tự động lấy nét. Nếu thiết bị không tích hợp camera tự động lấy nét thì ứng dụng sẽ không được cài đặt.

Android.hardware.máy ảnh yêu cầu máy ảnh phần cứng android.hardware.máy ảnh.autofocus yêu cầu máy ảnh tự động lấy nét

Bạn có thể ghi đè yêu cầu mặc định bằng cách thêm thuộc tính yêu cầu có ý nghĩa SAI. Ví dụ: nếu chương trình của bạn không yêu cầu máy ảnh hỗ trợ lấy nét tự động thì hãy sử dụng tùy chọn:

Yếu tố xác định độ phân giải màn hình cần thiết để thiết bị hoạt động. Thẻ này cho phép bạn chỉ định kích thước của màn hình mà ứng dụng được thiết kế. Hệ thống sẽ chia tỷ lệ ứng dụng của bạn dựa trên bố cục của bạn trên các thiết bị hỗ trợ độ phân giải màn hình mà bạn chỉ định. Đối với các trường hợp khác, hệ thống sẽ kéo giãn bố cục nhiều nhất có thể.

Những giá trị khả thi

Màn hình nhỏ thường là Màn hình QVGA bình thườngMàn hình HVGA và WQVGA tiêu chuẩnMàn hình lớnMàn hình lớn xlargeMàn hình màn hình rất lớn vượt quá kích thước của máy tính bảngbất kỳMật độ đặt giá trị ĐÚNG VẬY, nếu ứng dụng của bạn có khả năng mở rộng để hiển thị trên bất kỳ độ phân giải màn hình nào.

Theo mặc định, mỗi thuộc tính được đặt thành ĐÚNG VẬY. Bạn có thể chỉ định kích thước màn hình nào mà ứng dụng của bạn không hỗ trợ.

Bắt đầu với API 13 (Android 3), thẻ có các thuộc tính mới:

  • yêu cầu Chiều rộng nhỏ nhấtDp— cho biết chiều rộng màn hình được hỗ trợ tối thiểu (cạnh nhỏ nhất của thiết bị) tính bằng pixel độc lập với thiết bị. Nó có thể được sử dụng để lọc thiết bị khi đặt ứng dụng trên Google Play
  • tương thíchWidthLimitDp— đặt giới hạn tỷ lệ trên cho ứng dụng của bạn. Nếu màn hình thiết bị mở rộng ra ngoài ranh giới được chỉ định, hệ thống sẽ kích hoạt chế độ tương thích.
  • chiều rộng lớn nhấtGiới hạnDp— chỉ định giới hạn trên tuyệt đối mà ứng dụng của bạn chắc chắn không thể mở rộng được. Trong trường hợp này, ứng dụng chạy ở chế độ tương thích, không thể tắt chế độ này. Bạn nên tránh những tình huống như vậy và thiết kế bố cục cho bất kỳ màn hình nào.

Yếu tố một trong những thành phần chính của tệp kê khai, chứa mô tả về các thành phần ứng dụng có sẵn trong gói: kiểu, biểu tượng, v.v. Chứa các phần tử con khai báo từng thành phần có trong ứng dụng. Chỉ có thể có một phần tử trong bảng kê khai .

Yếu tố thông báo hoạt động. Nếu ứng dụng của bạn chứa nhiều hoạt động, đừng quên khai báo chúng trong tệp kê khai, tạo một phần tử riêng cho từng hoạt động . Nếu một hoạt động không được khai báo trong tệp kê khai, nó sẽ không hiển thị với hệ thống và sẽ không được khởi chạy khi ứng dụng chạy hoặc thông báo lỗi sẽ được hiển thị.

Lớp này có bộ lọc cuộc gọi được đăng ký để xác định rằng hành động này đang chạy trong ứng dụng (hành động android:name="android.intent.action.MAIN"). Định nghĩa danh mục (danh mục android:name="android.intent.category.LAUNCHER") chỉ định rằng ứng dụng này được thêm vào thư mục ứng dụng trên thiết bị Android. @ giá trị các tệp tài nguyên trực tiếp chứa các giá trị thực tế. Điều này giúp làm việc dễ dàng hơn với các tài nguyên khác nhau như chuỗi, màu sắc, biểu tượng.

Thuộc tính
android:name tên lớp. Tên phải bao gồm tên gói đầy đủ, nhưng vì tên gói đã được xác định trong phần tử gốc , tên của lớp thực hiện hoạt động có thể được viết dưới dạng viết tắt bằng cách bỏ qua nhãn văn bản tên gói android:label hiển thị cho người dùng

Yếu tố chứa nhiều thuộc tính khác xác định độ phân giải, hướng màn hình, v.v.

Thay đổi cấu hình khi chương trình đang chạy

Khi ngôn ngữ, khu vực hoặc cấu hình phần cứng thay đổi, Android sẽ dừng tất cả các ứng dụng rồi khởi động lại chúng, tải lại các giá trị từ tài nguyên. Hành vi như vậy không phải lúc nào cũng phù hợp hoặc mong muốn. Ví dụ: một số thay đổi về cấu hình (hướng màn hình trong không gian, khả năng truy cập bàn phím) có thể xảy ra chỉ vì người dùng xoay thiết bị hoặc trượt bàn phím ra. Bạn có thể tùy chỉnh cách ứng dụng của mình phản ứng với những thay đổi này bằng cách phát hiện chúng và tự mình thực hiện hành động. Để buộc một Hoạt động theo dõi các thay đổi cấu hình khi chương trình chạy, hãy thêm thuộc tính vào nút của nó trong tệp kê khai android:configThay đổi, cho biết sự kiện nào bạn muốn xử lý.

Dưới đây là một số giá trị có thể được sử dụng để mô tả các thay đổi về cấu hình:

  • định hướng- vị trí màn hình đã được thay đổi từ dọc sang ngang (hoặc ngược lại);
  • bàn phímẨn- bàn phím (hoặc D-pad và thiết bị khác) được mở rộng hoặc ẩn;
  • cỡ chữ- người dùng đã thay đổi kích thước phông chữ ưa thích;
  • ngôn ngữ- người dùng đã chọn cài đặt ngôn ngữ mới;
  • bàn phím- loại bàn phím đã thay đổi; ví dụ: một chiếc điện thoại có thể có bảng điều khiển 12 phím, khi xoay sẽ hiển thị một bàn phím chính thức. Hoặc một bàn phím ngoài đã được kết nối.
  • màn hình cảm ứng hoặc dẫn đường- loại bàn phím hoặc phương pháp điều hướng đã thay đổi. Theo quy định, những sự kiện như vậy không xảy ra.
  • mcc hoặc mnc— một thẻ SIM mới đã được phát hiện và mã quốc gia cũng như mã mạng di động cũng đã thay đổi tương ứng.
  • uiMode- Chế độ giao diện người dùng đã thay đổi, ví dụ: khi chuyển đổi giữa chế độ ô tô, ngày và đêm.
  • bố cục màn hình— các đặc điểm của màn hình đã thay đổi, ví dụ như khi một màn hình khác được kích hoạt.
  • kích thước màn hình— kích thước màn hình đã thay đổi, chẳng hạn như khi thay đổi hướng. Được giới thiệu trong Android 3 (API 12)
  • kích thước màn hình nhỏ nhất— kích thước vật lý của màn hình đã thay đổi, chẳng hạn như khi kết nối với màn hình ngoài. Được giới thiệu trong Android 3 (API 12)

Trong một số trường hợp, nhiều sự kiện sẽ xảy ra cùng lúc. Ví dụ: khi người dùng rút bàn phím ra, hầu hết các thiết bị đều tạo ra sự kiện bàn phímẨnđịnh hướng. Bạn có thể chọn nhiều sự kiện mà bạn muốn tự xử lý bằng cách tách chúng bằng ký hiệu | .

Sự hiện diện của thuộc tính android:configChanges sẽ ngăn ứng dụng khởi động lại khi cấu hình được thay đổi. Thay vào đó, phương thức bên trong hoạt động sẽ kích hoạt onConfigurationChanged(). Ghi đè nó để có thể xử lý các thay đổi cấu hình. Sử dụng đối tượng đã qua Cấu hìnhđể có được những giá trị mới. Đừng quên gọi phương thức cùng tên từ lớp cha và tải lại các giá trị đã thay đổi từ tất cả các tài nguyên được sử dụng bên trong hoạt động.

@Override public void onConfigurationChanged(Configuration _newConfig) ( super.onConfigurationChanged(_newConfig); [ ... Cập nhật giao diện người dùng bằng cách sử dụng dữ liệu từ các tài nguyên... ] if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) ( [ ... Reaction sang hướng màn hình đã thay đổi... ] ) if (_newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) ( [ ... Phản ứng với việc đẩy/rút bàn phím ra... ] ) )

Tại thời điểm phương thức được gọi, tất cả dữ liệu từ các tài nguyên sẽ được cập nhật, vì vậy bạn có thể sử dụng phương thức mà không cần lo lắng.

Bất kỳ thay đổi cấu hình nào chưa được đánh dấu rõ ràng để xử lý trong ứng dụng của bạn sẽ khiến hoạt động được khởi động lại, bỏ qua lệnh gọi phương thức onConfigurationChanged().

Mỗi thẻ hỗ trợ các nút lồng nhau . Yếu tố xác định các loại ý định mà một hoạt động, dịch vụ hoặc phần chìm ý định có thể phản hồi. Bộ lọc ý định khai báo các khả năng của thành phần chính của nó - hoạt động hoặc dịch vụ có thể làm gì và loại thư mà người nhận có thể xử lý. Bộ lọc ý định cung cấp khả năng cho các thành phần máy khách truy xuất các ý định thuộc loại được khai báo, lọc ra những ý định không có ý nghĩa đối với thành phần và chứa các phần tử con , , .

Yếu tố thêm một hành động vào bộ lọc ý định. Yếu tố phải chứa một hoặc nhiều phần tử . Nếu trong phần tử Nếu những phần tử này không xuất hiện thì đối tượng ý định sẽ không đi qua bộ lọc. Ví dụ về khai báo hành động:

Yếu tố chỉ định danh mục thành phần mà ý định sẽ xử lý. Đây là các hằng chuỗi được xác định trong lớp ý định, ví dụ:

Yếu tố thêm đặc tả dữ liệu vào bộ lọc ý định. Đặc tả có thể chỉ là một kiểu dữ liệu (thuộc tính mimeType), một URI hoặc một LOẠI dữ liệu cộng với một URI. Ý nghĩa của URI được xác định bởi các thuộc tính riêng biệt cho từng phần của nó, tức là URI được chia thành các phần: android:scheme, android:host, android:port, android:path hoặc android:pathPrefix, android:pathPattern.

Yếu tố xác định một cặp tên-giá trị cho một phần tử dữ liệu tùy ý bổ sung có thể được cung cấp cho thành phần chính. Một phần tử cấu thành có thể chứa bất kỳ số phần tử nào .

Yếu tố là bí danh cho Hoạt động được xác định trong thuộc tính hoạt động mục tiêu. Hoạt động đích phải ở trong cùng một ứng dụng với bí danh và phải được khai báo trước bí danh hoạt động trong tệp kê khai. Bí danh thể hiện hoạt động mục tiêu như một thực thể độc lập. Bí danh có thể có bộ bộ lọc ý định riêng để xác định ý định nào có thể kích hoạt hoạt động mục tiêu và cách hệ thống sẽ xử lý hoạt động đó. Ví dụ: bộ lọc ý định trên bí danh hoạt động có thể xác định cờ android:name=”android.intent.action.MAIN”android:name=”android.intent.category.LAUNCHER”, khiến hoạt động mục tiêu tải khi ứng dụng khởi động ngay cả khi các bộ lọc ý định trên hoạt động mục tiêu không được đặt các cờ này.

Yếu tố tuyên bố một dịch vụ là một trong các thành phần ứng dụng. Tất cả các dịch vụ phải được đại diện bởi một phần tử trong tệp kê khai. Các dịch vụ chưa được khai báo sẽ không được hệ thống phát hiện và sẽ không bao giờ được khởi động. Phần tử này có nhiều thuộc tính xác định tên, khả năng truy cập, quyền, quy trình, v.v. Hỗ trợ các nút lồng nhau

Yếu tố tuyên bố bộ nhận ý định quảng bá là một trong các thành phần ứng dụng. Bộ thu ý định phát sóng cho phép ứng dụng nhận các ý định được hệ thống hoặc ứng dụng khác phát đi, ngay cả khi các thành phần ứng dụng khác không hoạt động.

Yếu tố khai báo nhà cung cấp nội dung (nguồn dữ liệu) để kiểm soát quyền truy cập vào cơ sở dữ liệu. Tất cả các nhà cung cấp nội dung là một phần của ứng dụng phải được thể hiện trong các phần tử Trong tệp kê khai. Nếu không được khai báo thì chúng sẽ không hoạt động vì hệ thống sẽ không thể nhìn thấy chúng. Yếu tố Chứa tập hợp các phần tử con riêng để thiết lập quyền truy cập dữ liệu:

  • ;
  • ;

Phần tử này có nhiều thuộc tính xác định tên, tính khả dụng, quyền, quy trình, v.v.

Yếu tố là con của Nó xác định ai có thể được cấp quyền đối với các tập hợp con dữ liệu của nhà cung cấp nội dung. Cấp quyền là một cách cho phép khách hàng không có quyền truy cập vào toàn bộ dữ liệu có thể truy cập vào một tập hợp con dữ liệu do nhà cung cấp nội dung cung cấp. Nếu thuộc tính GranturiPermissions của nhà cung cấp nội dung là đúng thì quyền sẽ được cấp cho mọi dữ liệu do nhà cung cấp nội dung cung cấp. Tuy nhiên, nếu thuộc tính được đặt thành false thì chỉ có thể cấp quyền cho các tập hợp con dữ liệu được xác định bởi phần tử đó. Nhà cung cấp nội dung có thể chứa bất kỳ số lượng phần tử nào .

Yếu tố - phần tử con cho Xác định đường dẫn và các quyền cần thiết cho một tập hợp con dữ liệu cụ thể trong nhà cung cấp thông tin. Phần tử này có thể được xác định nhiều lần để cung cấp nhiều đường dẫn.

Yếu tố chỉ định một thư viện công cộng mà ứng dụng sẽ được liên kết. Phần tử này hướng dẫn hệ thống đưa mã thư viện vào trình nạp lớp cho gói ứng dụng. Theo mặc định, mỗi dự án được đóng gói cùng với các thư viện Android, bao gồm các gói cốt lõi để xây dựng ứng dụng (với các lớp có mục đích chung như Hoạt động, Dịch vụ, Ý định, Chế độ xem, Nút, Ứng dụng, ContentProvider, v.v.). Tuy nhiên, một số gói nằm trong các thư viện riêng biệt không được liên kết tự động với ứng dụng. Nếu ứng dụng sử dụng các gói từ các thư viện này hoặc các gói khác từ nhà phát triển bên thứ ba thì cần phải tạo liên kết rõ ràng với các thư viện này và tệp kê khai phải chứa một phần tử riêng biệt .

Bài viết mượn từ http://developer.alexanderklimov.ru/


Tệp kê khai AndroidManifest.xml cung cấp thông tin cơ bản về chương trình cho hệ thống. Mỗi ứng dụng phải có tệp AndroidManifest.xml riêng. Bạn có thể chỉnh sửa tệp kê khai theo cách thủ công bằng cách thay đổi mã XML hoặc thông qua Trình soạn thảo tệp kê khai trực quan, cho phép chỉnh sửa trực quan và văn bản của tệp kê khai ứng dụng. Đích tệp khai báo tên gói Java của ứng dụng, đóng vai trò là mã định danh duy nhất; mô tả các thành phần ứng dụng—các hoạt động, dịch vụ, người nhận mục đích quảng bá và nhà cung cấp nội dung—cho phép các lớp triển khai từng thành phần được gọi và khai báo ý định của chúng; chứa danh sách các quyền cần thiết để truy cập các phần được bảo vệ của API và tương tác với các ứng dụng khác; tuyên bố các quyền mà ứng dụng của bên thứ ba phải có để tương tác với các thành phần của ứng dụng này; tuyên bố mức API Android tối thiểu cần thiết để ứng dụng hoạt động; liệt kê các thư viện liên quan; Cấu trúc kê khai chung

Tệp kê khai gói gọn toàn bộ kiến ​​trúc, chức năng và cấu hình ứng dụng Android. Trong quá trình phát triển ứng dụng, bạn sẽ phải liên tục chỉnh sửa tệp này, thay đổi cấu trúc của nó và thêm các thành phần và thuộc tính mới.

Phần tử gốc của bảng kê khai là . Ngoài phần tử này, thẻ là phần tử bắt buộc . Yếu tố là thành phần chính của bảng kê khai và chứa nhiều phần tử con xác định cấu trúc và hoạt động của ứng dụng. Thứ tự sắp xếp các phần tử nằm trên cùng một mức là tùy ý. Tất cả các giá trị được thiết lập thông qua các thuộc tính phần tử. Ngoài các thành phần bắt buộc nêu trên, bảng kê khai còn sử dụng các thành phần khác nếu cần.

Sự miêu tả

Yếu tố là phần tử gốc của bảng kê khai. Theo mặc định, Eclipse tạo một phần tử có bốn thuộc tính:

Thuộc tính

  • xmins:android

xác định không gian tên Android. Nó luôn giống nhau

  • bưu kiện

xác định tên gói ứng dụng duy nhất mà bạn đã chỉ định khi tạo dự án. Android Marketplace kiểm tra tính duy nhất khi chấp nhận ứng dụng, vì vậy bạn nên sử dụng tên riêng của mình để tránh xung đột với các nhà phát triển khác. Ví dụ: tôi sử dụng tên trang web của mình theo thứ tự ngược lại: ru.alexanderklimov.appname

  • android:Mã phiên bản

cho biết số phiên bản nội bộ được sử dụng để so sánh các phiên bản chương trình. "Mã phiên bản" phải là số nguyên và Android Market sử dụng giá trị này để xác định xem bạn đã cung cấp phiên bản mới hay chưa bằng cách chuyển trình kích hoạt cập nhật trên thiết bị mà ứng dụng của bạn được cài đặt trên đó. Thường xuyên. bắt đầu từ 1 và tăng lên một nếu bạn phát hành phiên bản mới của ứng dụng.

  • android:tên phiên bản

cho biết số phiên bản người dùng. Bạn có thể sử dụng một chuỗi hoặc tài nguyên chuỗi. Số này được hiển thị cho người dùng. Đọc mẹo Lấy số phiên bản chương trình

Yếu tố Khai báo một quyền được sử dụng để hạn chế quyền truy cập vào một số thành phần hoặc chức năng nhất định của một ứng dụng nhất định. Phần này mô tả các quyền mà các ứng dụng khác phải yêu cầu để có quyền truy cập vào ứng dụng của bạn. Một ứng dụng cũng có thể bảo vệ các thành phần của chính nó (hoạt động, dịch vụ, người nhận mục đích phát sóng và nhà cung cấp nội dung) bằng các quyền. Nó có thể sử dụng bất kỳ quyền nào của hệ thống do Android xác định hoặc được các ứng dụng khác khai báo và cũng có thể xác định các quyền của chính nó.

  • android:tên

tên quyền

  • android:nhãn

tên của quyền được hiển thị cho người dùng

  • android:mô tả

mô tả quyền

  • android:biểu tượng

biểu tượng quyền

  • android:nhóm quyền

xác định thành viên trong một nhóm quyền

  • android:cấp độ bảo vệ

mức độ bảo vệ

Yếu tố yêu cầu các quyền mà ứng dụng phải được hệ thống cấp để nó hoạt động bình thường. Quyền được cấp trong quá trình cài đặt ứng dụng chứ không phải khi ứng dụng đang chạy.

  • android:tên

có một thuộc tính duy nhất với tên quyền android:name. Đây có thể là độ phân giải được xác định trên phần tử Ứng dụng này, một quyền được xác định trong một ứng dụng khác hoặc một trong các quyền hệ thống tiêu chuẩn, ví dụ: android:name="android.permission.CAMERA" hoặc android:name=""android.permission.READ_CONTACTS"

Các quyền phổ biến nhất

  • INTERNET - Truy cập Internet
  • READ_CONTACTS - đọc (nhưng không ghi) dữ liệu từ sổ địa chỉ của người dùng
  • WRITE_CONTACTS - ghi (nhưng không đọc) dữ liệu từ sổ địa chỉ của người dùng
  • RECEIVE_SMS - xử lý tin nhắn SMS đến
  • ACCESS_COARSE_LOCATION - Sử dụng vị trí thô bằng cách sử dụng tháp di động hoặc điểm phát sóng Wi-Fi
  • ACCESS_FINE_LOCATION - xác định vị trí chính xác bằng GPS

Yếu tố Khai báo tên cơ sở cho cây quyền. Phần tử này không tự khai báo quyền mà chỉ khai báo một không gian tên để có thể đặt thêm các quyền vào đó.

Yếu tố Xác định tên cho một tập hợp các quyền liên quan đến logic. Cả hai đều có thể được khai báo trong cùng một bảng kê khai với phần tử Quyền như được quảng cáo ở nơi khác. Phần tử này không khai báo quyền một cách trực tiếp mà chỉ khai báo một danh mục mà các quyền có thể được đặt vào đó. Một quyền có thể được đặt trong một nhóm bằng cách gán tên nhóm trong thuộc tính allowGroup của phần tử

Yếu tố khai báo một đối tượng thiết bị đo, cho phép kiểm soát sự tương tác của ứng dụng với hệ thống. Thường được sử dụng khi gỡ lỗi và kiểm tra một ứng dụng và bị xóa khỏi phiên bản phát hành của ứng dụng.

Yếu tố Cho phép bạn khai báo khả năng tương thích của ứng dụng với một phiên bản được chỉ định (hoặc các phiên bản API mới hơn) của nền tảng Android. Cấp độ API do ứng dụng khai báo được so sánh với cấp độ API của hệ thống thiết bị di động nơi ứng dụng được cài đặt.

Thuộc tính

  • android:minSdkPhiên bản

xác định mức API tối thiểu cần thiết để ứng dụng hoạt động. Hệ thống Android sẽ ngăn người dùng cài đặt ứng dụng nếu cấp API của hệ thống thấp hơn giá trị được xác định trong thuộc tính này. Bạn phải luôn khai báo thuộc tính này, ví dụ: android:minSdkVersion="3"

  • android:maxSDKVPhiên bản

cho phép bạn xác định phiên bản mới nhất mà chương trình của bạn sẵn sàng hỗ trợ. Ứng dụng của bạn sẽ ẩn trong Android Market đối với các thiết bị có phiên bản mới hơn. Bạn nên cài đặt nó khi bạn hoàn toàn chắc chắn rằng ứng dụng sẽ không hoạt động chính xác trên nền tảng mới.

  • targetSDKPhiên bản

cho phép bạn chỉ định nền tảng mà bạn đã phát triển và thử nghiệm ứng dụng. Bằng cách đặt giá trị cho thuộc tính này, bạn đang thông báo cho hệ thống rằng không cần thay đổi nào để hỗ trợ phiên bản cụ thể này.

Yếu tố cho biết cấu hình phần cứng và phần mềm của thiết bị di động cần thiết cho ứng dụng. Ví dụ: một ứng dụng có thể xác định yêu cầu thiết bị phải có bàn phím vật lý hoặc USB-nopTa. Thông số kỹ thuật được sử dụng để tránh cài đặt ứng dụng trên các thiết bị không hỗ trợ cấu hình được yêu cầu. Nếu ứng dụng của bạn có thể hoạt động với các cấu hình thiết bị khác nhau, bạn cần đưa các thành phần cụ thể vào tệp kê khai cho mỗi cấu hình. Bạn có thể chỉ định bất kỳ sự kết hợp nào có chứa. thiết bị sau

  • reqFiveWayNav - Sử dụng true nếu ứng dụng yêu cầu thiết bị đầu vào hỗ trợ điều hướng lên, xuống, trái, phải và nhấp vào mục đã chọn. Những thiết bị này bao gồm trackball và D-pad. Về cơ bản đã lỗi thời
  • reqHardKeyboard - Sử dụng true nếu ứng dụng yêu cầu bàn phím phần cứng.
  • reqKeyboardType - cho phép bạn đặt loại bàn phím: nokeys, qwerty, 12key, không xác định
  • reqNavigation - chỉ định một trong các giá trị: nonav, dpad, trackball, bánh xe hoặc không xác định nếu cần có thiết bị điều hướng
  • reqTouchScreen - nếu cần có màn hình cảm ứng, hãy sử dụng giá trị mong muốn từ các tùy chọn có thể có: notch, stylus, ngón tay, không xác định. Bây giờ hầu như tất cả các thiết bị đều có màn hình cảm ứng nên nó cũng lỗi thời rồi

Ứng dụng sẽ không cài đặt trên thiết bị không phù hợp với cấu hình bạn đặt. Tốt nhất, bạn nên phát triển một ứng dụng có thể hoạt động với mọi tổ hợp thiết bị đầu vào. Trong trường hợp này không cần thiết.

Yếu tố tuyên bố chức năng nhất định cần thiết để ứng dụng hoạt động. Bằng cách này, ứng dụng sẽ không được cài đặt trên các thiết bị không có chức năng cần thiết. Ví dụ: một ứng dụng có thể phát hiện ra rằng nó yêu cầu máy ảnh tự động lấy nét. Nếu thiết bị không tích hợp camera tự động lấy nét thì ứng dụng sẽ không được cài đặt.

Thuộc tính có thể

  • android.hardware.máy ảnh

yêu cầu phần cứng máy ảnh

  • android.hardware.máy ảnh.autofocus

Cần có máy ảnh lấy nét tự động

Danh sách có thể được nhìn thấy ở đây.

Yếu tố xác định độ phân giải màn hình cần thiết để thiết bị hoạt động (đối với các phiên bản cũ hơn của thiết bị Android). Theo mặc định, một ứng dụng hiện đại có API cấp 4 trở lên sẽ hỗ trợ tất cả các kích thước màn hình và nên bỏ qua thành phần này.

Những giá trị khả thi

  • màn hình nhỏ

thường là màn hình QVGA

  • màn hình bình thường

Màn hình HVGA và WQVGA tiêu chuẩn

  • màn hình lớn

màn hình lớn

  • bất kỳ mật độ nào

được đặt thành true nếu ứng dụng của bạn có khả năng mở rộng để hiển thị trên bất kỳ độ phân giải màn hình nào.

Theo mặc định, mỗi thuộc tính được đặt thành true. Bạn có thể chỉ định kích thước màn hình nào mà ứng dụng của bạn không hỗ trợ.

Yếu tố một trong những thành phần chính của tệp kê khai, chứa mô tả về các thành phần ứng dụng có sẵn trong gói: kiểu, biểu tượng, v.v. Chứa các phần tử con khai báo từng thành phần có trong ứng dụng. Chỉ có thể có một phần tử trong bảng kê khai .

Yếu tố thông báo hoạt động. Nếu ứng dụng chứa nhiều Hoạt động, đừng quên khai báo chúng trong tệp kê khai, tạo một phần tử riêng cho từng Hoạt động . Nếu một hoạt động không được khai báo trong tệp kê khai, nó sẽ không hiển thị với hệ thống và sẽ không được khởi chạy khi ứng dụng chạy.

Lớp này có bộ lọc cuộc gọi được đăng ký để xác định rằng hành động này đang chạy trong ứng dụng (hành động android:name="android.intent.action.MAIN"). Định nghĩa danh mục (danh mục android:name="android.intent.category.LAUNCHER") chỉ định rằng ứng dụng này được thêm vào thư mục ứng dụng trên thiết bị Android. @ giá trị các tệp tài nguyên trực tiếp chứa các giá trị thực tế. Điều này giúp làm việc dễ dàng hơn với các tài nguyên khác nhau như chuỗi, màu sắc, biểu tượng.

Thuộc tính

  • android:tên

tên lớp. Tên phải bao gồm tên gói đầy đủ, nhưng vì tên gói đã được xác định trong phần tử gốc , tên của lớp thực hiện hoạt động có thể được viết dưới dạng viết tắt, bỏ tên gói

  • android:nhãn

nhãn văn bản hiển thị cho người dùng

Yếu tố chứa nhiều thuộc tính khác xác định độ phân giải, hướng màn hình, v.v. Thay đổi cấu hình trong khi chương trình đang chạy

Khi ngôn ngữ, khu vực hoặc cấu hình phần cứng thay đổi, Android sẽ dừng tất cả các ứng dụng rồi khởi động lại chúng, tải lại các giá trị từ tài nguyên. Hành vi như vậy không phải lúc nào cũng phù hợp hoặc mong muốn. Ví dụ: một số thay đổi về cấu hình (hướng màn hình trong không gian, khả năng truy cập bàn phím) có thể xảy ra chỉ vì người dùng xoay thiết bị hoặc trượt bàn phím ra. Bạn có thể tùy chỉnh cách ứng dụng của mình phản ứng với những thay đổi này bằng cách phát hiện chúng và tự mình thực hiện hành động. Để buộc một Hoạt động giám sát các thay đổi về cấu hình khi chương trình chạy, hãy thêm thuộc tính android:configChanges vào nút của Hoạt động đó trong tệp kê khai, chỉ định những sự kiện bạn muốn xử lý.

Dưới đây là một số giá trị có thể được sử dụng để mô tả các thay đổi về cấu hình:

  • hướng - vị trí màn hình đã được thay đổi từ dọc sang ngang (hoặc ngược lại);
  • keyboardHidden - bàn phím được mở rộng hoặc ẩn;
  • fontScale - người dùng đã thay đổi kích thước phông chữ ưa thích;
  • ngôn ngữ - người dùng đã chọn cài đặt ngôn ngữ mới;
  • bàn phím - loại bàn phím đã thay đổi; ví dụ: một chiếc điện thoại có thể có bảng điều khiển 12 phím, khi xoay sẽ hiển thị một bàn phím chính thức;
  • màn hình cảm ứng hoặc điều hướng - loại bàn phím hoặc phương pháp điều hướng đã thay đổi. Theo quy định, những sự kiện như vậy không xảy ra.

Trong một số trường hợp, nhiều sự kiện sẽ xảy ra cùng lúc. Ví dụ: khi người dùng trượt bàn phím ra, hầu hết các thiết bị đều tạo ra các sự kiện định hướng và ẩn bàn phím. Bạn có thể chọn nhiều sự kiện mà bạn muốn tự xử lý bằng cách phân tách chúng bằng ký hiệu |.

Sự hiện diện của thuộc tính android:configChanges sẽ ngăn ứng dụng khởi động lại khi cấu hình được thay đổi. Thay vào đó, phương thức onConfigurationChanged() được kích hoạt bên trong Hoạt động. Ghi đè nó để có thể xử lý các thay đổi cấu hình. Sử dụng đối tượng Cấu hình đã truyền để nhận các giá trị mới. Đừng quên gọi phương thức cùng tên từ lớp cha và tải lại các giá trị đã thay đổi từ tất cả các tài nguyên được sử dụng bên trong Hoạt động.

@Override public void onConfigurationChanged(Configuration _newConfig) ( super.onConfigurationChanged(_newConfig); [ ... Cập nhật giao diện người dùng bằng cách sử dụng dữ liệu từ các tài nguyên... ] if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) ( [ ... Reaction sang hướng màn hình đã thay đổi... ] ) if (_newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) ( [ ... Phản ứng với việc đẩy/rút bàn phím ra... ] ) )

Bất kỳ thay đổi cấu hình nào chưa được đánh dấu rõ ràng để xử lý trong ứng dụng của bạn sẽ khiến Hoạt động được khởi động lại, bỏ qua lệnh gọi phương thức onConfigurationChanged.

Mỗi thẻ hỗ trợ các nút lồng nhau . Yếu tố xác định các loại ý định mà một hoạt động, dịch vụ hoặc phần chìm ý định có thể phản hồi. Bộ lọc ý định khai báo các khả năng của thành phần chính của nó - hoạt động hoặc dịch vụ có thể làm gì và loại thư mà người nhận có thể xử lý. Bộ lọc ý định cung cấp khả năng cho các thành phần máy khách truy xuất các ý định thuộc loại được khai báo, lọc ra những ý định không có ý nghĩa đối với thành phần và chứa các phần tử con , , .

Yếu tố thêm một hành động vào bộ lọc ý định. Yếu tố phải chứa một hoặc nhiều phần tử . Nếu trong phần tử Nếu những phần tử này không xuất hiện thì đối tượng ý định sẽ không đi qua bộ lọc. Ví dụ về khai báo hành động:

Yếu tố chỉ định danh mục thành phần mà ý định sẽ xử lý. Đây là các hằng chuỗi được xác định trong lớp ý định, ví dụ:

Yếu tố thêm đặc tả dữ liệu vào bộ lọc ý định. Đặc tả có thể chỉ là một kiểu dữ liệu (thuộc tính mimeType), một URI hoặc một LOẠI dữ liệu cộng với một URI. Ý nghĩa của URI được xác định bởi các thuộc tính riêng biệt cho từng phần của nó, tức là URI được chia thành các phần: android:scheme, android:host, android:port, android:path hoặc android:pathPrefix, android:pathPattern.

Yếu tố xác định một cặp tên-giá trị cho một phần tử dữ liệu tùy ý bổ sung có thể được cung cấp cho thành phần chính. Một phần tử cấu thành có thể chứa bất kỳ số phần tử nào .

Yếu tố là bí danh cho Hoạt động được xác định trong thuộc tính targetActivity. Hoạt động đích phải ở trong cùng một ứng dụng với bí danh và phải được khai báo trước bí danh hoạt động trong tệp kê khai. Bí danh thể hiện hoạt động mục tiêu như một thực thể độc lập. Bí danh có thể có bộ bộ lọc ý định riêng để xác định ý định nào có thể kích hoạt hoạt động mục tiêu và cách hệ thống sẽ xử lý hoạt động đó. Ví dụ: bộ lọc ý định trên bí danh hoạt động có thể xác định cờ android:name="android.intent.action.MAIN" và android:name="android.intent.category.LAUNCHER", khiến hoạt động mục tiêu tải khi ứng dụng bắt đầu ngay cả khi những cờ này không được đặt trong bộ lọc ý định trên hoạt động mục tiêu.

Yếu tố tuyên bố một dịch vụ là một trong các thành phần ứng dụng. Tất cả các dịch vụ phải được đại diện bởi một phần tử trong tệp kê khai. Các dịch vụ chưa được khai báo sẽ không được hệ thống phát hiện và sẽ không bao giờ được khởi động. Phần tử này có nhiều thuộc tính xác định tên, khả năng truy cập, quyền, quy trình, v.v. Hỗ trợ các nút lồng nhau

Yếu tố tuyên bố bộ nhận ý định quảng bá là một trong các thành phần ứng dụng. Bộ thu ý định phát sóng cho phép ứng dụng nhận các ý định được hệ thống hoặc ứng dụng khác phát đi, ngay cả khi các thành phần ứng dụng khác không hoạt động.

Yếu tố Khai báo nhà cung cấp nội dung (nguồn dữ liệu) để kiểm soát quyền truy cập vào cơ sở dữ liệu. Tất cả các nhà cung cấp nội dung là một phần của ứng dụng phải được thể hiện trong các phần tử Trong tệp kê khai. Nếu không được khai báo thì chúng sẽ không hoạt động vì hệ thống sẽ không thể nhìn thấy chúng. Yếu tố Chứa tập hợp các phần tử con riêng để thiết lập quyền truy cập dữ liệu:

  • ;
  • ;

Phần tử này có nhiều thuộc tính xác định tên, tính khả dụng, quyền, quy trình, v.v.

Yếu tố là con của Nó xác định ai có thể được cấp quyền đối với các tập hợp con dữ liệu của nhà cung cấp nội dung. Cấp quyền là một cách cho phép khách hàng không có quyền truy cập vào toàn bộ dữ liệu có thể truy cập vào một tập hợp con dữ liệu do nhà cung cấp nội dung cung cấp. Nếu thuộc tính GranturiPermissions của nhà cung cấp nội dung là đúng thì quyền sẽ được cấp cho mọi dữ liệu do nhà cung cấp nội dung cung cấp. Tuy nhiên, nếu thuộc tính được đặt thành false thì chỉ có thể cấp quyền cho các tập hợp con dữ liệu được xác định bởi phần tử đó. Nhà cung cấp nội dung có thể chứa bất kỳ số lượng phần tử nào .

Yếu tố Phần tử con cho Xác định đường dẫn và các quyền cần thiết cho một tập hợp con dữ liệu cụ thể trong nhà cung cấp thông tin. Phần tử này có thể được xác định nhiều lần để cung cấp nhiều đường dẫn.

Yếu tố chỉ định một thư viện công cộng mà ứng dụng sẽ được liên kết. Phần tử này hướng dẫn hệ thống đưa mã thư viện vào trình nạp lớp cho gói ứng dụng. Theo mặc định, mỗi dự án được đóng gói cùng với các thư viện Android, bao gồm các gói cốt lõi để xây dựng ứng dụng (với các lớp có mục đích chung như Hoạt động, Dịch vụ, Ý định, Chế độ xem, Nút, Ứng dụng, ContentProvider, v.v.). Tuy nhiên, một số gói (chẳng hạn như bản đồ và awt) nằm trong các thư viện riêng biệt không được liên kết tự động với ứng dụng. Nếu ứng dụng sử dụng các gói từ các thư viện này hoặc các gói khác từ nhà phát triển bên thứ ba thì cần phải tạo liên kết rõ ràng với các thư viện này và tệp kê khai phải chứa một phần tử riêng biệt .

AndroidManifest.xml – cung cấp thông tin chi tiết về ứng dụng. Trong mọi ứng dụng Android, bạn sẽ thấy tệp này vì nó được yêu cầu để tạo một ứng dụng trên hệ điều hành Android.

Mục đích

Bạn có thể định cấu hình các tính năng sau trong AndroidManifest.xml:

1. Chỉ định tên gói Java của ứng dụng, gói này đóng vai trò là mã định danh duy nhất;

2. Mô tả các thành phần của ứng dụng, dịch vụ;

3. Chỉ định danh sách các quyền cần thiết để truy cập các phần được bảo vệ của API và tương tác với các ứng dụng khác;

4. Cho phép truy cập vào các tài nguyên mà ứng dụng của bên thứ ba phải có để tương tác với các thành phần của ứng dụng này;

5. Chỉ định cấp độ API Android tối thiểu và tối đa cần thiết để ứng dụng hoạt động;

Cấu trúc 'AndroidManifest.xml'

Khi chuyển sang viết một dự án phức tạp hơn, bạn sẽ nhận thấy rằng bạn thường cần tham khảo tệp này để định cấu hình một số thành phần bạn cần.

Nhưng để định cấu hình thứ gì đó ở đó, tôi nghĩ sẽ không phải là một ý tưởng tồi nếu bạn biết những gì cần thiết và tại sao, đây chính xác là những gì sẽ được thảo luận bên dưới.

Dưới đây là tất cả các tính năng chính của AndroidManifest.xml, chúng được trình bày dưới dạng thẻ xml.

. . . . . . . . .

Tệp kê khai trông như thế này, trong đó mỗi thẻ có thể lưu trữ một số loại cấu hình.

Và bây giờ, từng cái một, cái gì và tại sao.

Nhãn

Đây là thẻ quan trọng nhất trong đó toàn bộ cấu hình dự án được lồng vào nhau.

Theo mặc định, nó được tạo cùng với tệp AndroidManifest và ban đầu có một bộ tham số ban đầu:

Những thông số này có ý nghĩa gì?

xmins:android– xác định không gian tên Android;

bưu kiện– Xác định tên duy nhất của gói ứng dụng mà bạn đã chỉ định khi tạo dự án.

Tại sao bạn cần chỉ định gói? Nếu bạn muốn tải ứng dụng của mình lên Chợ ứng dụng Google Play, sau đó nó sẽ kiểm tra tính duy nhất khi chấp nhận ứng dụng, vì vậy bạn nên sử dụng tên của mình để tránh xung đột với các nhà phát triển khác.

android:Mã phiên bản– về cơ bản đây là phiên bản ứng dụng của bạn. Khi phát hành phiên bản mới, bạn chỉ ra trong trường này, nó phải là số nguyên.

Ở trên chúng tôi nói về tính độc đáo của gói, vì vậy nếu trước đây bạn đã tải xuống Google Playứng dụng của bạn, thì khi bạn quyết định tải xuống phiên bản cập nhật của ứng dụng, bạn cần phải tuân thủ một số quy tắc. Tên gói phải khớp với tên đã được Google Play tải xuống và cho biết phiên bản android:versionCode cao hơn. Nhưng điều này với điều kiện là bạn đang phát hành phiên bản mới của ứng dụng; nếu bạn muốn thêm một phiên bản đã sửa một chút, hãy đọc phần bên dưới.

Bằng cách thay đổi tham số này và tải ứng dụng lên Google Play, tất cả người dùng ứng dụng của bạn sẽ được đề nghị cập nhật lên phiên bản mới của ứng dụng.

android:tên phiên bản – cho biết số phiên bản người dùng. Nếu bạn tìm thấy một số sai sót trong ứng dụng của mình và sửa chúng, thì trong trường hợp này, bạn có thể chỉ định phiên bản mới cho trường này, điều này sẽ cho Google Play biết rằng đây không phải là phiên bản mới của ứng dụng mà là phiên bản cải tiến. Bạn có thể sử dụng một chuỗi hoặc tài nguyên chuỗi để đặt tên cho một phiên bản.

Bằng cách thay đổi tham số này và tải ứng dụng lên Google Play, tất cả người dùng ứng dụng của bạn sẽ được đề nghị cập nhật lên phiên bản đã sửa đổi của ứng dụng.

Nhãn

Nhãn Cho phép bạn yêu cầu các quyền mà ứng dụng phải được hệ thống cấp để ứng dụng hoạt động bình thường.

Quyền được cấp trong quá trình cài đặt ứng dụng chứ không phải khi ứng dụng đang chạy. có một thuộc tính duy nhất với tên quyền android:name.

android:tên– cho phép bạn cấp quyền sử dụng tài nguyên hệ thống. Ví dụ:

android:name=' android.permission. MÁY ẢNH'
hoặc
android:name='
android.permission. READ_CONTACTS'

Quyền phổ biến nhất

INTERNET – truy cập Internet;

READ_CONTACTS – đọc dữ liệu từ sổ địa chỉ của người dùng;

– WRITE_CONTACTS – ghi dữ liệu từ sổ địa chỉ của người dùng;

– RECEIVE_SMS – xử lý tin nhắn SMS đến;

– ACCESS_COARSE_LOCATION – sử dụng xác định vị trí gần đúng bằng cách sử dụng tháp di động hoặc điểm truy cập Wi-Fi;

– ACCESS_FINE_LOCATION – xác định vị trí chính xác bằng GPS.

Nhãn

– cho phép bạn đặt quyền sử dụng tài nguyên hệ thống hoặc cấm sử dụng các thành phần ứng dụng.

android:tên tên quyền

android:nhãn - tên của quyền được hiển thị cho người dùng

android:mô tả – mô tả quyền

android:biểu tượng biểu tượng quyền

android:permissionGroup – xác định thành viên trong một nhóm quyền

android: mức độ bảo vệ – mức độ bảo vệ

Nhãn

– Khai báo tên cơ sở cho cây quyền.

Phần tử này không tự khai báo quyền mà chỉ khai báo một không gian tên để có thể đặt thêm các quyền vào đó.

Nhãn

xác định tên cho một tập hợp các quyền liên quan đến logic.

Phần tử này không khai báo quyền một cách trực tiếp mà chỉ khai báo một danh mục mà các quyền có thể được đặt vào đó.

Một quyền có thể được đặt trong một nhóm bằng cách gán tên nhóm trong thuộc tính nhóm quyền yếu tố

Nhãn

khai báo một đối tượng thiết bị đo đạc, giúp kiểm soát sự tương tác của ứng dụng với hệ thống.

Thường được sử dụng khi gỡ lỗi và kiểm tra một ứng dụng và bị xóa khỏi phiên bản phát hành của ứng dụng.

Nhãn

Cho phép bạn khai báo khả năng tương thích của ứng dụng với một phiên bản được chỉ định (hoặc các phiên bản API mới hơn) của nền tảng Android.

Cấp độ API do ứng dụng khai báo được so sánh với cấp độ API của hệ thống thiết bị di động nơi ứng dụng được cài đặt.

Thẻ này có các thuộc tính sau:

android:minSdkVersion – xác định mức API tối thiểu cần thiết để ứng dụng hoạt động.

Hệ thống Android sẽ ngăn người dùng cài đặt ứng dụng nếu cấp API của hệ thống thấp hơn giá trị được xác định trong thuộc tính này. Bạn phải luôn khai báo thuộc tính này, ví dụ:

android:minSdkPhiên bản=”17”

android:maxSDKVersion – cho phép bạn xác định phiên bản mới nhất mà ứng dụng của bạn sẵn sàng hỗ trợ.

Ứng dụng của bạn sẽ ẩn trên Google Play đối với các thiết bị có phiên bản mới hơn.

targetSDKVersion – cho phép bạn chỉ định nền tảng mà bạn đã phát triển và thử nghiệm ứng dụng.

Bằng cách đặt giá trị cho thuộc tính này, bạn đang thông báo cho hệ thống rằng không cần thay đổi nào để hỗ trợ phiên bản cụ thể này.

Nhãn

cho biết cấu hình phần cứng và phần mềm của thiết bị di động cần thiết cho ứng dụng.

Ví dụ: một ứng dụng yêu cầu camera trước hoặc cổng USB để hoạt động. Thông số kỹ thuật được sử dụng để tránh cài đặt ứng dụng trên các thiết bị không hỗ trợ cấu hình được yêu cầu.

Nếu ứng dụng của bạn có thể hoạt động với các cấu hình thiết bị khác nhau, bạn cần đưa các thành phần cụ thể vào tệp kê khai cho mỗi cấu hình. Bạn có thể chỉ định bất kỳ sự kết hợp nào có chứa các thiết bị sau

– reqHardKeyboard- Giá trị sử dụng ĐÚNG VẬY , nếu ứng dụng yêu cầu bàn phím phần cứng;

– reqKeyboardType– cho phép bạn đặt loại bàn phím: không có phím, qwerty, phím mười hai, không xác định;

– reqNavigation– chỉ định một trong các giá trị: nonav, dpad, bi xoay, bánh xe hoặc không xác định, nếu cần có thiết bị dẫn đường;

Ứng dụng sẽ không cài đặt trên thiết bị không phù hợp với cấu hình bạn đặt.

Tốt nhất, bạn nên phát triển một ứng dụng có thể hoạt động với mọi tổ hợp thiết bị đầu vào. Trong trường hợp này không cần thiết.

Nhãn

tuyên bố chức năng nhất định cần thiết để ứng dụng hoạt động.

Bằng cách này, ứng dụng sẽ không được cài đặt trên các thiết bị không có chức năng cần thiết. Ví dụ: một ứng dụng có thể phát hiện ra rằng ứng dụng đó yêu cầu máy ảnh mặt trước có tính năng tự động lấy nét. Nếu thiết bị không tích hợp camera trước tự động lấy nét thì ứng dụng sẽ không được cài đặt.

android.hardware.máy ảnh.front- yêu cầu phần cứng camera

android.hardware.máy ảnh.autofocus– Yêu cầu máy ảnh có khả năng lấy nét tự động

Tắt. Bạn có thể xem tất cả các thông số trong tài liệu Android, đây là liên kết.

Bạn có thể ghi đè yêu cầu mặc định bằng cách thêm thuộc tính yêu cầu có ý nghĩa SAI.

Ví dụ: nếu chương trình của bạn không cần máy ảnh hỗ trợ lấy nét tự động:

Nhãn

xác định độ phân giải màn hình cần thiết để thiết bị hoạt động.

Thẻ này cho phép bạn chỉ định kích thước của màn hình mà ứng dụng được tạo. Hệ thống sẽ chia tỷ lệ ứng dụng của bạn dựa trên bố cục của bạn trên các thiết bị hỗ trợ độ phân giải màn hình mà bạn chỉ định.

Đối với các trường hợp khác, hệ thống sẽ kéo giãn bố cục nhiều nhất có thể.

Giá trị:

màn hình nhỏ - Màn hình QVGA

màn hình bình thườngmàn hình tiêu chuẩn HVGA và WQVGA

màn hình lớnmàn hình lớn

xlargeScreen– màn hình rất lớn vượt quá kích thước của máy tính bảng

bất kỳMật độ nào– thiết lập giá trị ĐÚNG VẬY, nếu ứng dụng của bạn có khả năng mở rộng để hiển thị trên bất kỳ độ phân giải màn hình nào.

Theo mặc định, mỗi thuộc tính được đặt thành ĐÚNG VẬY. Bạn có thể chỉ định kích thước màn hình nào mà ứng dụng của bạn không hỗ trợ.

Kể từ API 13 – Android 3, thẻ có thuộc tính mới:

yêu cầu Chiều rộng nhỏ nhấtDp– cho biết chiều rộng màn hình được hỗ trợ tối thiểu tính bằng pixel độc lập với thiết bị. Nó có thể được sử dụng để lọc các thiết bị khi đặt ứng dụng vào Google Play

tương thíchWidthLimitDp– đặt giới hạn tỷ lệ trên cho ứng dụng của bạn. Nếu màn hình thiết bị mở rộng ra ngoài ranh giới được chỉ định, hệ thống sẽ kích hoạt chế độ tương thích.

chiều rộng lớn nhấtGiới hạnDp– chỉ định giới hạn trên tuyệt đối mà ứng dụng của bạn chắc chắn không thể mở rộng. Trong trường hợp này, ứng dụng chạy ở chế độ tương thích, không thể tắt chế độ này.

Ví dụ sử dụng:

Nên tránh tình huống tương tự và phát triển bố cục cho bất kỳ màn hình nào.

Nhãn

chỉ định cấu hình tương thích cho từng màn hình. Chỉ có một bản sao phần tử được phép trong bảng kê khai nhưng nó có thể chứa nhiều phần tử .

Mỗi phần tử cho biết kích thước màn hình cụ thể mà ứng dụng tương thích.

Phần tử này mang tính thông tin và có thể được các dịch vụ bên ngoài (chẳng hạn như Google Play) sử dụng để hiểu rõ hơn về khả năng tương thích của ứng dụng với các cấu hình màn hình cụ thể và bật tính năng lọc cho người dùng.

Công nghệ này có hai thuộc tính:

android:kích thước màn hình– cho biết kích thước màn hình.

Giá trị:

nhỏ nhỏ;

bình thường - trung bình;

lớn – lớn;

xlarge – rất lớn;

android:màn hình– chỉ định dpi

Giá trị:

ldpi– ~120dpi

mdpi–~160dpi

hdpi – ~240dpi

xhdpi – ~320dpi

Ví dụ sử dụng:

Nhãn

chỉ định một kết cấu nén GL duy nhất được ứng dụng hỗ trợ.

Ví dụ sử dụng:

Giá trị:

GL_OES_nén_ETC1_RGB8_kết cấu– được chỉ định trong OpenGL ES 2.0 và có sẵn trên tất cả các thiết bị Android hỗ trợ OpenGL ES 2.0.

GL_OES_compression_paletted_texture – bảng nén kết cấu chung.

GL_AMD_compression_3DC_texture– Nén kết cấu ATI 3DC.

Tất cả các giá trị có thể được xem tại liên kết này.

Nhãn

– một trong những thành phần chính của tệp kê khai, chứa mô tả về các thành phần ứng dụng có sẵn trong gói: kiểu, biểu tượng, v.v.

Chứa các phần tử con khai báo từng thành phần tạo nên ứng dụng. Chỉ có thể có một phần tử trong bảng kê khai .

Dưới đây là mô tả về các thẻ được lồng trong thẻ .

Nhãn

biểu thị hoạt động.

Nếu một ứng dụng chứa nhiều hoạt động, chúng phải được khai báo trong tệp kê khai, tạo thành phần riêng cho từng hoạt động . Nếu một hoạt động không được khai báo trong tệp kê khai, nó sẽ không hiển thị với hệ thống và sẽ không được khởi chạy khi ứng dụng chạy hoặc thông báo lỗi sẽ được hiển thị.

Ví dụ sử dụng:

android:tên- tên lớp.

Tên phải bao gồm tên gói đầy đủ, nhưng nếu tên gói đã được bao gồm trong , tên của lớp thực hiện hoạt động có thể được viết dưới dạng viết tắt, bỏ qua tên gói.

android:nhãn - nhãn văn bản được hiển thị cho người dùng.

Nhãn

Mỗi thẻ hỗ trợ các nút lồng nhau . Yếu tố xác định các loại ý định mà một hoạt động, dịch vụ hoặc phần chìm ý định có thể phản hồi. Bộ lọc ý định cung cấp khả năng cho các thành phần máy khách truy xuất các ý định thuộc loại được khai báo, lọc ra những ý định không có ý nghĩa đối với thành phần và chứa các phần tử con , , .

Nhãn

Yếu tố thêm một hành động vào bộ lọc ý định. Yếu tố phải chứa một hoặc nhiều phần tử . Nếu trong phần tử Nếu những phần tử này không xuất hiện thì đối tượng ý định sẽ không đi qua bộ lọc. Ví dụ về khai báo hành động:

Nhãn

– chỉ định danh mục thành phần mà ý định sẽ xử lý. Đây là các hằng chuỗi được xác định trong lớp ý định, ví dụ:

Nhãn

– thêm đặc tả dữ liệu vào bộ lọc ý định.

Đặc tả có thể chỉ là một kiểu dữ liệu (thuộc tính mimeType), một URI hoặc một kiểu dữ liệu cộng với một URI.

Giá trị của URI được xác định bởi các thuộc tính riêng biệt cho từng phần của nó, tức là URI được chia thành các phần:

android:path hoặc android:pathPrefix;

android:pathPattern.

Nhãn

xác định một cặp tên-giá trị cho một phần tử dữ liệu tùy ý bổ sung có thể được cung cấp cho thành phần chính.

Một phần tử cấu thành có thể chứa bất kỳ số phần tử nào .

Nhãn

là bí danh cho Hoạt động được xác định trong thuộc tính hoạt động mục tiêu.

Hoạt động đích phải ở trong cùng một ứng dụng với bí danh và phải được khai báo trước bí danh hoạt động trong tệp kê khai. Bí danh thể hiện hoạt động mục tiêu như một thực thể độc lập. Bí danh có thể có bộ bộ lọc ý định riêng để xác định ý định nào có thể kích hoạt hoạt động mục tiêu và cách hệ thống sẽ xử lý hoạt động đó.

Ví dụ: bộ lọc ý định trên bí danh hoạt động có thể xác định cờ:

android:name='android.intent.action.MAIN'

android:name='android.intent.category.LAUNCHER'

khiến hoạt động mục tiêu tải khi ứng dụng khởi động ngay cả khi các bộ lọc ý định trên hoạt động mục tiêu không được đặt các cờ này.

Nhãn

tuyên bố một dịch vụ là một trong các thành phần ứng dụng. Các dịch vụ chưa được khai báo sẽ không được hệ thống phát hiện và sẽ không bao giờ được khởi động.

Nhãn

tuyên bố bộ nhận ý định quảng bá là một trong các thành phần ứng dụng.

Bộ thu ý định phát sóng cho phép ứng dụng nhận các ý định được hệ thống hoặc ứng dụng khác phát đi, ngay cả khi các thành phần ứng dụng khác không hoạt động.

Nhãn

Yếu tố khai báo nhà cung cấp nội dung (nguồn dữ liệu) để kiểm soát quyền truy cập vào cơ sở dữ liệu.

Yếu tố Chứa bộ riêng của nó phần tử conđể đặt quyền truy cập dữ liệu:

Nhãn

Yếu tố là con của

Nó xác định ai có thể được cấp quyền đối với các tập hợp con dữ liệu của nhà cung cấp nội dung.

Cấp quyền là một cách cho phép khách hàng không có quyền truy cập vào toàn bộ dữ liệu có thể truy cập vào một tập hợp con dữ liệu do nhà cung cấp nội dung cung cấp.

Thuộc tính nếu GranturiQuyền vấn đề của nhà cung cấp nội dung ĐÚNG VẬY , thì quyền sẽ được cấp cho mọi dữ liệu do nhà cung cấp nội dung cung cấp. Tuy nhiên, nếu thuộc tính được đưa vào SAI , quyền chỉ có thể được cấp cho các tập hợp con dữ liệu được xác định bởi phần tử đó.

Nhà cung cấp nội dung có thể chứa bất kỳ số lượng phần tử nào .

Nhãn

– phần tử con cho Xác định đường dẫn và các quyền cần thiết cho một tập hợp con dữ liệu cụ thể trong nhà cung cấp thông tin.

Phần tử này có thể được xác định nhiều lần để cung cấp nhiều đường dẫn.

Nhãn

chỉ định một thư viện công cộng mà ứng dụng sẽ được liên kết.

Phần tử này hướng dẫn hệ thống đưa mã thư viện vào trình nạp lớp cho gói ứng dụng. Theo mặc định, mỗi dự án được đóng gói cùng với các thư viện Android, bao gồm các gói cốt lõi để xây dựng ứng dụng.

Tuy nhiên, một số gói nằm trong các thư viện riêng biệt không được liên kết tự động với ứng dụng. Nếu ứng dụng sử dụng các gói từ các thư viện này hoặc các gói khác từ nhà phát triển bên thứ ba thì cần phải tạo liên kết rõ ràng với các thư viện này và tệp kê khai phải chứa một phần tử riêng biệt .

Các tài nguyên sau đây đã được sử dụng để viết bài viết này:

Trong thư mục gốc của mỗi ứng dụng phải có một tệp có tên AndroidManifest.xml (chính xác là tên của nó). Tệp kê khai chứa thông tin quan trọng về ứng dụng được hệ thống Android yêu cầu. Chỉ sau khi nhận được thông tin này, hệ thống mới có thể thực thi bất kỳ mã ứng dụng nào. Trong số những thứ khác, tệp kê khai thực hiện những việc sau:

  • Nó chỉ định tên gói Java cho ứng dụng. Tên gói này đóng vai trò là mã định danh duy nhất cho ứng dụng.
  • Nó mô tả các thành phần ứng dụng—các hoạt động, dịch vụ, bộ thu quảng bá và nhà cung cấp nội dung—tạo nên ứng dụng. Nó chứa tên của các lớp triển khai từng thành phần và công bố các khả năng của chúng (ví dụ: chỉ định những thông báo nào chúng có thể chấp nhận). Dựa trên những khai báo này, hệ thống Android có thể xác định ứng dụng bao gồm những thành phần nào và chúng có thể được khởi chạy trong những điều kiện nào.
  • Nó xác định tiến trình nào sẽ lưu trữ các thành phần ứng dụng.
  • Nó khai báo những quyền nào phải được cấp cho một ứng dụng để nó có thể truy cập các phần được bảo vệ của API và tương tác với các ứng dụng khác.
  • Nó cũng khai báo các quyền cần thiết để tương tác với các thành phần của một ứng dụng nhất định.
  • Nó chứa danh sách các lớp cung cấp thông tin hồ sơ và thông tin khác khi ứng dụng chạy. Những khai báo này chỉ xuất hiện trong tệp kê khai trong khi ứng dụng đang được phát triển và gỡ lỗi, đồng thời bị xóa trước khi xuất bản.
  • Nó khai báo mức API Android tối thiểu mà ứng dụng yêu cầu.
  • Nó chứa danh sách các thư viện mà ứng dụng nên liên kết.

Cấu trúc tệp kê khai

Sơ đồ sau đây cho phép bạn làm quen với cấu trúc chung của tệp kê khai và tất cả các thành phần có thể chứa trong đó. Mỗi phần tử cùng với tất cả các thuộc tính của nó được mô tả đầy đủ trong một tệp riêng biệt. Để xem thông tin chi tiết về bất kỳ phần tử nào, hãy nhấp vào tên phần tử trên sơ đồ, trong danh sách các phần tử theo thứ tự bảng chữ cái xuất hiện sau sơ đồ hoặc bất kỳ nơi nào khác mà phần tử đó được đề cập.

. . . . . . . . .

Sau đây là danh sách, theo thứ tự bảng chữ cái, của tất cả các thành phần có thể có trong tệp kê khai. Chỉ những phần tử này mới có thể ở đó và không thể thêm phần tử hoặc thuộc tính nào khác.

Quy ước thành phần tệp

Một số quy ước và quy tắc áp dụng cho tất cả các thành phần và thuộc tính từ tệp kê khai:

Yếu tố Chỉ có các yếu tố và được yêu cầu. Cả hai đều phải có trong tệp kê khai nhưng chúng chỉ có thể được chỉ định một lần. Hầu hết các phần tử khác có thể được chỉ định nhiều lần hoặc không hề - mặc dù ít nhất một số phần tử trong số chúng là cần thiết để tệp kê khai có ý nghĩa.

Nếu một phần tử có bất kỳ nội dung nào thì đó là các phần tử khác. Tất cả các giá trị được chỉ định bằng cách sử dụng các thuộc tính chứ không phải dưới dạng dữ liệu ký tự trong phần tử.

Các phần tử ở cùng cấp độ thường không được sắp xếp theo thứ tự. Ví dụ: các phần tử và có thể được chỉ định theo bất kỳ thứ tự nào. (Phần tử này là một ngoại lệ đối với quy tắc này. Nó phải tuân theo phần tử mà nó là bí danh.)

Thuộc tính Về mặt hình thức, tất cả các thuộc tính đều là tùy chọn. Tuy nhiên, một số trong số chúng phải được chỉ định để tệp có thể thực hiện được mục đích của nó. Sử dụng tài liệu này như một hướng dẫn. Đối với các thuộc tính thực sự là tùy chọn, nó chỉ định một giá trị mặc định hoặc cho biết điều gì sẽ xảy ra nếu thuộc tính đó không được chỉ định.

Ngoại trừ một số thuộc tính phần tử gốc, tất cả tên thuộc tính phải bắt đầu bằng tiền tố android:—ví dụ: android:alwaysRetainTaskState . Vì tiền tố này mang tính phổ quát nên nó thường bị bỏ qua trong tài liệu khi chỉ định thuộc tính theo tên.

Khai báo tên lớp Nhiều phần tử tương ứng với các đối tượng Java, bao gồm các phần tử cho chính ứng dụng (phần tử) và các thành phần chính của nó—hoạt động(), dịch vụ(), bộ thu phát sóng() và nhà cung cấp nội dung().

Nếu bạn định nghĩa một lớp con, như bạn hầu như luôn làm với các lớp thành phần ( , , và ), bạn thực hiện việc này bằng cách sử dụng thuộc tính name. Tên phải bao gồm tên gói đầy đủ. Ví dụ: một lớp con có thể được khai báo như sau:

. . . . . .

Tuy nhiên, nó có thể được rút ngắn. Nếu bạn chỉ định dấu chấm làm ký tự đầu tiên trên một dòng, dòng đó sẽ được thêm vào tên gói ứng dụng (được chỉ định bởi thuộc tính phần tử). Nhiệm vụ sau đây tương tự như nhiệm vụ trên:

. . . . . .

Khi thành phần Android chạy, nó sẽ tạo một phiên bản của lớp con được chỉ định theo tên. Nếu lớp con không được chỉ định, hệ thống sẽ tạo một thể hiện của lớp cơ sở.

Nhiều giá trị Nếu có thể chỉ định nhiều giá trị thì phần tử này hầu như luôn được lặp lại. Việc này được thực hiện thay vì liệt kê nhiều giá trị trong một phần tử. Ví dụ: bộ lọc Ý định có thể liệt kê nhiều hành động: . . . Giá trị tài nguyên Giá trị của một số thuộc tính có thể được hiển thị trên màn hình, chẳng hạn như nhãn và biểu tượng thao tác. Giá trị của các thuộc tính này phải được bản địa hóa, vì vậy chúng phải được đặt trong tài nguyên hoặc chủ đề. Giá trị tài nguyên được thể hiện theo định dạng sau:

@[túi nhựa:]kiểu:Tên

Ở đâu tên gói hàng có thể được bỏ qua nếu tài nguyên nằm trong cùng gói với ứng dụng, kiểu - là loại tài nguyên, chẳng hạn như "chuỗi" hoặc "có thể vẽ" và Tên -đây là tên xác định tài nguyên. Ví dụ:

Các giá trị chủ đề được thể hiện theo cách tương tự, chỉ khác là chúng bắt đầu bằng dấu "?" thay vì "@":

?[túi nhựa:]kiểu:Tên

Giá trị chuỗi Khi giá trị của thuộc tính là một chuỗi, bạn nên sử dụng dấu gạch chéo ngược kép (" \\ ") để thoát chuỗi ký tự thoát—ví dụ: " \\n " cho dòng mới hoặc " \\uxxxx " cho ký tự Unicode.

Hiển thị các chức năng trong một tập tin

Các phần sau đây mô tả cách một số tính năng của Android xuất hiện trong tệp kê khai.

Bộ lọc đối tượng ý định

Các thành phần cốt lõi của ứng dụng (hoạt động, dịch vụ và bộ thu phát sóng) được kích hoạt Đối tượng ý định. Ý định là một tập hợp thông tin (một đối tượng) mô tả một hành động bắt buộc—bao gồm dữ liệu mà hành động đó sẽ được thực hiện, danh mục các thành phần sẽ thực hiện hành động đó và các hướng dẫn liên quan khác. Hệ thống Android tìm một thành phần sẽ phản hồi với một đối tượng Intent, khởi chạy một phiên bản mới của thành phần đó nếu cần và chuyển cho nó một đối tượng Intent.

Các thành phần khai báo khả năng của chúng—các loại Ý định mà chúng có thể phản hồi—bằng cách sử dụng Bộ lọc ý định. Vì Android phải biết một thành phần có thể xử lý Ý định nào trước khi chạy nó nên các bộ lọc Ý định được chỉ định là . Một thành phần có thể có số lượng bộ lọc bất kỳ, mỗi bộ lọc mô tả một tính năng khác nhau của thành phần đó.

Một Ý định chỉ định rõ ràng thành phần mục tiêu theo tên sẽ kích hoạt thành phần đó và bộ lọc sẽ không được tính đến. Nhưng một Intent không chỉ định tên Bean đích chỉ có thể kích hoạt Bean nếu nó có thể vượt qua một trong các bộ lọc của Bean.

Để biết thông tin về cách xác thực các đối tượng Intent dựa trên các bộ lọc Intent, hãy xem tài liệu riêng.

Biểu tượng và nhãn

Một số phần tử có thuộc tính biểu tượng và nhãn cho một biểu tượng nhỏ và nhãn văn bản có thể hiển thị trên màn hình. Một số trong số chúng còn có thuộc tính mô tả cho văn bản mô tả dài hơn cũng có thể được hiển thị trên màn hình. Ví dụ: một phần tử có cả ba thuộc tính này, để khi người dùng được hỏi có cấp quyền cho ứng dụng đã yêu cầu hay không, biểu tượng thể hiện quyền, tên của quyền và mô tả về quyền đó. đòi hỏi có thể được hiển thị trên màn hình.

Trong cả hai trường hợp, biểu tượng và nhãn được chỉ định trên phần tử vùng chứa sẽ trở thành cài đặt nhãn và biểu tượng mặc định cho tất cả các phần tử con được lồng trong vùng chứa đó. Do đó, biểu tượng và nhãn được chỉ định trong phần tử là biểu tượng và nhãn mặc định được sử dụng cho từng thành phần ứng dụng. Tương tự, biểu tượng và nhãn được chỉ định cho một thành phần—chẳng hạn như thành phần—là cài đặt mặc định cho từng thành phần thành phần. Nếu một phần tử có nhãn nhưng hoạt động và bộ lọc Ý định của nó không có nhãn thì nhãn của ứng dụng sẽ được coi là nhãn cho cả hoạt động và bộ lọc Ý định của nó.

Biểu tượng và nhãn được chỉ định cho bộ lọc Ý định được sử dụng để xác định thành phần khi nó được hiển thị cho người dùng, để biểu thị chức năng mà bộ lọc quảng cáo. Ví dụ: một bộ lọc có tham số "android.intent.action.MAIN" và "android.intent.category.LAUNCHER" cho biết rằng thao tác này khởi tạo ứng dụng—nghĩa là, nó chỉ định nó là một thao tác sẽ được hiển thị trong trình khởi chạy ứng dụng. Điều này có nghĩa là biểu tượng và nhãn được chỉ định trong bộ lọc sẽ được hiển thị trong trình khởi chạy.

Quyền

Sự cho phép thể hiện sự hạn chế về quyền truy cập vào một phần mã hoặc dữ liệu có sẵn trên thiết bị. Hạn chế này được áp dụng để bảo vệ dữ liệu và mã nhạy cảm, việc sử dụng không đúng cách có thể ảnh hưởng xấu đến hoạt động của ứng dụng.

Mỗi độ phân giải được xác định bằng một nhãn duy nhất. Thông thường, nhãn chỉ ra một hành động đang bị hạn chế. Ví dụ: đây là một số quyền được xác định bởi hệ thống Android:

android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER

Một chức năng có thể được bảo vệ bởi nhiều nhất một quyền.

Nếu một ứng dụng yêu cầu quyền truy cập vào một chức năng được bảo vệ bởi một quyền thì nó phải khai báo rằng nó cần quyền đó bằng cách sử dụng một phần tử trong tệp kê khai. Sau đó, khi ứng dụng được cài đặt trên thiết bị, trình cài đặt sẽ xác định xem có cấp quyền được yêu cầu hay không bằng cách kiểm tra thẩm quyền của người ký chứng chỉ ứng dụng và trong một số trường hợp, hỏi người dùng về quyền đó. Nếu được cấp quyền, ứng dụng sẽ có thể sử dụng các tính năng được bảo vệ. Nếu không, nỗ lực truy cập các chức năng này của anh ta sẽ không thành công và người dùng sẽ không nhận được bất kỳ thông báo nào về việc này.

Một ứng dụng cũng có thể bảo vệ các thành phần của chính nó (hoạt động, dịch vụ, bộ thu phát sóng và nhà cung cấp nội dung) bằng các quyền. Nó có thể sử dụng bất kỳ quyền nào được xác định bởi đối tượng Android (được tìm thấy trong ) hoặc được các ứng dụng khác khai báo. Hoặc nó có thể tự xác định các quyền. Quyền mới được khai báo bằng phần tử. Ví dụ: một hoạt động có thể được bảo vệ như sau:

. . . . . .

Lưu ý rằng trong ví dụ này, quyền DEBIT_ACCT không chỉ được khai báo bằng phần tử mà việc sử dụng nó còn được yêu cầu bằng phần tử đó. Để các thành phần ứng dụng khác có thể chạy một hoạt động được bảo vệ, việc sử dụng nó phải được yêu cầu, ngay cả khi chính ứng dụng đó áp đặt biện pháp bảo vệ đó.

Trong cùng một ví dụ: nếu thuộc tính quyền được đặt thành quyền được khai báo ở nơi khác (ví dụ: android.permission.CALL_EMERGENCY_NUMBERS), thì không cần phải khai báo lại bằng cách sử dụng . Tuy nhiên, bạn vẫn cần yêu cầu sử dụng nó bằng .

Phần tử khai báo một không gian tên cho một nhóm quyền sẽ được xác định trong mã. Và phần tử xác định nhãn cho một tập hợp quyền (cả cho các quyền được khai báo trong tệp kê khai bằng cách sử dụng các phần tử và cho các quyền được khai báo ở nơi khác). Điều này chỉ ảnh hưởng đến cách nhóm các quyền khi hiển thị cho người dùng. Phần tử không cho biết quyền nào áp dụng cho nhóm. Anh ấy chỉ đơn giản đặt tên cho nhóm. Để bao gồm một quyền trong một nhóm, thuộc tính phần tử của nó phải được đặt thành tên nhóm.

Thư viện

Mỗi ứng dụng được đóng gói cùng với thư viện Android mặc định, thư viện này cung cấp các gói cơ sở để xây dựng ứng dụng (với các lớp tiêu chuẩn như Hoạt động, Dịch vụ, Ý định, Chế độ xem, Nút, Ứng dụng, ContentProvider, v.v.).

Tuy nhiên, một số gói có trong thư viện riêng của chúng. Nếu ứng dụng của bạn sử dụng mã từ một trong các gói này thì ứng dụng đó phải yêu cầu rõ ràng để được liên kết với gói đó. Tệp kê khai phải chứa một phần tử riêng biệt để chỉ định tên của từng thư viện. (Tên thư viện có thể được tìm thấy trong tài liệu gói.)

Cập nhật lần cuối: 11/02/2017

Mỗi ứng dụng chứa một tệp kê khai, AndroidManifest.xml. Tệp này xác định thông tin quan trọng về ứng dụng - tên, phiên bản, biểu tượng, quyền mà ứng dụng sử dụng, đăng ký tất cả các lớp hoạt động, dịch vụ đã sử dụng, v.v.

Tệp kê khai có thể trông như thế này:

Phần tử cấp gốc là nút kê khai. Trong trường hợp này, chỉ gói ứng dụng được xác định - package="com.example.eugene.viewsapplication"

Hầu hết các cài đặt cấp ứng dụng đều được xác định bởi thành phần ứng dụng. Ví dụ: thuộc tính android:icon="@mipmap/ic_launcher" chỉ định biểu tượng ứng dụng, nằm trong thư mục res/mipmap-xxxx

Cũng tại đây, bạn đặt tên của ứng dụng, tên này sẽ được hiển thị trên thiết bị di động trong danh sách ứng dụng và trong tiêu đề: android:label="@string/app_name" . Trong trường hợp này, nó được lưu trữ trong tài nguyên chuỗi.

Các phần tử hoạt động lồng nhau xác định tất cả các hoạt động được sử dụng trong ứng dụng. Trong trường hợp này, bạn có thể thấy ứng dụng chỉ có một hoạt động - MainActivity.

Phần tử bộ lọc ý định trong MainActivity chỉ định cách sử dụng hoạt động. Cụ thể, bằng cách sử dụng nút hành động android:name="android.intent.action.MAIN" , hoạt động này sẽ là điểm truy cập vào ứng dụng và không được nhận bất kỳ dữ liệu nào từ bên ngoài.

Phần tử danh mục android:name="android.intent.category.LAUNCHER" chỉ định rằng MainActivity sẽ đại diện cho màn hình khởi chạy được hiển thị khi ứng dụng được khởi chạy.

Xác định phiên bản

Bằng cách sử dụng các thuộc tính của phần tử bảng kê khai, bạn có thể xác định phiên bản của ứng dụng và mã của nó:

Nếu muốn, chúng ta cũng có thể xác định phiên bản trong tài nguyên và tham chiếu tài nguyên tại đây.

Cài đặt phiên bản SDK

Để kiểm soát phiên bản sdk android, một phần tử được xác định trong tệp kê khai . Nó có thể sử dụng các thuộc tính sau:

    minSdkVersion: Phiên bản SDK được hỗ trợ tối thiểu

    targetSdkVersion: phiên bản tối ưu

    maxSdkVersion: phiên bản tối đa

Phiên bản được xác định bởi số API, ví dụ Jelly Beans 4.1 là phiên bản 16:

Đặt quyền

Đôi khi một ứng dụng yêu cầu quyền truy cập vào một số tài nguyên nhất định, chẳng hạn như danh sách liên hệ, máy ảnh, v.v. Để ứng dụng hoạt động với cùng một danh sách liên hệ, các quyền thích hợp phải được đặt trong tệp kê khai. Để đặt quyền, hãy sử dụng phần tử :

Thuộc tính android:name đặt tên của quyền: trong trường hợp này là đọc danh sách liên hệ và sử dụng máy ảnh. Theo tùy chọn, bạn có thể đặt phiên bản sdk tối đa bằng cách sử dụng thuộc tính android:maxSdkVersion, thuộc tính này lấy số API.

Hỗ trợ cho các độ phân giải khác nhau

Thế giới thiết bị Android rất phân mảnh, từ các thiết bị màn hình nhỏ đến TV màn hình rộng lớn. Và đôi khi bạn cần hạn chế sử dụng một ứng dụng ở độ phân giải màn hình nhất định. Để làm điều này, tệp kê khai xác định phần tử :

Phần tử này có bốn thuộc tính:

    android:largeScreens - màn hình có đường chéo từ 4,5 đến 10"

    android:normalScreens - màn hình có đường chéo từ 3 đến 4,5"

    android:smallScreens - màn hình có đường chéo nhỏ hơn 3"

    android:xlargeScreens - màn hình có đường chéo lớn hơn 10"

Nếu thuộc tính này đúng thì ứng dụng sẽ được hỗ trợ bởi kích thước màn hình phù hợp

Cấm thay đổi hướng

Tùy thuộc vào vị trí của tiện ích, ứng dụng có thể ở hướng ngang hoặc hướng dọc. Điều này không phải lúc nào cũng thuận tiện. Chúng tôi có thể làm cho ứng dụng chỉ sử dụng một hướng, bất kể góc quay của tiện ích. Để thực hiện việc này, bạn cần đặt thuộc tính android:screenOrientation trong tệp kê khai của hoạt động được yêu cầu. Ví dụ: hãy tắt hướng ngang:

Giá trị android:screenOrientation="portrait" chỉ ra rằng hoạt động này sẽ chỉ ở hướng dọc. Nếu bạn chỉ cần đặt hướng ngang thì bạn cần sử dụng giá trị android:screenOrientation="landscape"