Cho rằng mỗi ứng dụng chạy như một người dùng riêng biệt, điều gì xảy ra khi bạn muốn thêm tài khoản người dùng mới?


7

Theo đó , mọi ứng dụng trong Android đều chạy như một người dùng cấp hạt nhân riêng biệt, với ID người dùng và ID nhóm duy nhất.

Vậy, điều gì xảy ra dưới mui xe khi bạn thêm người dùng mới (ví dụ: vào máy tính bảng dùng chung của bạn)?


3
Nếu tôi nhớ lại thì mỗi tác vụ này là một ứng dụng được chạy dưới dạng 'người dùng' riêng biệt trong kernel, bên dưới toàn bộ người dùng đã đăng nhập. Điều đó có nghĩa là có nhiều 'NGƯỜI DÙNG' như người thật có tài khoản, nhưng ở cấp độ kernel công cụ là một người dùng ảo, không phải là người thật hay người dùng máy tính bảng / thiết bị, mà là một quá trình cô lập trừu tượng. Đây là một mối quan tâm bảo mật / quyền riêng tư. Thêm một hồ sơ người dùng khác chỉ cần thêm một lớp khác. Bạn sẽ là user1 với rất nhiều ứng dụng chạy dưới 'người dùng ảo' và user2 sẽ có ứng dụng của họ chạy dưới người dùng ảo. Từ "người dùng" khó hiểu.
RossC

Không trộn lẫn "Người dùng hệ điều hành" với Hồ sơ / Tài khoản người dùng . Tính năng "Nhiều người dùng" được thêm vào với JellyBean sử dụng Hồ sơ cho các Tài khoản khác nhau, không phải cho Người dùng hệ điều hành. Hai đôi giày hoàn toàn khác nhau.
Izzy

Câu trả lời:


17

Các Linux ID người dùng mà Android sử dụng các ứng dụng cô lập lẫn nhau là hoàn toàn không liên quan đến hồ sơ người dùng trên Android 4.2 máy tính bảng.

Trong Android, mỗi ứng dụng có thư mục riêng để lưu dữ liệu. Hệ thống ID người dùng Linux được sử dụng để đảm bảo các ứng dụng không thể đọc dữ liệu của nhau. Nhưng tất cả các thư mục dữ liệu này nằm trong một thư mục trên hệ thống tập tin , /data/user/0. Giả sử người dùng đầu tiên được gọi là Abulurd và anh ta cài đặt ứng dụng Showr. Nó có thể được cung cấp ID người dùng 1004 và thư mục /data/user/0/com.shadowburst.showr.

Bây giờ, giả sử bạn tạo một hồ sơ người dùng mới cho Beatrice. Cô nhận được một thư mục mới /data/user/1, bắt đầu trống rỗng. Khi cô đăng nhập vào thiết bị và cài đặt Showr, nó sẽ không tải xuống lại ứng dụng (vì trình cài đặt ứng dụng Android biết tệp APK đã có trên thiết bị), nhưng nó tạo ra ID người dùng mới 1007 (ví dụ), và một thư mục mới /data/user/1/com.shadowburst.showr.

Android sử dụng quyền của hệ thống tập tin Linux và ID người dùng Linux khác nhau, không chỉ để đảm bảo rằng Showr của Abulurd không thể đọc dữ liệu của các ứng dụng khác của Abulurd, mà cả Showr của Abulurd cũng không thể đọc dữ liệu của Showrice của Beatrice. Hai phiên bản Showr chạy trong các quy trình khác nhau, với ID người dùng khác nhau.

Nếu bạn quen thuộc với thuật ngữ Linux, việc tạo một hồ sơ người dùng mới tương tự như sử dụng chroottrên thiết bị để có được một phần riêng biệt của hệ thống tệp để chạy các ứng dụng.

Những gì tôi đã mô tả là quy trình thông thường, nhưng cũng giống như các ứng dụng có thể được viết để chia sẻ thư mục dữ liệu với các ứng dụng khác bởi cùng một nhà phát triển (được ký cùng một khóa), Android cho các ứng dụng cơ hội để nói rằng chúng hoạt động với nhiều người dùng. Bằng cách này, một ứng dụng có thể được viết để có một quy trình cho tất cả các hồ sơ người dùng, để cho phép họ chia sẻ dữ liệu hoặc thực hiện một số chức năng đặc biệt. Ví dụ, màn hình khóa phải hoạt động theo cách này, vì tất cả các cấu hình người dùng chia sẻ một ứng dụng màn hình khóa, phải đọc tất cả các cài đặt màn hình khóa của người dùng.


Bài đăng song song :) Để đặt nó vào các thuật ngữ dễ dàng hơn, các cấu hình có thể được so sánh với việc chạy các máy ảo khác nhau trên cùng một máy chủ, sử dụng một loại "lưu trữ chia sẻ" không?
Izzy

Không. Một VM sẽ có kernel riêng.
Dan Hulme

Vì vậy, nếu một người cài đặt một ứng dụng và nó được gán cho id người dùng, ví dụ như app_143, và sau đó tạo một hồ sơ người dùng khác và chạy lại ứng dụng có hồ sơ người dùng đó hoạt động tại một thời điểm nào đó, id người dùng khác, ví dụ như app_265 có thể được tạo cho cùng một ứng dụng không?
43488

@galegosimpatico Vâng, chính xác là như vậy. Đừng quên rằng ứng dụng phải được cài đặt cho hồ sơ người dùng mới trước khi có thể chạy.
Dan Hulme

Cảm ơn. Bạn nói rằng nó không tải xuống ứng dụng hai lần vì trình cài đặt biết tệp APK đã có trên thiết bị. Chà, nó không tải xuống, nhưng nó có cài đặt lại ứng dụng không (theo yêu cầu của một hồ sơ khác)? Không thể chia sẻ một số "nhị phân" giữa tất cả người dùng? (để cài đặt lại các ứng dụng thực sự nặng hoặc lớn)
Reflection

2

Điều gì xảy ra khi bạn thêm tài khoản người dùng mới là tài khoản mới (hoặc "Hồ sơ người dùng") được tạo. Điều này hoàn toàn không liên quan gì đến việc quản lý người dùng / nhóm trên OS-Level. Bạn sẽ nhận thấy rằng hầu hết các cách thực hiện (ví dụ: cách này trên HowToGeek ) nói về các tài khoản , vì thuật ngữ "người dùng" sẽ khá sai lệch.

Tôi không phải là nhà phát triển Android, vì vậy tôi không thể cung cấp cho bạn một lời giải thích kỹ thuật sâu hơn. Nhưng theo như tôi biết, tính năng nhiều người dùng được hiện thực hóa trên đỉnh của lõi Linux (tức là trong Java / Dalvik). EDIT: Dan đăng câu trả lời của anh ấy cùng lúc với tôi, vì vậy hãy xem ở đó để có nền tảng kỹ thuật :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.