File xml bao lỗi prefix string too short năm 2024

hiện đã tiếp nhận tờ khai định dạng XML. Sử dụng định dạng XML khi kê khai thuế qua mạng giúp giảm dung lượng lưu trữ, tăng tốc độ hệ thống, kiểm soát dữ liệu, tránh nghẽn mạng trong nhưng ngày cao điểm cuối kì kê khai. Hiện tại hệ thống khai thuế qua mạng tiếp nhận song song cả tờ khai định dạng PDF và XML, đến tháng hết tháng 04/2015 sẽ không tiếp nhận tờ khai định dạng PDF nữa. Tệp kê khai mô tả thông tin thiết yếu về ứng dụng của bạn cho các công cụ xây dựng của Android, hệ điều hành Android và Google Play.

Tệp kê khai bắt buộc phải khai báo những nội dung sau:

  • Các thành phần của ứng dụng, bao gồm tất cả các hoạt động, dịch vụ, broadcast receiver và nhà cung cấp nội dung. Mỗi thành phần phải xác định các thuộc tính cơ bản, chẳng hạn như tên lớp Kotlin hoặc Java của thành phần đó. Tệp kê khai cũng có thể khai báo các tính năng, chẳng hạn như cấu hình thiết bị mà nó có thể xử lý, cũng như các bộ lọc ý định mô tả cách khởi động thành phần. trong phần sau.
  • Các quyền mà ứng dụng cần có để truy cập các phần được bảo vệ của hệ thống hoặc ứng dụng khác. Tệp kê khai cũng khai báo mọi quyền mà các ứng dụng khác phải có nếu muốn truy cập vào nội dung của ứng dụng này. trong phần sau.
  • Các tính năng phần cứng và phần mềm mà ứng dụng yêu cầu. Điều này quyết định thiết bị nào có thể cài đặt ứng dụng từ Google Play. trong phần sau.

Nếu bạn sử dụng Android Studio để xây dựng ứng dụng, thì tệp kê khai sẽ được tạo cho bạn và hầu hết thành phần thiết yếu của tệp kê khai đều sẽ được thêm vào khi bạn xây dựng ứng dụng, nhất là khi sử dụng mẫu mã.

Đặc điểm của tệp

Các phần sau đây mô tả cách mà một số đặc điểm quan trọng nhất của ứng dụng được phản ánh trong tệp kê khai.

Thành phần ứng dụng

Trong tệp kê khai, hãy khai báo phần tử XML tương ứng với mỗi mà bạn tạo trong ứng dụng:

  •   
        android:name=".MainActivity" ... >  
            ...  
          
      
    
    0 cho mỗi lớp con của
      
        android:name=".MainActivity" ... >  
            ...  
          
      
    
    1
  •   
        android:name=".MainActivity" ... >  
            ...  
          
      
    
    2 cho mỗi lớp con của
      
        android:name=".MainActivity" ... >  
            ...  
          
      
    
    3
  •   
        android:name=".MainActivity" ... >  
            ...  
          
      
    
    4 cho mỗi lớp con của
      
        android:name=".MainActivity" ... >  
            ...  
          
      
    
    5
  •   
        android:name=".MainActivity" ... >  
            ...  
          
      
    
    6 cho mỗi lớp con của
      
        android:name=".MainActivity" ... >  
            ...  
          
      
    
    7

Nếu bạn tạo lớp con cho bất kỳ thành phần nào trong số các thành phần này mà không khai báo trong tệp kê khai, thì hệ thống sẽ không thể khởi động thành phần đó.

Chỉ định tên lớp con bằng thuộc tính


    
        ...
    

8, sử dụng ký hiệu gói hoàn chỉnh. Ví dụ: Bạn khai báo một lớp con


    
        ...
    

9 như sau:


    
    

Tuy nhiên, nếu ký tự đầu tiên trong giá trị


    
        ...
    

8 là dấu chấm, thì không gian tên của ứng dụng (từ thuộc tính


...

1 của tệp


...

2 cấp mô-đun) sẽ được thêm vào trước tên. Ví dụ: nếu không gian tên là


...

3, thì tên hoạt động sau sẽ được phân giải thành


...

4:


    
        ...
    

Để biết thêm thông tin về cách đặt tên gói hoặc không gian tên, hãy xem phần .

Nếu bạn có các thành phần ứng dụng nằm trong các gói con, chẳng hạn như trong


...

5, thì giá trị


    
        ...
    

8 phải thêm tên gói con bị thiếu, chẳng hạn như


...

7 hoặc hãy sử dụng tên gói đủ điều kiện.

Bộ lọc ý định

Các hoạt động trong ứng dụng, dịch vụ và broadcast receiver được ý định kích hoạt. Ý định là một thông báo được xác định bằng một đối tượng


...

8 mô tả một hành động cần thực hiện, bao gồm dữ liệu cần thực hiện, danh mục của thành phần sẽ thực hiện hành động và các hướng dẫn khác.

Khi một ứng dụng gửi ý định đến hệ thống, hệ thống sẽ xác định một thành phần ứng dụng có thể xử lý ý định đó dựa trên nội dung khai báo của bộ lọc ý định trong tệp kê khai của mỗi ứng dụng. Hệ thống sẽ khởi chạy một thực thể của thành phần phù hợp và truyền đối tượng


...

9 đến thành phần đó. Nếu có nhiều ứng dụng có thể xử lý ý định này, thì người dùng có thể chọn ứng dụng sẽ dùng.

Một thành phần ứng dụng có thể có số lượng bộ lọc ý định bất kỳ (xác định bởi phần tử


...

0), mỗi bộ lọc ý định mô tả một tính năng của thành phần đó.

Để biết thêm thông tin, hãy xem tài liệu về Ý định và bộ lọc ý định.

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

Một số phần tử trong tệp kê khai có thuộc tính


...

1 để trình bày một biểu tượng nhỏ và thuộc tính


...

2 để trình bày một nhãn văn bản với người dùng, cho thành phần ứng dụng tương ứng.

Trong mọi trường hợp, biểu tượng và nhãn được đặt trong phần tử mẹ sẽ trở thành giá trị


...

1 và


...

2 mặc định cho tất cả các phần tử con. Ví dụ: biểu tượng và nhãn được đặt trong phần tử


...

5 sẽ là biểu tượng và nhãn mặc định cho mỗi thành phần của ứng dụng, chẳng hạn như tất cả các hoạt động.

Biểu tượng và nhãn được đặt trong


...

0 của một thành phần sẽ hiển thị với người dùng mỗi khi thành phần đó được biểu thị dưới dạng một tuỳ chọn để thực hiện ý định. Theo mặc định, biểu tượng này được kế thừa từ bất kỳ biểu tượng nào được khai báo cho phần tử mẹ (phần tử


    
        ...
    

0 hoặc


...

8).

Bạn nên thay đổi biểu tượng cho bộ lọc ý định nếu bộ lọc đó cung cấp một hành động duy nhất mà bạn muốn chỉ định rõ hơn trong hộp thoại bộ chọn. Để biết thêm thông tin, hãy xem phần Cho phép ứng dụng khác bắt đầu hoạt động của bạn.

Quyền

Các ứng dụng Android phải gửi yêu cầu mới có quyền truy cập vào dữ liệu nhạy cảm của người dùng, chẳng hạn như danh bạ và SMS hoặc một số tính năng hệ thống, chẳng hạn như quyền truy cập Internet và camera. Mỗi quyền được xác định bằng một nhãn duy nhất. Ví dụ: một ứng dụng cần gửi tin nhắn SMS phải có dòng sau trong tệp kê khai:


...

Kể từ Android 6.0 (API cấp 23), người dùng có thể phê duyệt hoặc từ chối một số quyền cho ứng dụng trong thời gian chạy. Tuy nhiên, dù ứng dụng của bạn hỗ trợ phiên bản Android nào, thì bạn cũng phải khai báo mọi yêu cầu cấp quyền có phần tử


...

9 trong tệp kê khai. Nếu được cấp quyền, ứng dụng có thể sử dụng các tính năng được bảo vệ. Nếu không, ứng dụng sẽ không thể sử dụng các tính năng đó.

Ứng dụng cũng có thể bảo vệ các thành phần của chính ứng dụng đó bằng quyền. Ứng dụng có thể dùng mọi quyền được Android xác định, như liệt kê trong

android {

defaultConfig {
    applicationId 'com.example.myapp'
    // Defines the minimum API level required to run the app.
    **minSdkVersion 21**
    // Specifies the API level used to test the app.
    targetSdkVersion 33
    ...
}
}

0 hoặc quyền được khai báo trong một ứng dụng khác. Ứng dụng cũng có thể tự xác định các quyền riêng. Một quyền mới được khai báo bằng phần tử

android {

defaultConfig {
    applicationId 'com.example.myapp'
    // Defines the minimum API level required to run the app.
    **minSdkVersion 21**
    // Specifies the API level used to test the app.
    targetSdkVersion 33
    ...
}
}

1.

Để biết thêm thông tin, hãy xem bài viết Quyền trên Android.

Khả năng tương thích với thiết bị

Trong tệp kê khai, bạn cũng sẽ cho biết ứng dụng của mình yêu cầu những loại tính năng nào cho phần cứng hoặc phần mềm, và theo đó ứng dụng tương thích với những loại thiết bị nào. Cửa hàng Google Play không cho phép người dùng cài đặt ứng dụng trên các thiết bị không có tính năng hoặc phiên bản hệ thống mà ứng dụng yêu cầu.

Có một số thẻ tệp kê khai xác định những thiết bị tương thích với ứng dụng của bạn. Sau đây là một số thẻ phổ biến nhất.

Phần tử

android {

defaultConfig {
    applicationId 'com.example.myapp'
    // Defines the minimum API level required to run the app.
    **minSdkVersion 21**
    // Specifies the API level used to test the app.
    targetSdkVersion 33
    ...
}
}

2 cho phép bạn khai báo các tính năng phần cứng và phần mềm mà ứng dụng của bạn cần. Ví dụ: nếu ứng dụng không thể thực hiện chức năng cơ bản trên một thiết bị không có cảm biến la bàn, thì bạn có thể khai báo cảm biến la bàn theo yêu cầu bằng thẻ tệp kê khai sau:


...

Lưu ý: Nếu muốn cung cấp ứng dụng cho Chromebook, bạn cần cân nhắc một số giới hạn quan trọng về tính năng phần cứng và phần mềm. Để biết thêm thông tin, hãy xem phần Khả năng tương thích của tệp kê khai ứng dụng cho Chromebook.

Mỗi phiên bản nền tảng kế tiếp thường bổ sung các API mới không có trong phiên bản trước đó. Để cho biết phiên bản tối thiểu tương thích với ứng dụng, tệp kê khai phải bao gồm thẻ

android {

defaultConfig {
    applicationId 'com.example.myapp'
    // Defines the minimum API level required to run the app.
    **minSdkVersion 21**
    // Specifies the API level used to test the app.
    targetSdkVersion 33
    ...
}
}

3 và thuộc tính của nó.

Tuy nhiên, hãy lưu ý rằng các thuộc tính trong phần tử

android {

defaultConfig {
    applicationId 'com.example.myapp'
    // Defines the minimum API level required to run the app.
    **minSdkVersion 21**
    // Specifies the API level used to test the app.
    targetSdkVersion 33
    ...
}
}

3 sẽ bị các thuộc tính tương ứng trong tệp ghi đè. Vì vậy, nếu bạn sử dụng Android Studio, hãy chỉ định các giá trị

android {

defaultConfig {
    applicationId 'com.example.myapp'
    // Defines the minimum API level required to run the app.
    **minSdkVersion 21**
    // Specifies the API level used to test the app.
    targetSdkVersion 33
    ...
}
}

4 và

android {

defaultConfig {
    applicationId 'com.example.myapp'
    // Defines the minimum API level required to run the app.
    **minSdkVersion 21**
    // Specifies the API level used to test the app.
    targetSdkVersion 33
    ...
}
}

8 tại đó:

Groovy

android {

defaultConfig {
    applicationId 'com.example.myapp'
    // Defines the minimum API level required to run the app.
    **minSdkVersion 21**
    // Specifies the API level used to test the app.
    targetSdkVersion 33
    ...
}
}

Kotlin

android {

defaultConfig {
    applicationId = "com.example.myapp"
    // Defines the minimum API level required to run the app.
    **minSdkVersion(21)**
    // Specifies the API level used to test the app.
    targetSdkVersion(33)
    ...
}
}

Để biết thêm thông tin về tệp


...

2, hãy tìm hiểu cách định cấu hình bản dựng.

Để tìm hiểu thêm về cách khai báo tính năng hỗ trợ của ứng dụng cho các thiết bị, hãy xem phần Tổng quan về khả năng tương thích với thiết bị.

Quy ước của tệp

Phần này mô tả các quy ước và quy tắc thường áp dụng cho tất cả các phần tử và thuộc tính trong tệp kê khai.

Phần tử Chỉ yêu cầu có các phần tử

android {

defaultConfig {
    applicationId = "com.example.myapp"
    // Defines the minimum API level required to run the app.
    **minSdkVersion(21)**
    // Specifies the API level used to test the app.
    targetSdkVersion(33)
    ...
}
}

0 và


...

5. Các phần tử này chỉ được xuất hiện một lần. Hầu hết các phần tử khác có thể không xuất hiện hoặc xuất hiện nhiều lần. Tuy nhiên, một số phần tử phải xuất hiện thì tệp kê khai mới hữu ích.

Tất cả các giá trị được đặt thông qua các thuộc tính, không phải dưới dạng dữ liệu ký tự trong một 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ử


    
        ...
    

0,


    
        ...
    

6 và


    
        ...
    

2 có thể được đặt theo thứ tự bất kỳ. Có hai trường hợp ngoại lệ chính đối với quy tắc này:

  • Một phần tử android {
    defaultConfig {  
        applicationId = "com.example.myapp"  
        // Defines the minimum API level required to run the app.  
        minSdkVersion(21)  
        // Specifies the API level used to test the app.  
        targetSdkVersion(33)  
        ...  
    }  
    
    } 5 mà là biệt hiệu của android {
    defaultConfig {  
        applicationId = "com.example.myapp"  
        // Defines the minimum API level required to run the app.  
        minSdkVersion(21)  
        // Specifies the API level used to test the app.  
        targetSdkVersion(33)  
        ...  
    }  
    
    } 6 sẽ phải tuân thủ.
  • Phần tử
      
    ...  
    
    8 phải là phần tử cuối cùng trong phần tử android {
    defaultConfig {  
        applicationId = "com.example.myapp"  
        // Defines the minimum API level required to run the app.  
        minSdkVersion(21)  
        // Specifies the API level used to test the app.  
        targetSdkVersion(33)  
        ...  
    }  
    
    } 8. Thuộc tính Về mặt kỹ thuật, tất cả thuộc tính là không bắt buộc. Tuy nhiên, nhiều thuộc tính phải được chỉ định để một phần tử có thể hoàn thành được mục đích. Đối với các thuộc tính thực sự không bắt buộc, cho biết các giá trị mặc định.

Ngoại trừ một số thuộc tính của phần tử

android {

defaultConfig {
    applicationId = "com.example.myapp"
    // Defines the minimum API level required to run the app.
    **minSdkVersion(21)**
    // Specifies the API level used to test the app.
    targetSdkVersion(33)
    ...
}
}

0 gốc, tất cả tên thuộc tính đều bắt đầu bằng tiền tố




...

0, chẳng hạn như




...

1. Vì tiền tố là chung, nên tài liệu thường bỏ qua tiền tố khi tham chiếu đến các thuộc tính theo tên.

Nhiều giá trị Nếu có thể chỉ định nhiều giá trị, thì phần tử hầu như luôn được lặp lại, thay vì nhiều giá trị được liệt kê trong một phần tử. Ví dụ: bộ lọc ý định có thể liệt kê một số hành động:




...

Giá trị tài nguyên Một số thuộc tính có các giá trị mà người dùng thấy được, chẳng hạn như tiêu đề của một hoạt động hoặc biểu tượng ứng dụng. Giá trị của các thuộc tính này có thể khác nhau tuỳ theo ngôn ngữ của người dùng hoặc các cấu hình thiết bị khác (chẳng hạn như để cung cấp một kích thước biểu tượng khác dựa trên mật độ pixel của thiết bị), vì vậy, bạn nên thiết lập giá trị từ một tài nguyên hoặc giao diện thay vì mã hoá cứng vào tệp kê khai. Sau đó, giá trị thực tế có thể thay đổi dựa trên tài nguyên thay thế mà bạn cung cấp cho nhiều cấu hình thiết bị.

Tài nguyên được biểu thị dưới dạng giá trị có định dạng sau:




...

2

Bạn có thể bỏ qua tên package nếu tài nguyên được cung cấp bởi ứng dụng (kể cả khi đó là tài nguyên được cung cấp bởi phần phụ thuộc của thư viện, vì ). Chỉ có một tên gói khác hợp lệ là




...

3, khi bạn muốn sử dụng một tài nguyên trong khung Android.

type là một loại tài nguyên, chẳng hạn như




...

4 hoặc




...

5, còn name là tên xác định tài nguyên cụ thể. Dưới đây là ví dụ:

Để biết thêm thông tin về cách thêm tài nguyên vào dự án của bạn, hãy đọc bài viết Tổng quan về tài nguyên ứng dụng.

Để áp dụng một giá trị được xác định trong một giao diện, ký tự đầu tiên phải là




...

6 thay vì




...

7:




...

8

Các giá trị chuỗi Nếu giá trị thuộc tính là một chuỗi, hãy sử dụng hai dấu gạch chéo ngược (




...

  1. cho các ký tự thoát, chẳng hạn như

0 cho một dòng mới hoặc

1 cho một ký tự Unicode.

Tài liệu tham khảo về phần tử của tệp kê khai

Bảng sau đây cung cấp các đường liên kết đến tài liệu tham khảo cho tất cả các phần tử hợp lệ trong tệp AndroidManifest.xml.