(Publicé esta pregunta en Stack Overflow antes ( https://stackoverflow.com/questions/42738392/android-mount-obb-to-external-sd-card-failed ), luego descubrí que aquí puede ser un mejor lugar para publicar esta pregunta.)
Quiero mover el obb (1 GB) de un juego a la tarjeta SD. Copié el archivo obb en la tarjeta SD y el enlace simbólico mediante:
su
ln -sf /storage/sdcard1/Android/obb/com.game /sdcard/Android/obb/com.game
pero falló con "función no implementada".
Lo busqué en Google y obtuve "algún sistema de archivos no admite enlaces simbólicos".
Así que traté de usar el montaje por comando:
su
mount -o bind /storage/sdcard1/Android/obb/com.game /sdcard/Android/obb/com.game
pero encontré que solo la raíz puede ver los archivos en la carpeta. Entonces lo hago:
cd /system/bin/
chmod 4777 ./toolbox #make anyone can use mount(in toolbox)
su u0_aXXX #the game's uid
mount -o bind /storage/sdcard1/Android/obb/com.game /sdcard/Android/obb/com.game
ls -l /sdcard/Android/obb/com.game
$ -rwxrwx--- u0_aXXX sdcard_r com.game.obb
pero cuando yo
cat /sdcard/Android/obb/com.game/com.game.obb
$ cat: /sdcard/…ame.obb permission denied
Estoy usando android5, ¿alguna solución? Gracias.
(Si está encontrando cómo mover obb a una tarjeta SD externa y volver a montarla en la interna, ¡aquí está el lugar correcto!) ¡Finalmente encontré la solución a esta pregunta por mí mismo! La aplicación no puede acceder al obb por sí misma, requiere media_rw para acceder. Encontrado por lsof:
sdcard 340 media_rw 15 ??? ??? ??? ???
/data/media/obb/com.game/com.game.obb
sdcard 340 media_rw 17 ??? ??? ??? ???
/data/media/obb/com.game/com.game.obb
com.game 26335 u0_a266 36 ??? ??? ??? ???
/storage/emulated/0/Android/obb/com.game/com.game.obb
com.game 26335 u0_a266 37 ??? ??? ??? ???
/storage/emulated/0/Android/obb/com.game/com.game.obb
Así que tengo que montar la carpeta de la tarjeta SD externa en dos lugares y cada uno debe tener su propietario correcto:
owner folder
u0_a266 /storage/emulated/legacy/Android/obb/com.game
media_rw /data/media/obb/com.game
Pero si monto /storage/sdcard1/Android/obb/com.game en esos dos lugares, se convertirá en:
owner folder
u0_a266 /storage/emulated/legacy/Android/obb/com.game
u0_a266 /data/media/obb/com.game
Entonces encontré si lo hago:
mount -o bind /storage/sdcard1/Android/obb/com.game /storage/emulated/legacy/Android/obb/com.game
mount -o bind /mnt/media_rw/sdcard1/Android/obb/com.game /data/media/obb/com.game
Encontré que esto funciona bien, porque la fuente y el destino del comando de montaje es su propietario original. ¡La aplicación puede funcionar muy bien!