Làm cách nào để gắn kết các thư mục --bind trên Android 4.4?


7

Tôi chỉ tự hỏi có cách nào để liên kết một /sdcardthư mục nội bộ với một /sdcardthư mục nội bộ khác và các ứng dụng thông thường có thể ghi vào đó cho các phiên bản Android kể từ 4.4 không?

Tôi có một thư mục có tên ./MyPicstrong nội bộ /sdcard. Tôi muốn ràng buộc nó vào ./DCIM/Camera, ./Pictures/Screenshots, ./Movies/Screencasts. Thẻ SD được gắn trong /mnt/shell/emulated/0như sdcardfs, và nó được symlinked tới /storage/emulated/legacy. Hơn nữa, có một thư mục /storage/emulated/0, không phải là một điểm gắn kết cũng không phải là một liên kết tượng trưng. Đó là một thư mục rất kỳ lạ.

  1. Tôi đã thử như sau:

    mount -o bind,dmask=0000,fmask=0000 /mnt/shell/emulated/0/MyPics /mnt/shell/emulated/0/DCIM/Camera  
    mount -o bind,dmask=0000,fmask=0000 /mnt/shell/emulated/0/MyPics /mnt/shell/emulated/0/Pictures/Screenshots  
    mount -o bind,dmask=0000,fmask=0000 /mnt/shell/emulated/0/MyPics /mnt/shell/emulated/0/Movies/Screencasts  
    

    nhưng nó không có tác dụng: Các ứng dụng như Camera không thể ghi vào /DCIM/Camera

  2. Tôi đã thử như sau:

    mount -o bind,dmask=0000,fmask=0000 /storage/emulated/legacy/MyPics /mnt/shell/emulated/0/...
    ....
    

    nhưng nó cũng không có tác dụng

  3. Tôi đã thử như sau:

    mount -o bind,dmask=0000,fmask=0000 /data/media/0/MyPics /data/media/0/...
    ....
    

    Nếu có một file có tên a.jpgtrong /MyPics, nó xuất hiện trong /data/media/0/DCIM/Camera, nhưng nó không xuất hiện trong/storage/emulated/legacy/DCIM/Camera

  4. Tôi đã thử sử dụng Ứng dụng như LuckPatcher để thực hiện công việc, nhưng nó lại thất bại


Bạn đã thử sử dụng ln -s? ln -s /sdcard/MyPics /sdcard/DCIM/Camera. Bạn sẽ cần di chuyển thư mục Camera trước.
keepcalm

Câu trả lời:


1

Thật không may, vì Android 4.2, hầu hết các thiết bị không còn có thể gắn thư mục và cũng có sẵn cho các ứng dụng khác. Chi tiết về cách thức hoạt động và lý do thay đổi này có thể được tìm thấy ở đây: Khắc phục các thư mục được gắn ứng dụng trống (CifsManager, v.v.) trong Android 4.2 .

Trang được đề cập ở trên nói điều này:

Nguyên văn bởi Zygote patch cam kết thông điệp

Zygote: Hạn chế không gian gắn kết nô lệ để các ứng dụng Dalvik có thể gắn kết khối lượng toàn hệ thống, Android 4.2 thực hiện lưu trữ nhiều người dùng bằng cách sử dụng các không gian tên gắn kết theo quy trình. Ban đầu, mọi thứ trong "/" (toàn bộ hệ thống phân cấp tệp) được đánh dấu là một không gian gắn kết đệ quy cho tất cả các trường hợp hợp tử. Điều này được thực hiện để các hộp cát lưu trữ người dùng gắn dưới / lưu trữ / mô phỏng được ẩn khỏi các ứng dụng và người dùng khác. Thật không may, điều này có nghĩa là bất kỳ ứng dụng Dalvik nào (thực ra, bất kỳ chương trình nào có tổ tiên nhân bản / ngã ba đều bao gồm hợp tử Dalvik, tất cả mọi thứ trừ các dịch vụ được sinh ra trực tiếp từ init) đều không thể gắn kết toàn bộ hệ thống. Do đó, các ứng dụng như CifsManager bị hỏng một cách hiệu quả trong Android 4.2, vì các giá trị cifs của nó chỉ hiển thị với chính ứng dụng CifsManager. Tất cả các ứng dụng khác nhìn thấy các điểm gắn kết trống thay vì âm lượng được gắn kết. Hơn nữa,

Ở đây, chúng tôi giới hạn không gian gắn kết nô lệ vào / lưu trữ (và, do lỗi hạt nhân có thể xảy ra, / mnt / shell / giả lập) để các ứng dụng Dalvik có thể gắn kết khối lượng toàn hệ thống ở nơi khác (với sự cho phép phù hợp, như trong các phiên bản trước của Android) , trong khi vẫn duy trì khả năng tương thích lưu trữ đa người dùng. Thay đổi này yêu cầu một khối lượng tmpfs được gắn dưới dạng / Storage trong init.rc. Nếu khối lượng này không có sẵn, thì Zygote rơi trở lại hành vi trước đó là đánh dấu toàn bộ hệ thống phân cấp tệp là nô lệ. Nó cũng ngầm yêu cầu EMULATED_STORAGE_TARGET được tiền tố đường dẫn bởi (một phần của chế độ con của) ANDROID_STORAGE, đây là trường hợp điển hình.

Vấn đề là nếu các ứng dụng gắn một thư mục hoặc thiết bị chặn, thư mục được gắn chỉ nên hiển thị cho các ứng dụng đã gắn kết trừ khi ứng dụng có các quyền đặc biệt, thường không có sẵn cho các ứng dụng không thuộc hệ thống. Và ngay cả khi bạn quản lý để gắn kết thư mục trên toàn cầu, các quyền của Linux vẫn sẽ cản trở bạn.

Do đó, việc gắn kết có thể không phải là giải pháp dễ dàng nhất cho vấn đề của bạn, nhưng nếu bạn thực sự muốn sử dụng các mount, bạn có thể thêm các lệnh vào /system/bin/debuggerdvà sau đó (với quyền root) start debuggerdđể thực thi tập lệnh của riêng bạn với các đặc quyền hệ thống.

Có một cách dễ dàng hơn để khắc phục các vấn đề chỉ đọc, bằng cách cài đặt ứng dụng này hoặc bằng cách thêm thủ công media_rwnhóm vào WRITE_EXTERNAL_STORAGEtệp quyền. Điều này cho phép các ứng dụng có quyền ghi vào thẻ SD được mô phỏng cũng ghi vào thẻ SD 'bên ngoài'.

Sau khi làm cho bộ nhớ ngoài của bạn có thể ghi được, bạn sẽ có thể sử dụng symlink ( ln -s /sdcard/MyPics /sdcard/DCIM/Camera) để cho phép truy cập nhanh vào các thư mục này.

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.