Tạo nhiều APK cho các kết cấu GL khác nhau

Nếu bạn phát hành ứng dụng lên Google Play thì bạn nên tạo và tải một Android App Bundle lên. Khi bạn làm như vậy, Google Play sẽ tự động tạo và phân phát các tệp APK được tối ưu hoá cho cấu hình thiết bị của mỗi người dùng, vì vậy, họ chỉ tải mã và tài nguyên mà họ cần để chạy ứng dụng. Việc phát hành nhiều tệp APK rất hữu ích nếu bạn hiện chưa phát hành ứng dụng lên Google Play, nhưng bạn phải tự xây dựng, ký và quản lý từng tệp APK.

Khi phát triển ứng dụng Android để tận dụng nhiều APK trên Google Play, quan trọng là phải áp dụng một số phương pháp hay ngay từ đầu và tránh những cơn đau đầu không cần thiết vào quá trình phát triển. Bài học này sẽ hướng dẫn bạn cách tạo nhiều APK của ứng dụng, mỗi APK hỗ trợ một nhóm nhỏ định dạng hoạ tiết OpenGL khác nhau. Bạn cũng sẽ có được một số công cụ cần thiết để giúp duy trì cơ sở mã nhiều APK ít đau nhất có thể.

Xác nhận rằng bạn cần nhiều APK

Khi cố gắng tạo một ứng dụng hoạt động trên tất cả các phiên bản Android hiện có trên các thiết bị, đương nhiên là bạn muốn ứng dụng của mình trông đẹp nhất trên từng thiết bị, bất kể thực tế là không phải tất cả chúng đều hỗ trợ cùng một tập hợp hoạ tiết GL. Việc này có vẻ như mới bắt đầu hỗ trợ nhiều APK là giải pháp tốt nhất, nhưng điều này thường không đúng. Phần Sử dụng một APK Thay vào đó, trong hướng dẫn cho nhà phát triển về nhiều APK sẽ có một số thông tin hữu ích về cách thực hiện điều này bằng một APK, bao gồm cả cách phát hiện hoạ tiết được hỗ trợ trong thời gian chạy. Tuỳ thuộc vào tình huống của bạn, bạn có thể dễ dàng kết hợp tất cả các định dạng với ứng dụng của mình, mà chỉ cần chọn một ứng dụng sẽ sử dụng trong thời gian chạy.

Nếu bạn có thể quản lý APK này, việc giới hạn ứng dụng của bạn trong một APK duy nhất có một số lợi thế: bao gồm:

  • Xuất bản và kiểm thử dễ dàng hơn
  • Chỉ có một cơ sở mã cần duy trì
  • Ứng dụng của bạn có thể thích ứng với các thay đổi về cấu hình thiết bị
  • Tính năng khôi phục ứng dụng trên nhiều thiết bị chỉ hoạt động
  • Bạn không phải lo lắng về lựa chọn ưu tiên về thị trường, hành vi khi "nâng cấp" từ một APK sang tiếp theo hoặc APK nào đi với loại thiết bị nào

Phần còn lại của bài học này giả định rằng bạn đã tìm hiểu kỹ về chủ đề này trong các tài nguyên được liên kết và xác định rằng nhiều APK là đường dẫn phù hợp cho .

Lập biểu đồ các yêu cầu của bạn

Hướng dẫn cho nhà phát triển Android cung cấp một tài liệu tham khảo hữu ích về một số hoạ tiết được hỗ trợ phổ biến trên supports-gl-texture . Trang này cũng chứa một số gợi ý về loại điện thoại (hoặc dòng điện thoại) hỗ trợ định dạng hoạ tiết cụ thể. Lưu ý rằng, thông thường, một trong các APK của bạn nên hỗ trợ ETC1, vì định dạng hoạ tiết đó được tất cả thiết bị chạy Android có hỗ trợ OpenGL ES hỗ trợ Thông số kỹ thuật 2.0.

Vì hầu hết thiết bị chạy Android đều hỗ trợ nhiều định dạng hoạ tiết, nên bạn cần thiết lập thứ tự ưu tiên. Tạo biểu đồ bao gồm tất cả định dạng mà ứng dụng của bạn sẽ nhắm đến của Google. Ô ngoài cùng bên trái sẽ là mức độ ưu tiên thấp nhất (Có thể sẽ là ETC1, thực sự là mặc định ổn định về hiệu suất và khả năng tương thích). Sau đó, tô màu trong biểu đồ sao cho mỗi ô biểu thị một APK.

ETC1 Bệnh ATI Công nghệ cảm biến công suất

Việc tô màu trong biểu đồ không chỉ giúp hướng dẫn này trở nên ít đơn sắc hơn – mà còn có cách giúp việc liên lạc trong nhóm trở nên dễ dàng hơn. Giờ đây, bạn chỉ cần gọi mỗi APK là "xanh dương", "xanh lục" hoặc "đỏ", thay vì "Định dạng hỗ trợ định dạng hoạ tiết ETC1", v.v.

Đặt tất cả mã và tài nguyên chung vào một dự án thư viện

Dù bạn đang sửa đổi một ứng dụng Android hiện có hay bắt đầu một ứng dụng từ đầu, việc đầu tiên bạn nên làm đối với cơ sở mã và cho đến nay là việc quan trọng nhất. Hiện mọi thông tin đi vào dự án thư viện chỉ cần được cập nhật một lần (ví dụ: chuỗi được bản địa hoá ngôn ngữ, chủ đề màu sắc, lỗi được khắc phục trong mã dùng chung), giúp cải thiện thời gian phát triển và giảm khả năng sai lầm mà có thể dễ dàng tránh được.

Lưu ý:Trong khi triển khai chi tiết về cách tạo và bao gồm các dự án thư viện nằm ngoài phạm vi của bài học này, bạn có thể nắm bắt nhanh chóng bằng cách đọc bài viết Tạo Thư viện Android.

Nếu bạn đang chuyển đổi một ứng dụng hiện có để sử dụng tính năng hỗ trợ nhiều APK, rà soát cơ sở mã của bạn để tìm mọi tệp chuỗi, danh sách giá trị, giao diện đã bản địa hoá màu sắc, biểu tượng trình đơn và bố cục không thay đổi giữa các APK và đặt tất cả đều có trong dự án thư viện. Những đoạn mã không có nhiều thay đổi thì nên cũng thực hiện trong dự án thư viện. Bạn có thể sẽ thấy mình mở rộng phạm vi để thêm một hoặc hai phương thức từ APK vào APK.

Mặt khác, nếu bạn đang tạo ứng dụng từ đầu, hãy thử như viết mã trong dự án thư viện trước, sau đó chỉ chuyển mã xuống APK riêng lẻ nếu cần. Về lâu dài, việc này sẽ dễ quản lý hơn nhiều so với việc thêm nó vào một tiếp đến một lần nữa, rồi lại tiếp tục vài tháng rồi cố gắng tìm hiểu xem liệu blob này có thể được di chuyển lên không vào phần thư viện mà không làm hỏng gì cả.

Tạo dự án APK mới

Mỗi tệp APK mà bạn sẽ phát hành nên có một dự án Android riêng. Dễ sắp xếp, hãy đặt dự án thư viện và tất cả dự án APK có liên quan vào cùng một thư mục mẹ. Đồng thời, hãy nhớ rằng mỗi tệp APK cần có cùng tên gói, mặc dù không nhất thiết cần chia sẻ tên gói với thư viện. Nếu bạn có 3 APK theo lược đồ này mô tả trước đó, thư mục gốc có thể có dạng như sau:

alexlucas:~/code/multi-apks-root$ ls
foo-blue
foo-green
foo-lib
foo-red

Sau khi tạo các dự án, hãy thêm dự án thư viện đó làm tham chiếu cho từng dự án APK. Nếu có thể, xác định Hoạt động bắt đầu của bạn trong dự án thư viện và mở rộng Hoạt động đó trong APK của bạn dự án. Khi xác định một hoạt động bắt đầu trong dự án thư viện, bạn sẽ có cơ hội đặt tất cả việc khởi chạy ứng dụng ở cùng một nơi để mỗi APK riêng lẻ không phải triển khai lại chế độ cài đặt "phổ quát" như khởi chạy Analytics, chạy kiểm tra giấy phép, v.v. quy trình khởi chạy không thay đổi nhiều giữa các tệp APK và tệp APK.

Điều chỉnh tệp kê khai

Khi người dùng tải xuống một ứng dụng sử dụng nhiều APK qua Google Play, thì Tệp APK để sử dụng được chọn bằng một số quy tắc đơn giản:

  • Tệp kê khai phải cho thấy rằng một tệp APK cụ thể đủ điều kiện
  • Trong số các APK đủ điều kiện, số phiên bản cao nhất giành chiến thắng
  • Nếu thiết bị trên thị trường hỗ trợ bất kỳ định dạng hoạ tiết nào có trong APK của bạn, thiết bị đó được coi là đủ điều kiện

Đối với Kết cấu GL, quy tắc cuối cùng rất quan trọng. Điều đó có nghĩa là bạn nên, hãy cẩn thận dùng nhiều định dạng GL trong cùng một ứng dụng. Nếu bạn là sử dụng PowerVR 99% thời gian, nhưng sử dụng ETC1 cho màn hình chờ của bạn... Sau đó, tệp kê khai của bạn nhất thiết sẽ cho thấy sự hỗ trợ cho cả hai định dạng. Một thiết bị chỉ hỗ trợ ETC1 sẽ được coi là tương thích, ứng dụng của bạn sẽ tải xuống và người dùng sẽ thấy một số sự cố ly kỳ tin nhắn. Trường hợp phổ biến sẽ là nếu bạn sử dụng riêng nhiều APK để nhắm mục tiêu khác nhau dựa trên khả năng hỗ trợ kết cấu GL thì sẽ là một định dạng kết cấu cho mỗi APK.

Điều này thực sự khiến tính năng hỗ trợ kết cấu hơi khác so với hai loại tệp APK còn lại thứ nguyên, cấp độ API và kích thước màn hình. Mọi thiết bị chỉ có một cấp độ API và một màn hình hỗ trợ nhiều loại kích thước như vậy tuỳ thuộc vào APK. Với kết cấu, APK thường sẽ hỗ trợ một hoạ tiết và thiết bị sẽ hỗ trợ nhiều hoạ tiết. Thường sẽ có sự trùng lặp về một thiết bị hỗ trợ nhiều APK nhưng giải pháp là giống nhau: Mã phiên bản.

Ví dụ: hãy lấy một vài thiết bị và xem có bao nhiêu APK được xác định trước đó phù hợp với mỗi thiết bị thiết bị.

FooPhone Nexus S Evo
ETC1 ETC1 ETC1
Công nghệ cảm biến công suất TC của ATI

Giả sử rằng cả hai định dạng PowerVR và ATI đều được ưu tiên hơn so với ETC1 (nếu có), hơn theo "số phiên bản cao nhất chiến thắng" quy tắc này nếu chúng ta đặt thuộc tính versionCode trong mỗi APK sao cho màu đỏ ≥ màu xanh lục ≥ màu xanh lam, thì cả Đỏ và Xanh lục sẽ luôn được chọn thay vì Xanh lam trên các thiết bị hỗ trợ loại quảng cáo này và nếu có thiết bị tương thích, có hỗ trợ cả Đỏ và Xanh lục, màu đỏ sẽ được chọn.

Để đặt tất cả APK của bạn trên các "kênh" riêng biệt, bạn cần có mã phiên bản tốt hệ thống. Bạn có thể tìm thấy mã được đề xuất trong phần Mã phiên bản trong hướng dẫn cho nhà phát triển của chúng tôi. Từ tập hợp APK ví dụ chỉ xử lý một trong 3 kích thước có thể có, thì việc này là đủ để hãy tách từng APK bằng 1000 và tăng dần từ đó. Thông tin này có thể có dạng như sau:

Xanh lam: 1001, 1002, 1003, 1004...
Màu xanh lá cây: 2001, 2002, 2003, 2004...
Đỏ:3001, 3002, 3003, 3004...

Kết hợp tất cả lại với nhau, Tệp kê khai Android của bạn có thể trông giống như sau:

Màu lam:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
    ...

Màu lục:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="2001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_AMD_compressed_ATC_texture" />
    ...

Màu đỏ:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="3001" android:versionName="1.0" package="com.example.foo">
    <supports-gl-texture android:name="GL_IMG_texture_compression_pvrtc" />
    ...

Xem danh sách kiểm tra trước khi ra mắt

Trước khi tải lên Google Play, hãy kiểm tra kỹ các mục sau. Hãy nhớ rằng đây là có liên quan cụ thể đến nhiều APK và không hề trình bày một danh sách kiểm tra hoàn chỉnh cho tất cả ứng dụng đang được tải lên Google Play.

  • Tất cả APK phải có cùng tên gói
  • Tất cả APK phải được ký bằng cùng một chứng chỉ
  • Kiểm tra kỹ bộ lọc tệp kê khai của bạn để biết thông tin xung đột (APK chỉ hỗ trợ cupcake trên màn hình XLARGE sẽ không được hiển thị cho bất cứ ai)
  • Tệp kê khai của mỗi APK phải là duy nhất trên ít nhất một trong số các màn hình, hoạ tiết OpenGL hoặc phiên bản nền tảng
  • Hãy cố gắng kiểm thử từng tệp APK trên ít nhất một thiết bị. Theo đó, bạn có một trong những các trình mô phỏng thiết bị có thể tuỳ chỉnh trong doanh nghiệp trên máy phát triển của bạn. Cố lên!

Bạn cũng nên kiểm tra APK đã biên dịch trước khi tung ra thị trường để đảm bảo không có mọi điều bất ngờ có thể ẩn ứng dụng của bạn trên Google Play. Điều này thực sự khá đơn giản bằng cách sử dụng "aapt" . Aapt (Công cụ đóng gói tài nguyên Android) là một phần của quy trình xây dựng để tạo và đóng gói ứng dụng Android, đồng thời cũng là một công cụ rất tiện lợi để kiểm tra chúng.

>aapt dump badging
package: name='com.example.hello' versionCode='1' versionName='1.0'
sdkVersion:'11'
uses-permission:'android.permission.SEND_SMS'
application-label:'Hello'
application-icon-120:'res/drawable-ldpi/icon.png'
application-icon-160:'res/drawable-mdpi/icon.png'
application-icon-240:'res/drawable-hdpi/icon.png'
application: label='Hello' icon='res/drawable-mdpi/icon.png'
launchable-activity: name='com.example.hello.HelloActivity'  label='Hello' icon=''
uses-feature:'android.hardware.telephony'
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'xlarge'
supports-any-density: 'true'
locales: '--_--'
densities: '120' '160' '240'

Khi bạn kiểm tra kết quả aapt, hãy nhớ kiểm tra để đảm bảo rằng bạn không có các giá trị xung đột cho hỗ trợ màn hình và màn hình tương thích và bạn không có "tính năng sử dụng" ngoài ý muốn giá trị được thêm vào nhờ những quyền bạn đặt trong tệp kê khai. Trong ví dụ trên, tệp APK sẽ không hiển thị với hầu hết (hoặc không phải tất cả) thiết bị.

Tại sao? Bằng cách thêm quyền bắt buộc SEND_SMS, yêu cầu về tính năng của android.hardware.telephony được ngầm thêm vào. Vì hầu hết (nếu không phải tất cả) thiết bị cực lớn đều là máy tính bảng không có phần cứng điện thoại, Google Play sẽ lọc ra APK này trong những trường hợp này cho đến khi các thiết bị trong tương lai xuất hiện với kích thước đủ lớn để báo cáo là kích thước màn hình cực lớn và sở hữu phần cứng điện thoại.

Rất may là bạn có thể dễ dàng khắc phục vấn đề này bằng cách thêm đoạn mã sau vào tệp kê khai:

<uses-feature android:name="android.hardware.telephony" android:required="false" />

Yêu cầu android.hardware.touchscreen cũng được ngầm thêm vào. Nếu bạn muốn APK của mình hiển thị trên TV là thiết bị không có màn hình cảm ứng, bạn nên thêm đoạn mã sau vào tệp kê khai:

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

Sau khi bạn hoàn tất danh sách kiểm tra trước khi phát hành, hãy tải các tệp APK lên Google Play. Có thể mất một chút thời gian để ứng dụng xuất hiện khi bạn duyệt xem Google Play. Tuy nhiên, khi ứng dụng xuất hiện, hãy thực hiện bước kiểm tra lần cuối. Tải ứng dụng xuống thiết bị thử nghiệm bất kỳ mà bạn có thể phải đảm bảo rằng APK đang nhắm đến các thiết bị dự định. Xin chúc mừng, bạn đã hoàn tất!