안드로이드 개발 질문/답변
(글 수 45,052)
가상 sd카드를 만들어서 사용할려구 하는데요.
에뮬을 띄워서 확인해본결과 sdcard가 읽고 쓰기가 허용이 되지 않았습니다.
adb 명령으로 읽기 쓰기 권한 주는 방법 있으면 알려주세요..꾸벅^^
에뮬을 띄워서 확인해본결과 sdcard가 읽고 쓰기가 허용이 되지 않았습니다.
adb 명령으로 읽기 쓰기 권한 주는 방법 있으면 알려주세요..꾸벅^^
2009.07.17 23:58:46
회색님의 링크로 해결이 안되시면
근본적인 해결은 아니지만 adb -e shell로 접속하셔서 권한 변경 가능합니다.
# mount
/dev/block//vold/179:0 /sdcard vfat ro,dirsync,nosuid,nodev,noexec,uid=1000,gid=1000,fmask=0711,dmask=0700,allow_utime=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8 0 0
ro일 경우
# umount /sdcard
# mount -rw -t vfat /dev/block//vold/179:0 /sdcard
# mount
/dev/block//vold/179:0 /sdcard vfat rw,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=iso8859-1 0 0
근본적인 해결은 아니지만 adb -e shell로 접속하셔서 권한 변경 가능합니다.
# mount
/dev/block//vold/179:0 /sdcard vfat ro,dirsync,nosuid,nodev,noexec,uid=1000,gid=1000,fmask=0711,dmask=0700,allow_utime=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8 0 0
ro일 경우
# umount /sdcard
# mount -rw -t vfat /dev/block//vold/179:0 /sdcard
# mount
/dev/block//vold/179:0 /sdcard vfat rw,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=iso8859-1 0 0
2009.07.18 00:19:34
리눅스 고수이신 노쓰님이 계셔서 든든합니다. 애플리케이션 개발은 리눅스에서 안하고 잘 몰라서 :) 위 명령을 잘이해도 못하겠네요. 에뮬에서 sdcard가 안잡히면 가상 sdcard를 생성을 안한 경우에 생기는데 위의 명령어로 adb shell상에서도 sdcard를 생성을 시키는건가요? sdcard는 접속되어있는데 다른 이유로 sdcard가 마운트 안되는 경우도 있는건가요?
2009.07.18 00:49:09
... 전 고수가 아니에요 ^.^
제 댓글은 sdcard생성하고 설정한 상태에서 원인은 모르겠지만 가끔 read only로 sdcard가 마운트 되는 경우라고 짐작하고
대답한 것입니다.
sdcard를 생성 안하신 상태라면.... 의미없는 댓글이 되겠네요
비슷한 방법으로 ready only인 /system 디렉토리도 다시 마운트해서(-o remount,rw) jni 라이브러리 파일도
올릴 수 있습니다.
제 댓글은 sdcard생성하고 설정한 상태에서 원인은 모르겠지만 가끔 read only로 sdcard가 마운트 되는 경우라고 짐작하고
대답한 것입니다.
sdcard를 생성 안하신 상태라면.... 의미없는 댓글이 되겠네요
비슷한 방법으로 ready only인 /system 디렉토리도 다시 마운트해서(-o remount,rw) jni 라이브러리 파일도
올릴 수 있습니다.
2009.07.20 11:46:45
제목과 같은 문제 인것 같습니다.
adb push test.mp4 /tmp/test.mp4
failed to copy 'test.mp4' to '/tmp/test.mp4': No such file or directory
처음에 이렇게 나와서 shell로 들어가서 tmp라는 폴더를 생성 해주고
다시 나와서 입력 해도 같은 에러가 나와서 /대신 \로 바꾸어 입력하니
adb push test.mp4 \tmp\test.mp4
failed to copy 'test.mp4' to 'test.mp4': Read-only file system
RO문제 인 듯 해서
회색님과 노쑤님께서 적어주신 라인 그대로 쳤는데도
RO가 RW로 바뀌지 않는 것 같아서..
또 다른 이유가 있을지와 해결 방안을 제시 해줄 수 있는지 해서 코멘드를 달아봅니다.
shell 안에 들어가서 ls로 보면 sdcard라는 폴더가 있습니다.
(있으면 sdcard가 생성이 되었다고 보는 것이 맞지요?)
adb push test.mp4 /tmp/test.mp4
failed to copy 'test.mp4' to '/tmp/test.mp4': No such file or directory
처음에 이렇게 나와서 shell로 들어가서 tmp라는 폴더를 생성 해주고
다시 나와서 입력 해도 같은 에러가 나와서 /대신 \로 바꾸어 입력하니
adb push test.mp4 \tmp\test.mp4
failed to copy 'test.mp4' to 'test.mp4': Read-only file system
RO문제 인 듯 해서
회색님과 노쑤님께서 적어주신 라인 그대로 쳤는데도
RO가 RW로 바뀌지 않는 것 같아서..
또 다른 이유가 있을지와 해결 방안을 제시 해줄 수 있는지 해서 코멘드를 달아봅니다.
shell 안에 들어가서 ls로 보면 sdcard라는 폴더가 있습니다.
(있으면 sdcard가 생성이 되었다고 보는 것이 맞지요?)
2009.07.20 12:25:44
/tmp 디렉토리는 사용할 수 없습니다. /sdcard 는 제대로 마운트 되었다면 읽기쓰기 권한이 들어가있을거에요 /sdcard가 있다고 해서 마운트가 되어있다는 의미는 아닙니다.
2009.07.20 13:49:10
회색님 지적 감사합니다.
작동이 잘 되어서 댓글을 답니다.
우선 위에 써 있는 것은 "unlocking Android"이라는 책을 보다가 안되었던 점이고
다른 책 중 "헬로, 안드로이드"라는 책을 보니
adb push c:\code\samplevide.mp4 /sdcard/samplevideo.mp4
/sdcard라는 폴더를 앞에 넣어서
adb push test.mp4 /sdcard/test.mp4
해보니 에러 없이 작동되었습니다.
.java 소스 안에서도
myVideo.setVideoPath("/tmp/test.mp4");
----> myVideo.setVideoPath("/sdcard/test.mp4");
되었습니다.
감사합니다.
작동이 잘 되어서 댓글을 답니다.
우선 위에 써 있는 것은 "unlocking Android"이라는 책을 보다가 안되었던 점이고
다른 책 중 "헬로, 안드로이드"라는 책을 보니
adb push c:\code\samplevide.mp4 /sdcard/samplevideo.mp4
/sdcard라는 폴더를 앞에 넣어서
adb push test.mp4 /sdcard/test.mp4
해보니 에러 없이 작동되었습니다.
.java 소스 안에서도
myVideo.setVideoPath("/tmp/test.mp4");
----> myVideo.setVideoPath("/sdcard/test.mp4");
되었습니다.
감사합니다.
2009.07.20 14:05:02
cmd 창에서 shell 명령어로 확인해보면 sdcard가 존재는 합니다. 단지 권한이 제대로 안되서 그렇네요..
컵케익을 받아서 우분투에서 빌드하고 나온 이미지 파일을 윈도우에 깔린 android sdk 의 images폴더에 넣어서, 실행을 시키니
sdcard가 제대로 인식이 안되고 있습니다. 권한이 제대로 안되있더라구요.
어떤분은 vold.conf 파일을 수정해야 한다는 말씀도 있으셨는데.. 잘 이해가 안가더라구요..ㅡㅡ;;
컵케익을 받아서 우분투에서 빌드하고 나온 이미지 파일을 윈도우에 깔린 android sdk 의 images폴더에 넣어서, 실행을 시키니
sdcard가 제대로 인식이 안되고 있습니다. 권한이 제대로 안되있더라구요.
어떤분은 vold.conf 파일을 수정해야 한다는 말씀도 있으셨는데.. 잘 이해가 안가더라구요..ㅡㅡ;;
2009.07.24 09:45:07
우분투환경이 아닌 윈도우 환경이라면
제가 하는 간단한 방식도 있겠네요.
1. 윈도우에서 에뮬이 실행시키고 cmd로 가서
2. c:\ adb devices (현재 띄워진 에뮬이름이 표시됩니다.)
3. c:\ adb remount (remount하면 권한설정이 가능합니다. 한번해주세요)
4. c:\ adb shell (shell 창을 키고 )
5. #chmod 4755 /data/sdcard/* (눌러줍니다.)
6. DDMS에서 보면 쓰기보드가 변해 있습니다. 또는 쉘에서 ls -l /data/sdcard/* 로 보시면됩니다.
제가 하는 간단한 방식도 있겠네요.
1. 윈도우에서 에뮬이 실행시키고 cmd로 가서
2. c:\ adb devices (현재 띄워진 에뮬이름이 표시됩니다.)
3. c:\ adb remount (remount하면 권한설정이 가능합니다. 한번해주세요)
4. c:\ adb shell (shell 창을 키고 )
5. #chmod 4755 /data/sdcard/* (눌러줍니다.)
6. DDMS에서 보면 쓰기보드가 변해 있습니다. 또는 쉘에서 ls -l /data/sdcard/* 로 보시면됩니다.
2010.05.30 23:40:19
근본적인 해결책은 Manifest file 에 permission을 추가하는것이 맞는것 같습니다.
이문제로 몇일 고생했는데 에뮬레이터에서는 위의 권한 변경이 전혀 먹히지 않더군요
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.sdcard"
android:versionCode="1"
android:versionName="1.0">
...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_OWNER_DATA"/>
<uses-permission android:name="android.permission.READ_OWNER_DATA"/>
</manifest>
http://developer.android.com/reference/android/Manifest.permission.html