Tổng quan về Thời gian chạy SDK

Nền tảng Android sử dụng khái niệm hộp cát ứng dụng để duy trì các ranh giới bảo mật và khả năng thực thi mạnh mẽ của mã ứng dụng, bên cạnh các ranh giới quy trình. Đối với các ứng dụng, đây là một phương pháp thông dụng để đưa mã bên thứ ba vào, thường ở dạng SDK, chẳng hạn như SDK quảng cáo hay SDK phân tích. Việc tái sử dụng này cho phép nhà phát triển ứng dụng tập trung tạo sự khác biệt cho ứng dụng, trong khi vẫn tận dụng được nghiên cứu của các chuyên gia trong ngành để mở rộng phạm vi thực thi vượt ra khỏi những gì mà họ có thể dễ dàng tự thực hiện.

Giống như hầu hết hệ điều hành, trong Android, SDK được thực thi trong hộp cát của ứng dụng lưu trữ, thừa kế các quyền và đặc quyền tương tự của ứng dụng lưu trữ, đồng thời có quyền truy cập vào bộ nhớ và dung lượng lưu trữ của ứng dụng lưu trữ đó. Tuy cấu trúc này giúp SDK và ứng dụng tích hợp một cách linh hoạt nhưng lại có thể khiến một số dữ liệu người dùng chưa công bố bị thu thập và chia sẻ. Hơn nữa, các nhà phát triển ứng dụng có thể cũng chưa nhận biết hết được chức năng của SDK bên thứ ba cũng như dữ liệu mà SDK đó truy cập vào, dẫn đến việc giải thích về các phương pháp thu thập và chia sẻ dữ liệu của ứng dụng trở nên khó khăn.

Trên Android 13, chúng tôi đã thêm một tính năng mới vào nền tảng để cho phép các SDK bên thứ ba chạy trong một môi trường thời gian chạy chuyên biệt có tên là Thời gian chạy SDK. Chiến lược phát hành đĩa đơn Thời gian chạy SDK cung cấp các biện pháp bảo vệ và đảm bảo mạnh mẽ hơn sau đây đối với thu thập và chia sẻ dữ liệu người dùng:

  • Sửa đổi môi trường thực thi
  • Xác định rõ các quyền cũng như quyền truy cập dữ liệu cho các SDK

Chúng tôi đang tích cực thu thập ý kiến phản hồi của cộng đồng quảng cáo trên ứng dụng di động về thiết kế này. Chúng tôi cũng hoan nghênh ý kiến phản hồi của cộng đồng nhà phát triển rộng lớn hơn để giúp định hình các vòng lặp trong tương lai của Thời gian chạy SDK, bao gồm cả tính năng hỗ trợ các trường hợp sử dụng bổ sung.

Mục tiêu

Đề xuất này nhằm đạt được các mục tiêu sau đây:

  • Giảm hoạt động truy cập và chia sẻ đối với dữ liệu ứng dụng chưa được công bố của người dùng bằng SDK bên thứ ba thông qua việc cách ly quy trình, cũng như xác định rõ API và biện pháp kiểm soát truy cập vào dữ liệu. Hãy tìm hiểu thêm về cách ly quy trình trong một phần riêng của tài liệu này.
  • Giảm hoạt động theo dõi chưa tiết lộ đối với hoạt động dùng ứng dụng của người dùng bằng SDK bên thứ ba thông qua việc giới hạn SDK truy cập vào các giá trị nhận dạng riêng và ổn định.
  • Tăng tốc hoạt động phân phối bản cập nhật SDK cho ứng dụng một cách an toàn bằng cách giảm bớt gánh nặng cho nhà phát triển ứng dụng và người dùng cuối. Hãy tìm hiểu thêm về mô hình phân phối SDK đáng tin cậy đề xuất trong một phần khác của tài liệu này.
  • Giúp nhà phát triển ứng dụng giải thích rõ hơn về hoạt động truy cập và chia sẻ dữ liệu trên ứng dụng của họ.
  • Giúp nhà phát triển SDK ngăn các SDK khác can thiệp thông qua việc giới hạn một số cấu trúc ngôn ngữ không an toàn, chẳng hạn như phản xạ và mã JNI.
  • Giúp SDK quảng cáo phát hiện và ngăn chặn lưu lượng truy cập không hợp lệ cũng như hành vi gian lận trong quảng cáo thông qua kiểm soát toàn bộ các chế độ xem từ xa hiển thị nội dung nghe nhìn.
  • Giảm thiểu tác động quá mức đối với nhà phát triển SDK và ứng dụng nhiều nhất có thể.

Các SDK sẽ thực thi trong một quy trình tách biệt

Thời gian chạy SDK đề xuất hỗ trợ các SDK tương thích — được gọi là SDK hỗ trợ thời gian chạy (RE) trong phần còn lại của tài liệu này — để vận hành trong một quy trình riêng cho ứng dụng. Nền tảng hỗ trợ giao tiếp hai chiều giữa quy trình của ứng dụng và Thời gian chạy SDK. Hãy xem phần giao tiếp của tài liệu này để biết thông tin chi tiết. Các SDK không phải RE vẫn giữ nguyên trong quy trình của ứng dụng như hiện nay. Các biểu đồ dưới đây minh hoạ những thay đổi sau:

Sơ đồ trước cho thấy mọi quy trình chạy quy trình Ứng dụng
Trước khi được thêm vào Thời gian chạy SDK, mã gọi SDK, cùng với các SDK nhận lệnh gọi từ mã này, tất cả đều nằm trong quy trình của ứng dụng

Sơ đồ sau cho thấy các quy trình được phân tách giữa quy trình của ứng dụng và quy trình thời gian chạy SDK
Sau khi được thêm vào Thời gian chạy SDK, mã gọi SDK, trong quy trình trên nền trước của ứng dụng, mã gọi SDK sẽ giao tiếp với Giao diện SDK. Sau đó, các giao diện này vượt qua ranh giới của quy trình vào quy trình Thời gian chạy SDK để tự gọi vào các SDK.

Mô hình phân phối đáng tin cậy mới dành cho SDK

Quy trình tách SDK khỏi ứng dụng như đề xuất sẽ thúc đẩy khái niệm phân tách khác, một khái niệm cho phân phối ứng dụng và SDK. Đề xuất của chúng tôi đòi hỏi có cơ chế cài đặt và phân phối đáng tin cậy, để đảm bảo cài đặt đúng SDK trong SDK Thời gian chạy của ứng dụng. Điều này giúp người dùng và nhà phát triển ứng dụng sẽ không tải SDK không hợp lệ, trong khi vẫn hỗ trợ cửa hàng ứng dụng giảm đáng kể gánh nặng của việc phân phối SDK đối với nhà phát triển ứng dụng.

SDK không cần phải liên kết và đóng gói theo cách tĩnh cùng với các ứng dụng của chúng trước khi tải lên cửa hàng ứng dụng để phân phối nữa. Quy trình sau đây sẽ diễn ra:

  1. Nhà phát triển SDK có thể tải SDK đã lập phiên bản của họ lên cửa hàng ứng dụng, tách riêng khỏi chính các ứng dụng đó.
  2. Nhà phát triển ứng dụng có thể chỉ định các phần phụ thuộc SDK theo phiên bản, bản dựng và tải lên một bản phát hành ứng dụng không bao gồm phần phụ thuộc SDK thực.
  3. Khi người dùng tải ứng dụng này xuống, quy trình cài đặt có thể sử dụng phần phụ thuộc SDK đã chỉ định của ứng dụng để tải chúng xuống từ cửa hàng ứng dụng.

Cơ chế phân phối mới này cho phép nhà phát triển SDK thực hiện những thay đổi không gây ra lỗi (tức là không có thay đổi về API hay ngữ nghĩa) đối với SDK và phân phối cho các thiết bị mà không có sự can thiệp của nhà phát triển ứng dụng. Những thay đổi (không gây ra lỗi đối với SDK) này có thể được triển khai hoặc hoàn nguyên, mà không nhất thiết phải chờ các nhà phát triển ứng dụng tạo lại ứng dụng bằng SDK mới hay chờ người dùng cuối cập nhật ứng dụng. Nhà phát triển ứng dụng vẫn cần cập nhật những thay đổi có thể gây lỗi, nhưng nhà phát triển SDK có thể cập nhật những thay đổi không gây ra lỗi mới nhất, đồng thời khắc phục nhanh hơn và nhất quán hơn cho nhiều người hơn, theo cách lý tưởng là giảm thiểu sự hỗ trợ liên quan đến phiên bản.

Các biểu đồ sau đây minh hoạ những thay đổi đề xuất trong quá trình phân phối SDK:

Sơ đồ trước
Trước khi ra mắt Thời gian chạy SDK, nhà phát triển gửi trực tiếp SDK của họ đến ứng dụng.

Sơ đồ sau
Sau khi Thời gian chạy SDK ra mắt, nhà phát triển SDK sẽ sử dụng giao diện người dùng tải SDK lên để phát hành SDK lên cửa hàng ứng dụng. Sau đó, cửa hàng ứng dụng sẽ xử lý việc phân phối ứng dụng (cùng với mọi phần phụ thuộc SDK) cho thiết bị của người dùng cuối.

Những thay đổi về cách thức tạo, chạy cũng như phân phối SDK và ứng dụng

Đây là đề xuất ban đầu cho công nghệ phân phối và Thời gian chạy SDK linh hoạt. Dưới đây là đề xuất về một loạt những thay đổi đối với các danh mục sau:

  • Quyền truy cập: Quyền, bộ nhớ, dung lượng lưu trữ
  • Thực thi: Ngôn ngữ, thay đổi về thời gian chạy, vòng đời, hiển thị nội dung nghe nhìn
  • Giao tiếp: Ứng dụng với SDK và SDK với SDK
  • Phát triển: Cách tạo, gỡ lỗi, thử nghiệm trong mô hình này
  • Phân phối: Cách phân phối, cập nhật, hoàn nguyên đối với các phiên bản Android, ứng dụng và SDK

Tài liệu này cũng bao gồm phần Câu hỏi thường gặp để giúp giải đáp các câu hỏi thường gặp.

Đây là đề xuất thiết kế ban đầu. Chúng tôi hiểu rằng đây có thể là sự thay đổi có ý nghĩa đối với một số thành phần của hệ sinh thái. Do đó, chúng tôi rất mong nhận được ý kiến phản hồi của bạn thông qua công cụ theo dõi lỗi này.

Quyền truy cập

Quản lý quyền riêng tư của hệ thống nghĩa là quản lý cách các bên khác nhau truy cập vào các tài nguyên khác nhau. Để thực hiện tuyên bố giá trị về quyền riêng tư, chúng tôi dự định cập nhật mô hình truy cập vào ứng dụng, SDK và dữ liệu người dùng để tuân thủ nguyên tắc về đặc quyền tối thiểu nhằm ngăn chặn hành vi truy cập vào những dữ liệu có thể là dữ liệu nhạy cảm chưa được công bố.

Quyền của SDK

Trong một quy trình riêng, Thời gian chạy SDK sẽ có một tập hợp quyền được xác định rõ ràng, chứ không thừa kế các quyền mà người dùng cấp cho ứng dụng. Dựa trên nghiên cứu sơ bộ về các quyền do SDK liên quan đến quảng cáo sử dụng, chúng tôi đề xuất rằng SDK trong Thời gian chạy SDK sẽ có các quyền sau đây theo mặc định:

  • INTERNET: Truy cập vào Internet để có thể giao tiếp với một dịch vụ web.
  • ACCESS_NETWORK_STATE: Truy cập vào thông tin về mạng.
  • READ_BASIC_PHONE_STATE: Truy cập thông tin về trạng thái điện thoại, ví dụ: loại mạng di động.
  • Quyền truy cập vào API bảo đảm quyền riêng tư. API này cung cấp các tính năng quảng cáo cốt lõi mà không cần truy cập vào giá trị nhận dạng trên nhiều ứng dụng.
  • AD_ID: Khả năng yêu cầu mã nhận dạng cho quảng cáo. Khả năng này cũng sẽ bị giới hạn theo quyền tiếp cận của ứng dụng đối với quyền này.

Hiện tại, chúng tôi đang tìm hiểu xem có cần cấp quyền bổ sung hay không, cũng như cách cấp quyền bổ sung nhằm giới hạn mức tác động đối với người dùng cuối từ cả khía cạnh quyền riêng tư và khả năng hữu dụng. Chúng tôi yêu cầu phản hồi về bất kỳ trường hợp sử dụng nào mà tập hợp quyền này có thể chưa được đáp ứng.

Bộ nhớ

Thời gian chạy SDK có dung lượng bộ nhớ được tách riêng do có quy trình riêng. Theo mặc định, cấu trúc này sẽ từ chối quyền truy cập của SDK vào dung lượng bộ nhớ của ứng dụng. Tương tự, ứng dụng sẽ không truy cập được vào dung lượng bộ nhớ của SDK. Chúng tôi dự định giữ lại hành vi mặc định này để tuân theo nguyên tắc về đặc quyền tối thiểu.

Bộ nhớ

Đề xuất này nhằm cân bằng giữa nhu cầu cho SDK truy cập vào bộ nhớ để hoạt động bình thường và giảm thiểu hoạt động theo dõi trên ứng dụng và trên quy trình bằng bộ nhớ lâu dài. Chúng tôi đang đề xuất nội dung cập nhật sau đây về cách truy cập vào bộ nhớ hiện nay:

  • Một ứng dụng không thể truy cập trực tiếp vào bộ nhớ SDK và ngược lại.
  • SDK không thể truy cập vào bộ nhớ ngoài của thiết bị.
  • Trong mỗi Thời gian chạy SDK, sẽ có cả bộ nhớ mà tất cả các SDK đều có thể truy cập và bộ nhớ dành riêng chỉ một SDK cụ thể truy cập được.

Giống như mô hình bộ nhớ hiện tại, bộ nhớ này không có các giới hạn tuỳ ý về kích thước. SDK có thể sử dụng bộ nhớ để lưu tài sản vào bộ nhớ đệm. Bộ nhớ này sẽ được xoá định kỳ khi SDK không hoạt động.

Thực hiện

Để đảm bảo có một hệ thống riêng tư giữa các ứng dụng, SDK và người dùng, ngữ cảnh thực thi (định dạng mã, cấu trúc ngôn ngữ, API dễ truy cập và dữ liệu hệ thống) cần phải thực thi lại những ranh giới về quyền riêng tư này, hoặc tối thiểu là không tạo ra cơ hội can thiệp vào những ranh giới đó. Đồng thời, chúng tôi muốn giữ lại quyền truy cập vào nền tảng phong phú này cũng như phần lớn các tính năng thời gian chạy mà SDK hiện có. Ở đây, chúng tôi đề xuất một loạt các nội dung cập nhật cho môi trường thời gian chạy để tạo ra sự cân bằng này.

Mã Android (ứng dụng và SDK) chủ yếu được Android Runtime (ART) diễn giải, để xem mã được viết bằng ngôn ngữ lập trình Kotlin hay Java. Sự phong phú của ART và cấu trúc ngôn ngữ mà ART cung cấp, cùng với khả năng xác minh được khi so sánh với các lựa chọn thay thế (cụ thể là mã gốc) có vẻ sẽ tạo ra sự cân bằng phù hợp giữa chức năng và quyền riêng tư. Chúng tôi đề xuất rằng mã SDK hỗ trợ thời gian chạy chỉ bao gồm mã byte Dex, thay vì hỗ trợ quyền truy cập JNI.

Chúng tôi biết rằng có các trường hợp sử dụng, chẳng hạn như dùng SQLite đóng gói tuỳ chỉnh, mà do việc sử dụng mã gốc, sẽ cần phải thay thế bằng phương án khác, chẳng hạn như phiên bản SQLite tích hợp của SDK Android.

SELinux

Trên Android, mỗi quy trình (bao gồm cả những quy trình chạy dưới dạng thư mục gốc) chạy trong một ngữ cảnh SELinux cụ thể, cho phép kernel quản lý quyền kiểm soát truy cập vào các dịch vụ hệ thống, tệp, thiết bị và các quy trình khác. Để duy trì phần lớn trường hợp sử dụng SDK mà vẫn giảm thiểu sự can thiệp vào các biện pháp bảo vệ quyền riêng tư chúng tôi đang cố gắng cải thiện, chúng tôi đề xuất nội dung cập nhật sau đây đối với ngữ cảnh SELinux của ứng dụng không thuộc hệ thống cho SDK Thời gian chạy:

  • Chỉ một số dịch vụ hệ thống mới có thể truy cập được. (đang trong quá trình thiết kế)
  • Các SDK chỉ có thể tải và thực thi mã trong APK của chúng.
  • Chỉ truy cập được vào một số thuộc tính hệ thống. (đang trong quá trình thiết kế)

API

Cho phép sử dụng API phản chiếu và API gọi trong thời gian chạy SDK. Tuy nhiên, một SDK sẽ không được phép sử dụng API phản chiếu hoặc API gọi trên một SDK khác kích hoạt bởi thời gian chạy. Chúng tôi sẽ chia sẻ đề xuất đầy đủ về các API bị cấm ở một bản cập nhật trong tương lai.

Ngoài ra, các bản phát hành gần đây trên nền tảng Android đã ngày càng hạn chế quyền truy cập vào giá trị nhận dạng lâu dài để cải thiện vấn đề quyền riêng tư. Đối với Thời gian chạy SDK, chúng tôi đặt ra quyền truy cập giới hạn hơn vào các giá trị nhận dạng có thể dùng để theo dõi trên nhiều ứng dụng.

Chỉ có thể truy cập API Thời gian chạy SDK qua các ứng dụng chạy trên nền trước. Việc cố gắng truy cập vào các API SdkSandboxManager qua các ứng dụng ở chế độ nền sẽ dẫn đến việc SecurityException được gửi ra.

Cuối cùng, SDK RE không thể sử dụng API thông báo để gửi thông báo cho người dùng vào bất kỳ thời điểm nào.

Vòng đời

SDK ứng dụng hiện tuân theo vòng đời của ứng dụng máy chủ, nghĩa là khi ứng dụng truy cập vào hoặc rời khỏi nền trước, tắt hoặc bị hệ điều hành buộc dừng do áp lực về bộ nhớ, SDK của ứng dụng cũng làm vậy. Đề xuất phân tách SDK của ứng dụng vào một quy trình khác mà chúng tôi đưa ra cho thấy những thay đổi sau đây đối với vòng đời:

  • Người dùng hoặc hệ điều hành có thể chấm dứt ứng dụng. Thời gian chạy SDK sẽ tự động chấm dứt ngay sau đó.
  • Hệ điều hành có thể chấm dứt SDK Thời gian chạy do áp lực bộ nhớ hoặc một ngoại lệ chưa được xử lý trong SDK chẳng hạn.

    Đối với Android 13, khi một ứng dụng chạy ở nền trước, Thời gian chạy SDK sẽ chạy ở mức độ ưu tiên cao và ít có khả năng bị chấm dứt. Khi ứng dụng chuyển sang chạy ở chế độ nền, mức độ ưu tiên của quy trình Thời gian chạy SDK sẽ giảm xuống và đủ điều kiện để kết thúc. Mức độ ưu tiên của quy trình Thời gian chạy SDK vẫn ở mức thấp ngay cả khi ứng dụng quay lại nền trước. Do đó, khả năng cao là ứng dụng sẽ bị chấm dứt do áp lực bộ nhớ so với ứng dụng.

    Đối với Android 14 trở lên, mức độ ưu tiên về quy trình của ứng dụng và Thời gian chạy SDK được điều chỉnh. Các mức độ ưu tiên về quy trình cho ActivityManager.RunningAppProcessInfo.importance của ứng dụng và Thời gian chạy SDK phải gần như tương đương.

    Trong trường hợp Thời gian chạy SDK chấm dứt trong khi ứng dụng vẫn hoạt động (ví dụ: nếu có một ngoại lệ chưa được xử lý trong SDK), thì trạng thái Thời gian chạy SDK (bao gồm tất cả các khung hiển thị từ xa và SDK đã tải trước đó) sẽ bị mất. Nhà phát triển ứng dụng có thể xử lý việc chấm dứt Thời gian chạy SDK bằng một trong những phương thức sau:

    • Đề xuất này cung cấp các phương thức gọi lại trong vòng đời có liên quan cho các nhà phát triển ứng dụng để phát hiện thời điểm chấm dứt Thời gian chạy SDK.
    • Nếu Thời gian chạy SDK chấm dứt trong khi quảng cáo hiển thị, thì quảng cáo có thể không hoạt động như mong đợi. Ví dụ: khung hiển thị có thể bị treo trên màn hình và không còn tương tác nữa. Ứng dụng có thể xoá khung hiển thị quảng cáo nếu trải nghiệm người dùng không bị ảnh hưởng.
    • Ứng dụng có thể thử tải lại SDK và yêu cầu quảng cáo.
    • Đối với Android 14, nếu Thời gian chạy SDK chấm dứt khi đã tải SDK, cũng như nếu nhà phát triển ứng dụng chưa đăng ký các phương thức gọi lại trong vòng đời nêu trên, thì ứng dụng sẽ chấm dứt theo mặc định. Chỉ những quy trình ứng dụng đã tải SDK mới chấm dứt và thoát bình thường.
    • Các đối tượng liên kết mà SDK trả về để giao tiếp với SDK đó (chẳng hạn như SandboxedSdk) sẽ gửi một DeadObjectException nếu được ứng dụng sử dụng.

    Mô hình vòng đời này có thể thay đổi trong các bản cập nhật sau này.

    Trong trường hợp liên tục có lỗi, nhà phát triển ứng dụng sẽ cần lên kế hoạch xuống cấp nhẹ mà không có SDK hoặc thông báo cho người dùng nếu SDK đóng vai trò quan trọng đối với chức năng cốt lõi của ứng dụng. Để biết thêm thông tin về mối tương tác này giữa ứng dụng với SDK, hãy xem phần giao tiếp của tài liệu này.

SDK không phải RE có thể tiếp tục sử dụng các dữ liệu gốc tiêu chuẩn của hệ điều hành có sẵn cho ứng dụng được nhúng — bao gồm cả máy chủ, hoạt động và thông báo truyền tin — trong khi các SDK RE thì không làm được như vậy.

Các trường hợp đặc biệt

Các trường hợp sau không được hỗ trợ và có thể dẫn đến hành vi không mong muốn:

  • Nếu nhiều ứng dụng có cùng một UID, thì Thời gian chạy SDK có thể không hoạt động đúng cách. Trong tương lai, chúng tôi có thể sẽ hỗ trợ các UID dùng chung.
  • Đối với các ứng dụng có nhiều quy trình, bạn nên tải SDK trong quy trình chính.

Hiển thị nội dung nghe nhìn

Có những SDK hiển thị nội dung, như văn bản, hình ảnh và video trong chế độ xem dành riêng cho ứng dụng. Để làm được điều này, chúng tôi đề xuất cách tiếp cận hiển thị từ xa, trong đó SDK sẽ hiển thị nội dung nghe nhìn từ trong SDK Thời gian chạy nhưng sử dụng SurfaceControlViewHost API để cho phép nội dung nghe nhìn hiển thị trong chế độ xem dành riêng cho ứng dụng. Phương thức này mang đến cho SDK khả năng hiển thị nội dung nghe nhìn theo cách riêng tư với người dùng, trong khi ngăn chặn và phát hiện các hoạt động tương tác không hợp lệ hoặc gian lận của người dùng với nội dung nghe nhìn đã hiển thị.

Quảng cáo gốc (những quảng cáo không do SDK mà do ứng dụng hiển thị) sẽ được SDK hỗ trợ trong Thời gian chạy SDK. Quy trình thu thập tín hiệu và tìm nạp mẫu quảng cáo sẽ diễn ra một cách nhất quán với các quảng cáo không phải là quảng cáo gốc. Chúng tôi đang tích cực nghiên cứu khía cạnh này.

Quảng cáo dạng video trong luồng phát là những quảng cáo chạy trong luồng với một video, hiện trong trình phát của một ứng dụng. Do video phát trong trình phát của ứng dụng chứ không phải trình phát hay chế độ xem trong SDK, mô hình hiển thị sẽ khác với các định dạng quảng cáo khác. Chúng tôi đang tích cực tìm hiểu các cơ chế hỗ trợ cả tính năng chèn quảng cáo phía máy chủ và chèn quảng cáo dựa trên SDK.

Tình trạng hệ thống

Chúng tôi tìm cách giảm thiểu tác động đối với tình trạng hệ thống mà SDK Thời gian chạy tạo ra với thiết bị của người dùng cuối, và đang thiết kế những phương pháp để làm vậy. Tuy nhiên, có nhiều khả năng một số thiết bị Android 13 cấp thấp với tài nguyên hệ thống rất hạn chế, chẳng hạn như Android (phiên bản Go), sẽ không hỗ trợ SDK Thời gian chạy do tác động đối với tình trạng hệ thống. Chúng tôi sẽ sớm chia sẻ các yêu cầu tối thiểu cần thiết để sử dụng SDK Thời gian chạy có hiệu quả.

Giao tiếp

Vì các ứng dụng và SDK hiện chạy trong cùng một quy trình nên hình thức giao tiếp giữa chúng là tự do và không có trung gian. Ngoài ra, Android cho phép giao tiếp trong ứng dụng ngay cả khi hoạt động giao tiếp bắt đầu và kết thúc bằng SDK. Mô hình giao tiếp luồng tự do này hỗ trợ nhiều trường hợp sử dụng khác nhau mà vẫn mang đến khả năng chia sẻ dữ liệu chưa tiết lộ giữa các ứng dụng và giữa các SDK ở trong và giữa các ứng dụng. Chúng tôi đang đề xuất nội dung cập nhật sau đây cho mô hình giao tiếp này nhằm tìm cách tạo ra sự cân bằng giữa giá trị của hoạt động giao tiếp và việc hiện thực hoá các mục tiêu đã nêu.

Ứng dụng với SDK

Giao diện giữa ứng dụng và SDK là cách giao tiếp thông dụng nhất với SDK. Ngoài ra, API của SDK là nơi có nhiều đổi mới và khác biệt nhất dành cho người dùng. Chúng tôi cố gắng duy trì khả năng đổi mới và tạo ra sự khác biệt cho API của SDK. Do đó, đề xuất của chúng tôi giúp SDK có thể hiển thị API cho ứng dụng, và bảo đảm rằng ứng dụng có thể được hưởng lợi từ toàn bộ những tính năng đổi mới.

Do cấu trúc ranh giới quy trình của SDK Thời gian chạy, chúng tôi dự định tạo ra một lớp dồn, có thể truy cập trong ứng dụng, để chuyển lệnh gọi và phản hồi API hoặc lệnh gọi lại trên ranh giới này giữa ứng dụng và SDK. Chúng tôi đề xuất rằng giao diện cho lớp dồn này (marshaling layer) sẽ do nhà phát triển SDK xác định, đồng thời được tạo bằng các công cụ tạo nguồn mở chính thức mà chúng tôi phát triển.

Với đề xuất này, chúng tôi muốn nhà phát triển ứng dụng và SDK không phải dồn mã nguyên mẫu mà vẫn mang lại sự linh hoạt cho nhà phát triển SDK, ngoài ra còn đảm bảo mã SDK chạy trong Thời gian chạy SDK để hiện thực hoá các mục tiêu về quyền riêng tư. Nếu chúng tôi tiến hành theo cách này, công cụ và ngôn ngữ xác định API cần được thiết kế bằng dữ liệu đầu vào của bạn.

Mô hình tương tác chung sẽ như sau:

  • Ứng dụng gọi SDK thông qua giao diện, truyền vào lệnh gọi lại.
  • SDK đáp ứng không đồng bộ với các yêu cầu và phản hồi bằng lệnh gọi lại.
  • Điều này được khái quát hoá vào mô hình nhà xuất bản – người đăng ký bất kỳ, nghĩa là một ứng dụng có thể đăng ký các sự kiện trong SDK bằng lệnh gọi lại, và khi những sự kiện này xảy ra, lệnh gọi lại sẽ được kích hoạt.

Hệ quả của cấu trúc trên quy trình mới của đề xuất này là có 2 vòng đời quy trình cần được quản lý: một vòng đời cho ứng dụng và vòng đời còn lại cho SDK Thời gian chạy. Đề xuất của chúng tôi tìm cách tự động hoá nhiều nhất có thể, giảm thiểu tác động đối với nhà phát triển ứng dụng và SDK. Sơ đồ sau đây cho thấy một phương pháp mà chúng tôi đang cân nhắc:

Sơ đồ
Sơ đồ trình tự thể hiện mối quan hệ giữa ứng dụng với SDK hoạt động tương tác trong quá trình khởi động ứng dụng và SDK.

Nền tảng sẽ hiển thị API mới dành cho ứng dụng để chủ động tải SDK vào quy trình Thời gian chạy SDK, nhận thông báo về các thay đổi đối với trạng thái của quy trình và tương tác với SDK được tải vào Thời gian chạy SDK.

Biểu đồ trong hình trước minh hoạ hoạt động giao tiếp giữa ứng dụng với SDK ở cấp thấp hơn mà không có lớp dồn.

Ứng dụng giao tiếp với SDK đang chạy trong quy trình Thời gian chạy SDK thông qua các bước sau:

  1. Trước khi có thể tương tác với một SDK, ứng dụng cần yêu cầu nền tảng tải SDK. Để đảm bảo tính toàn vẹn của hệ thống, các ứng dụng sẽ chỉ định SDK sẽ dự định tải trong tệp kê khai, và những SDK này sẽ là những SDK duy nhất được phép tải.

    Đoạn mã sau đây cung cấp ví dụ minh hoạ về API:

    SdkSandboxManager.loadSdk(String sdkName, Bundle data, Executor executor,
        OutcomeReceiver<SandboxedSdk, LoadSdkException> receiver)
    
  2. SDK sẽ được thông báo về việc SDK đã được tải và trả về giao diện của SDK. Giao diện này được sử dụng bởi quy trình ứng dụng. Để chia sẻ giao diện bên ngoài ranh giới của quy trình, giao diện đó phải được trả về dưới dạng đối tượng IBinder.

    Hướng dẫn về dịch vụ ràng buộc giới thiệu nhiều cách cung cấp IBinder. Dù bạn chọn theo cách nào, nó phải nhất quán giữa SDK và phương thức gọi trong ứng dụng. Sơ đồ này dùng AIDL làm ví dụ.

  3. SdkSandboxManager nhận giao diện IBinder và trả về giao diện này cho ứng dụng.

  4. Ứng dụng nhận IBinder và truyền giao diện này vào giao diện SDK, gọi các hàm của giao diện đó:

    IBinder binder = sandboxSdk.getInterface();
    ISdkInterface mySdkInterface = ISdkInterface.Stub.asInterface(binder);
    mySdkInterface.something();
    

Ứng dụng cũng có thể kết xuất nội dung nghe nhìn qua SDK bằng cách làm theo các bước sau:

  1. Như đã giải thích trong phần hiển thị nội dung nghe nhìn của tài liệu này, để một ứng dụng có SDK hiển thị nội dung nghe nhìn trong chế độ xem, ứng dụng phải gọi được cho requestSurfacePackage() và tìm nạp SurfaceControlViewHost.SurfacePackage phù hợp.

    Đoạn mã sau đây cung cấp ví dụ minh hoạ về API:

    SdkSandboxManager.requestSurfacePackage(String sdkName, Bundle extraParams,
            Executor executor,
            OutcomeReceiver<Bundle, RequestSurfacePackageException> receiver)
    
  2. Sau đó, ứng dụng có thể nhúng SurfacePackage được trả về vào SurfaceView thông qua API setChildSurfacePackage trong SurfaceView.

    Đoạn mã sau đây cung cấp ví dụ minh hoạ về API:

    SurfaceView.setChildSurfacePackage(SurfacePackage surfacePackage)
    

Đề xuất của chúng tôi là API IBinder và requestSurfacePackage() phải mang tính khái quát và không dùng để ứng dụng gọi trực tiếp. Thay vào đó, các API này phải được gọi bằng tham chiếu API đã tạo được thảo luận ở trên trong lớp "shim", để giảm gánh nặng cho nhà phát triển ứng dụng.

SDK với SDK

2 SDK trong cùng một ứng dụng thường cần giao tiếp với nhau. Điều này có thể xảy ra khi một SDK nhất định được thiết kế để bao gồm các SDK cấu thành, và có thể xảy ra khi 2 SDK từ các bên khác nhau cần cộng tác để đáp ứng yêu cầu của ứng dụng gọi.

Có 2 trường hợp chính cần xem xét:

  • Khi cả 2 SDK đều được kích hoạt bởi thời gian chạy. Trong trường hợp này, cả hai SDK đều đang chạy trong Thời gian chạy SDK với tất cả các biện pháp bảo vệ. Các SDK không thể giao tiếp như chúng thường làm trong ứng dụng hiện nay. Do đó, một API trong SdkSandboxController đã được thêm vào để cho phép tìm nạp các đối tượng SandboxedSdk cho mọi SDK RE đã tải. Điều này cho phép SDK RE giao tiếp với các SDK khác đã tải trong Thời gian chạy SDK.
  • Khi chỉ có một SDK được kích hoạt bởi thời gian chạy.
    • Nếu SDK gọi đang chạy trong ứng dụng, điều này sẽ không khác với trường hợp ứng dụng đang gọi SDK thứ hai trong Thời gian chạy SDK.
    • Nếu SDK gọi đang chạy trong Thời gian chạy SDK, chúng tôi đề xuất hiển thị một phương thức sử dụng IBinder được mô tả trong phần Ứng dụng với SDK mà mã trong ứng dụng nghe, xử lý và phản hồi bằng các lệnh gọi lại đã cung cấp.
    • Những SDK quảng cáo không được kích hoạt bởi thời gian chạy có thể không tự đăng ký được, chúng tôi đề xuất tạo SDK dàn xếp, trong đó có SDK của đối tác hoặc SDK ứng dụng bất kỳ dưới dạng phần phụ thuộc trực tiếp của ứng dụng và xử lý việc đăng ký. SDK dàn xếp này thiết lập hoạt động giao tiếp giữa các SDK không được kích hoạt bởi thời gian chạy hoặc các phần phụ thuộc khác của ứng dụng và trình dàn xếp được kích hoạt bởi thời gian chạy hoạt động như một đối tượng chuyển đổi.

Bộ tính năng cho hoạt động giao tiếp SDK-SDK đã được chia thành các danh mục sau:

  • Giao tiếp SDK-SDK trong Thời gian chạy SDK (có trong Bản dùng thử mới nhất cho nhà phát triển)
  • Hoạt động giao tiếp SDK-SDK giữa ứng dụng và Thời gian chạy SDK (có trong Bản xem trước mới nhất dành cho nhà phát triển)
  • Cách hoạt động của khung hiển thị và chế độ hiển thị từ xa để dàn xếp (đang phát triển đề xuất)

Các trường hợp sử dụng sau đang được xem xét vì dữ liệu gốc đang được thiết kế:

  1. Dàn xếp và đặt giá thầu. Nhiều SDK quảng cáo cung cấp tính năng dàn xếp hoặc đặt giá thầu, trong đó SDK gọi nhiều SDK khác cho một lượt hiển thị quảng cáo (dàn xếp) hoặc để thu thập tín hiệu chạy phiên đấu giá (đặt giá thầu). Thông thường, SDK điều phối sẽ gọi các SDK khác thông qua bộ chuyển đổi do SDK điều phối cung cấp. Do các dữ liệu gốc ở trên, SDK điều phối, RE hay không phải RE, sẽ có thể truy cập vào mọi SDK RE và không phải RE để hoạt động bình thường. Chúng tôi đang tích cực nghiên cứu về vấn đề hiển thị trong bối cảnh này.
  2. Khám phá tính năng. Một số sản phẩm SDK bao gồm các SDK nhỏ hơn mà thông qua một quy trình khám phá liên SDK, xác định bộ tính năng dành cho nhà phát triển ứng dụng. Dữ liệu gốc đăng ký và khám phá sẽ được bật trong trường hợp sử dụng này.
  3. Mô hình thuê bao của nhà xuất bản. Một số SDK được thiết kế để có một nhà xuất bản sự kiện trung tâm mà các SDK hoặc ứng dụng khác có thể đăng ký thông báo thông qua các lệnh gọi lại. Các dữ liệu gốc nói trên sẽ hỗ trợ trường hợp sử dụng này.

Ứng dụng với ứng dụng

Hoạt động giao tiếp giữa ứng dụng với ứng dụng là trường hợp mà ít nhất một trong hai quy trình giao tiếp là SDK được kích hoạt bởi thời gian chạy, đồng thời là vectơ tiềm năng để chia sẻ dữ liệu chưa công bố. Do đó, Thời gian chạy SDK không thể thiết lập kênh giao tiếp trực tiếp với bất kỳ ứng dụng nào khác ngoài ứng dụng khách hoặc với các SDK trong thời gian chạy SDK khác được tạo cho ứng dụng khác. Điều này diễn ra theo các cách sau đây:

  • SDK không thể xác định các thành phần như <service>, <contentprovider> hoặc <activity> trong tệp kê khai.
  • SDK không thể phát hành ContentProvider hoặc gửi thông báo truyền tin.
  • SDK có thể chạy hoạt động thuộc về một ứng dụng khác, nhưng có giới hạn về nội dung có thể gửi trong Intent. Ví dụ: bạn không thể thêm thao tác bổ sung hoặc tuỳ chỉnh vào Intent này.
  • SDK chỉ có thể bắt đầu hoặc liên kết với danh sách cho phép của dịch vụ.
  • SDK chỉ có thể truy cập vào tập hợp con của hệ thống ContentProvider (chẳng hạn như com.android.providers.settings.SettingsProvider), trong đó dữ liệu thu được thiếu giá trị nhận dạng và không thể dùng để tạo vân tay của người dùng. Các quy trình kiểm tra này cũng áp dụng cho việc truy cập ContentProvider bằng ContentResolver.
  • SDK chỉ có thể truy cập vào tập hợp con các broadcast receiver được bảo vệ (chẳng hạn như android.intent.action.AIRPLANE_MODE).

Thẻ tệp kê khai

Khi SDK được cài đặt, PackageManager phân tích cú pháp tệp kê khai của SDK và sẽ không thể cài đặt SDK nếu có thẻ tệp kê khai bị cấm. Ví dụ: có thể SDK không xác định được các thành phần như <service>, <activity>, <provider> hoặc <receiver> và không khai báo được <permission> trong tệp kê khai. Các thẻ không cài đặt được không được hỗ trợ trong Thời gian chạy SDK. Các thẻ không bị lỗi cài đặt nhưng bị tự động bỏ qua có thể được hỗ trợ trong các phiên bản Android trong tương lai.

Các quy trình kiểm tra này cũng có thể được áp dụng cho mọi công cụ thời gian xây dựng mà SDK dùng để tạo gói SDK và tại thời điểm tải lên cửa hàng ứng dụng.

Hỗ trợ hoạt động

Các SDK trong môi trường Thời gian chạy SDK không thể thêm thẻ hoạt động vào tệp kê khai và không thể bắt đầu các hoạt động của chính chúng bằng Context.startActivity. Thay vào đó, nền tảng sẽ tạo các hoạt động cho SDK khi có yêu cầu và chia sẻ các hoạt động đó với SDK.

Hoạt động trên nền tảng thuộc loại android.app.Activity. Hoạt động trên nền tảng bắt đầu từ một trong những hoạt động của ứng dụng và là một phần trong tác vụ của ứng dụng. FLAG_ACTIVITY_NEW_TASK không được hỗ trợ.

Để bắt đầu hoạt động, SDK phải đăng ký một thực thể thuộc loại SdkSandboxActivityHandler dùng để thông báo về việc tạo hoạt động khi ứng dụng gọi SdkSandboxManager::startSdkSandboxActivity(Activity, IBinder) để bắt đầu hoạt động.

Quy trình yêu cầu một hoạt động được thể hiện trong biểu đồ sau đây.

Sơ đồ
Sơ đồ trình tự cho thấy quy trình bắt đầu một hoạt động.

Quá trình phát triển

Nguyên tắc chính trong đề xuất này là giảm thiểu tác động đối với hệ sinh thái của nhà phát triển trong phạm vi có thể. Đề xuất này sẽ cung cấp cho nhà phát triển một tập hợp toàn diện các công cụ phát triển để viết, tạo, gỡ lỗi ứng dụng và SDK RE. Để đảm bảo tính toàn vẹn của đề xuất này, sẽ có một số thay đổi đối với cách định cấu hình, ghi nhận và tạo ứng dụng và SDK RE.

Ghi nhận quyền tác giả

Android Studio và công cụ liên quan sẽ được cập nhật để nhận biết được môi trường Thời gian chạy SDK, giúp đảm bảo rằng nhà phát triển đã định cấu hình chính xác các ứng dụng và SDK RE, đồng thời đảm bảo rằng các lệnh gọi cũ hoặc không được hỗ trợ đều được cập nhật lên lựa chọn thay thế mới hơn nếu phù hợp. Trong giai đoạn ghi nhận quyền tác giả, có một vài bước mà đề xuất của chúng tôi yêu cầu nhà phát triển thực hiện.

Nhà phát triển ứng dụng

Các ứng dụng cần chỉ định SDK RE và phần phụ thuộc chứng chỉ SDK trong tệp kê khai ứng dụng. Trong đề xuất, chúng tôi coi đây là nguồn đáng tin cậy từ các nhà phát triển ứng dụng trong suốt đề xuất này. Ví dụ:

  • Tên: Tên gói của SDK hoặc thư viện.
  • Phiên bản chính: Mã phiên bản chính của SDK.
  • Chuỗi đại diện chứng chỉ: Chuỗi đại diện chứng chỉ của bản dựng SDK. Đối với một bản dựng nhất định, chúng tôi đề xuất nhà phát triển SDK lấy và đăng ký giá trị này thông qua cửa hàng ứng dụng liên quan.

Điều này chỉ áp dụng cho các SDK do cửa hàng ứng dụng phân phối, cho dù là RE hay không. Các ứng dụng liên kết SDK theo cách tĩnh sẽ sử dụng cơ chế phần phụ thuộc hiện tại.

Do mục tiêu giảm thiểu tác động đối với nhà phát triển, điều quan trọng là sau khi chỉ định cấp độ API mục tiêu hỗ trợ SDK Thời gian chạy, nhà phát triển ứng dụng chỉ cần có một bản dựng cho dù bản dựng đó chạy trên thiết bị có hay không hỗ trợ SDK Thời gian chạy.

Nhà phát triển SDK

Trong thiết kế đề xuất của chúng tôi, nhà phát triển SDK RE cần khai báo rõ ràng một thành phần mới đại diện cho SDK hoặc thực thể thư viện trong tệp kê khai. Ngoài ra, cũng cần có một tập hợp giá trị tương tự làm phần phụ thuộc, cùng với phiên bản nhỏ:

  • Tên: Tên gói của SDK hoặc thư viện.
  • Phiên bản chính: Mã phiên bản chính của SDK.
  • Phiên bản nhỏ: Mã phiên bản nhỏ của SDK.

Nếu nhà phát triển SDK RE có các SDK RE khác làm phần phụ thuộc thời gian xây dựng, họ có thể cần khai báo các SDK đó theo cách giống với cách nhà phát triển ứng dụng khai báo phần phụ thuộc tương tự. SDK RE phụ thuộc vào các SDK không phải RE sẽ liên kết với chúng theo cách tĩnh. Điều này có thể gây ra vấn đề được phát hiện vào thời gian xây dựng hoặc trong khi thông qua thử nghiệm nếu SDK không phải RE cần chức năng mà SDK Thời gian chạy không hỗ trợ hoặc nếu SDK phải chạy trong quy trình của ứng dụng.

Nhà phát triển SDK RE có thể muốn tiếp tục hỗ trợ các thiết bị không được RE hỗ trợ, chẳng hạn như Android 12 trở xuống và như đã đề cập trong phần Tình trạng hệ thống của tài liệu này, các thiết bị Android 13 cấp thấp có tài nguyên hệ thống rất giới hạn. Chúng tôi đang nghiên cứu các phương thức tiếp cận để đảm bảo nhà phát triển SDK có thể giữ lại một cơ sở mã để hỗ trợ môi trường RE và môi trường không phải RE.

Bản dựng

Nhà phát triển ứng dụng

Chúng tôi kỳ vọng rằng không có nhiều thay đổi đối với nhà phát triển ứng dụng trong bước xây dựng. Các phần phụ thuộc SDK, cho dù được phân phối cục bộ hay do cửa hàng ứng dụng phân phối (RE hay không), đều cần tồn tại trên máy để tìm lỗi mã nguồn, biên dịch và xây dựng. Chúng tôi dự định rằng Android Studio tóm tắt những thông tin chi tiết này từ nhà phát triển ứng dụng thông qua cách sử dụng bình thường và thực hiện theo cách minh bạch nhất có thể.

Mặc dù chúng tôi dự kiến rằng bản GỠ LỖI cần bao gồm tất cả mã và biểu tượng sẽ xuất hiện trong bản GỠ LỖI để có thể gỡ lỗi, bản PHÁT HÀNH phải xoá tất cả các SDK do cửa hàng ứng dụng phân phối (RE hoặc không) khỏi cấu phần phần mềm cuối cùng (không bắt buộc).

Chúng tôi đang ở giai đoạn thiết kế ban đầu và sẽ chia sẻ nhiều hơn khi có thông tin cụ thể.

Nhà phát triển SDK

Chúng tôi đang nghiên cứu lộ trình để đảm bảo rằng các phiên bản RE và không phải RE của một SDK có thể được tích hợp vào một cấu phần mềm để phân phối. Qua đó, nhà phát triển ứng dụng không cần hỗ trợ các bản dựng riêng cho phiên bản RE và không phải RE của SDK.

Tương tự như với ứng dụng, SDK phần phụ thuộc do cửa hàng ứng dụng phân phối sẽ cần tồn tại trên máy để tìm lỗi mã nguồn, biên dịch và xây dựng. Chúng tôi kỳ vọng Android Studio sẽ hỗ trợ việc này một cách liền mạch.

Thử nghiệm

Nhà phát triển ứng dụng

Như đã mô tả trong đề xuất, nhà phát triển ứng dụng có thể thử nghiệm ứng dụng của họ trên các thiết bị chạy Android 13 theo cách thông thường. Sau khi họ đã tích hợp ứng dụng, ứng dụng có thể được cài đặt trên trình mô phỏng hoặc thiết bị RE. Quá trình cài đặt này sẽ đảm bảo SDK chính xác được cài đặt vào SDK Thời gian chạy cho thiết bị hoặc trình mô phỏng, cho dù SDK được lấy từ kho lưu trữ SDK từ xa hay bộ nhớ đệm từ hệ thống bản dựng.

Nhà phát triển SDK

Nhà phát triển SDK thường sử dụng các ứng dụng thử nghiệm tại chỗ trên thiết bị và trình mô phỏng để thử nghiệm quá trình phát triển của họ. Đề xuất của chúng tôi không thay đổi điều này. Ngoài ra, quá trình xác thực trong ứng dụng sẽ tuân theo cùng các bước như đã nêu đối với nhà phát triển ứng dụng ở trên, với một cấu phần mềm bản dựng cho cả ứng dụng RE và ứng dụng không phải RE. Nhà phát triển SDK sẽ có thể sử dụng mã cho dù mã có trong SDK Thời gian chạy hay không, mặc dù có một số giới hạn về công cụ gỡ lỗi và lập hồ sơ nâng cao. Chúng tôi đang tích cực nghiên cứu khía cạnh này.

Hoạt động phân phối

Thông qua đề xuất thiết kế tách riêng một ứng dụng khỏi các SDK của nó, bạn có thể phân phối SDK trên cửa hàng ứng dụng. Đây là khả năng chung, không dành riêng cho bất kỳ cửa hàng ứng dụng cụ thể nào. Bạn sẽ thấy rõ những lợi ích sau đây:

  • Đảo bảo chất lượng và sự nhất quán của SDK.
  • Đơn giản hoá hoạt động xuất bản cho nhà phát triển SDK.
  • Tiến hành phát hành các bản cập nhật phiên bản nhỏ của SDK cho ứng dụng đã cài đặt.

Để hỗ trợ phân phối SDK, cửa hàng ứng dụng có thể cần cung cấp hầu hết các khả năng sau:

  • Cơ chế để nhà phát triển SDK tải các SDK có thể phân phối trên cửa hàng ứng dụng lên cửa hàng, cập nhật, hoàn nguyên và có thể là xoá chúng.
  • Một cơ chế để đảm bảo tính toàn vẹn của SDK và nguồn của SDK, ứng dụng và nguồn của ứng dụng và giải quyết các phần phụ thuộc.
  • Một cơ chế triển khai SDK trên thiết bị đáng tin cậy, có hiệu quả một cách nhất quán.

Các hạn chế phát triển theo thời gian

Chúng tôi dự kiến các hạn chế đối với mã trong thời gian chạy SDK sẽ phát triển ở các phiên bản Android sau này. Để đảm bảo khả năng tương thích của ứng dụng, chúng tôi sẽ không thay đổi những hạn chế này bằng các bản cập nhật mô-đun dòng chính cho một cấp độ SDK nhất định. Chúng tôi duy trì hành vi liên kết với một targetSdkVersion nhất định cho đến khi ngừng hỗ trợ targetSdkVersion đó thông qua chính sách cửa hàng ứng dụng, đồng thời có thể đẩy nhanh việc ngừng sử dụng targetSdkVersion cho ứng dụng. Hạn chế có thể thay đổi thường xuyên trên các phiên bản SDK Android, đặc biệt là trong một số bản phát hành đầu tiên.

Ngoài ra, chúng tôi đang xây dựng một cơ chế canary để cho phép người kiểm thử bên ngoài và nội bộ tham gia một nhóm nhận được bộ hạn chế đề xuất cho phiên bản Android tiếp theo. Qua đó, chúng tôi sẽ nhận được ý kiến phản hồi và tự tin đề xuất các thay đổi đối với bộ hạn chế.

Câu hỏi thường gặp

  1. SDK liên quan đến quảng cáo là gì?

    SDK liên quan đến quảng cáo là một SDK hỗ trợ bất kỳ phần nào trong hoạt động nhắm mục tiêu người dùng bằng tin nhắn vì mục đích thương mại, trên những ứng dụng không thuộc sở hữu của nhà quảng cáo. SDK này bao gồm nhưng chỉ gồm SDK phân tích (nơi các nhóm người dùng có thể được tạo để nhắm mục tiêu tiếp theo), SDK phân phát quảng cáo, SDK chống lợi dụng và chống gian lận cho quảng cáo, SDK tương tác và SDK phân bổ.

  2. Có SDK nào chạy được trong Thời gian chạy SDK không?

    Tuy trọng tâm ban đầu là dành cho SDK liên quan đến quảng cáo, những nhà phát triển SDK không liên quan đến quảng cáo mong muốn có một quy trình chuyên nghiệp về quyền riêng tư và tin rằng họ có thể vận hành trong những điều kiện nêu trên có thể chia sẻ ý kiến phản hồi về các SDK của họ đang chạy trong Thời gian chạy SDK. Tuy nhiên, Thời gian chạy SDK không được thiết kế để tương thích với tất cả các thiết kế SDK. Ngoài các hạn chế đã nêu, Thời gian chạy SDK có thể không phù hợp với những SDK cần giao tiếp theo thời gian thực hoặc giao tiếp tần suất cao với ứng dụng lưu trữ.

  3. Tại sao lại chọn tính năng tách biệt quy trình thay vì tách biệt trong thời gian chạy dựa trên Java của một quy trình?

    Thời gian chạy dựa trên Java hiện chưa sẵn sàng hỗ trợ các ranh giới bảo mật cần thiết cho những bảo đảm về quyền riêng tư mà người dùng Android mong muốn. Việc cố gắng triển khai những giải pháp như thế này có thể đòi hỏi bạn nỗ lực trong nhiều năm mà không chắc chắn sẽ thành công. Do đó, Hộp cát về quyền riêng tư sử dụng ranh giới của quy trình, đây là một công nghệ mà chúng ta đều hiểu rõ và đã được thử nghiệm theo thời gian.

  4. Việc chuyển SDK vào quy trình SDK Thời gian chạy có cung cấp kích thước tải xuống hay tiết kiệm dung lượng không?

    Nếu bạn tích hợp nhiều ứng dụng với các SDK có hỗ trợ thời gian chạy của cùng một phiên bản thì việc đó có thể làm giảm kích thước tải xuống và dung lượng ổ đĩa.

  5. Trong Thời gian chạy SDK, SDK có quyền truy cập vào những loại sự kiện nào trong vòng đời của ứng dụng, chẳng hạn như khi ứng dụng chuyển sang chế độ nền?

    Chúng tôi đang nỗ lực hỗ trợ thiết kế nhằm thông báo cho môi trường thời gian chạy SDK về các sự kiện trong vòng đời cấp ứng dụng của ứng dụng khách (ví dụ: ứng dụng chuyển sang chạy ở chế độ nền, ứng dụng chuyển sang chạy ở nền trước). Mã thiết kế và mã mẫu sẽ được chia sẻ trong bản dùng thử sắp tới cho nhà phát triển.