1. Android SDK 설치
2. Target 을 USB로 연결
3. USB ID 획득
lsusb 명령어로 Target의 USB ID를 확인
Bus 001 Device 002: ID 04e8:685e [Manufacturer]
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
새로 연결된 타겟 뒤의 ID만 확인하시면 됩니다.
4. /etc/udev/rules.d/ 51-android.rules 파일에 USB ID 등록
위에서 얻은 ID를 해당 파일에 넣어주면 됩니다.
파일은 보통 존재하지 않으며, 새로 만들어주시면 됩니다.
sudo vi /etc/udev/rules.d/51-android.rules
파일을 연 후에 아래와 같이 적어주시면 됩니다.
SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="685e", MODE="0666"
타겟마다 ID가 틀릴 수 있기 때문에 lsusb 명령어를 통해 얻은 ID를 확인해주셔야합니다.
5. Target 분리 후 다시 연결
6. adb devices 명령어로 확인하였을 때 아래와 같이 나오면 됩니다.
List of devices attached
M110823949234 device
[출처] http://www.appcreator.com/app-inventor-connecting-ubuntu-and-samsung-galaxy-s
2011/10/13
2010/07/20
Application에 할당되는 Maximum VM Heap Size의 변경
간혹 OpenGL 기반 Application이나 메모리 사용량이 많은 Application을 개발할 때, Heap이 부족하여, 메모리 할당을 받지 못해 Application이 정상적으로 동작하지 않는 경우가 있다. Application단에서 이를 해결할 방법은 없으며, Framework에서 수정되어야 한다.
파일: android/frameworks/base/core/jni/AndroidRuntime.cpp
수정 전: property_get("dalvik.vm.heapsize", heapsizeOptsBuf+4, "16m");
수정 후: property_get("dalvik.vm.heapsize", heapsizeOptsBuf+4, "48m");
만약 48MiB도 작다면, 맘껏 늘려보자. :-p
[Update]
욱's님에 의하면, build.prop에 있는 dalvik.vm.heapsize의 값을 원하는 값으로 설정해줘야 한다고 합니다.
만약 48MiB도 작다면, 맘껏 늘려보자. :-p
[Update]
욱's님에 의하면, build.prop에 있는 dalvik.vm.heapsize의 값을 원하는 값으로 설정해줘야 한다고 합니다.
2010/07/19
Emulator의 SD Card를 Mount하는 방법
타겟에서 작업할때는 별 상관 없지만, Emulator를 주로 사용하다보면 DDMS에서 볼 수 없는 파일들을 볼 일이 생길 경우가 있다. 이럴 경우에 mksdcard 명령으로 만들어진 이미지를 리눅스에서 간단하게 Mounting 할 수 있다.
$sudo mount -o loop <android sdcard file name> <mounting point>
$sudo mount -o loop <android sdcard file name> <mounting point>
2010/07/09
Eclair Full Build!
가정: "Get Android Source Code" 과정은 생략
~$ mkdir bin
~$ curl http://android.git.kernel.org/repo ~/bin/repo
~$ chmod a+x ~/bin/repo
~$ mkdir mydroid
~$ cd mydroid
~$ repo init-u git://android.git.kernel.org/platform/manifest.git -b eclair
~$ repo sync
소스를 다 받은 후, (엄청 오래 걸린다.)
~$ make
Eclair 빌드 후 Project 생성시 XML에러 문제
Eclair 버전에서 SDK를 만들어 이클립스와 연동한 다음, 프로젝트를 생성하면 아래와 같은 에러가 발생한다.
W/ResourceType(267): Unable to get buffer of resource asset file
ERROR No resource identifier found for attribute 'orientation' in package 'android'
...
해결 방법:
http://www.mail-archive.com/android-developers@googlegroups.com/msg21641.html
프로젝트 빌드 중 APP가 android.jar 파일안의 "resource.arsc" 파일을 버퍼에 넣을 때 버퍼의 사이즈가 작아 압축 실패가 원인이다.
[mydroid]/frameworks/base/include/utils/Asset.h 파일의 아래 내용을 다음으로 교체하면 해결됨.
수정 전:
#ifdef HAVE_ANDROID_OS
UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024
#else
UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024
#endif
수정 후:
#ifdef HAVE_ANDROID_OS
UNCOMPRESS_DATA_MAX = 4 * 1024 * 1024
#else
UNCOMPRESS_DATA_MAX = 4 * 1024 * 1024
#endif
안드로이드를 풀빌드하는 경우 HAVE_ANDROID_OS가 정의되어 있는 것으로 보임.
수정 후 빌드 완료!
W/ResourceType(267): Unable to get buffer of resource asset file
ERROR No resource identifier found for attribute 'orientation' in package 'android'
...
해결 방법:
http://www.mail-archive.com/android-developers@googlegroups.com/msg21641.html
프로젝트 빌드 중 APP가 android.jar 파일안의 "resource.arsc" 파일을 버퍼에 넣을 때 버퍼의 사이즈가 작아 압축 실패가 원인이다.
[mydroid]/frameworks/base/include/utils/Asset.h 파일의 아래 내용을 다음으로 교체하면 해결됨.
수정 전:
#ifdef HAVE_ANDROID_OS
UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024
#else
UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024
#endif
수정 후:
#ifdef HAVE_ANDROID_OS
UNCOMPRESS_DATA_MAX = 4 * 1024 * 1024
#else
UNCOMPRESS_DATA_MAX = 4 * 1024 * 1024
#endif
안드로이드를 풀빌드하는 경우 HAVE_ANDROID_OS가 정의되어 있는 것으로 보임.
수정 후 빌드 완료!
2010/04/20
NDK: Assert 걸렸을 때 PC 값의 주소 보는 방법
출처: http://groups.google.com/group/android-developers/browse_thread/thread/73f89bb8739c24bb/5228e7a5dcfff090
Assert가 걸렸을 때 Symbol들(eg. Function name)이 보이지 않는 이유는 Device에 Install 될 때, Library의 Symbol들을 떼어 버리기 때문이다.
Symbol들을 보기 위해서는 addr2line을 쓰는 방법과 gdb/gdbserver를 쓰는 방법이 있는데, 비교적 사용법이 간단한 addr2line을 사용하는 방법을 알아본다.
사용법은 아래와 같다.
cygwin의 Bash를 띄운 후 아래와 같이 입력하면 된다.
arm-eabi-addr2line.exe -f -e <library name> <address>
-f: Show function names
-e: Set the input file names
만약 아래와 같이 Assert가 발생했다고 하자.
위에서 PC 값에 적힌, 주소를 Library와 함께 넣어주면 된다.
arm-eabi-addr2line.exe -f -e YYYY.so 0001c176
출력>
[Symbol Name]
??:0
arm-eabi-addr2line.exe -f -e YYYY.so 0003b026
출력>
[Symbol Name]
??:0
주) arm-eabi-addr2line.exe는 NDK의 build\prebuilt\windows\arm-eabi-4.4.0\bin\에 존재한다.
Assert가 걸렸을 때 Symbol들(eg. Function name)이 보이지 않는 이유는 Device에 Install 될 때, Library의 Symbol들을 떼어 버리기 때문이다.
Symbol들을 보기 위해서는 addr2line을 쓰는 방법과 gdb/gdbserver를 쓰는 방법이 있는데, 비교적 사용법이 간단한 addr2line을 사용하는 방법을 알아본다.
사용법은 아래와 같다.
cygwin의 Bash를 띄운 후 아래와 같이 입력하면 된다.
arm-eabi-addr2line.exe -f -e <library name> <address>
-f: Show function names
-e: Set the input file names
만약 아래와 같이 Assert가 발생했다고 하자.
Build fingerprint: XXXX
pid: 1917, tid: 1960 >>> XXXX <<<
signal 11 (SIGSEGV), fault addr 450774f0
r0 ffffffa5 r1 ffec01a4 r2 450774f0 r3 45235310
r4 fffffb00 r5 ff000000 r6 ff000000 r7 000001df
r8 00ff00ff r9 4767fca4 10 4767fcc0 fp 00000780
ip 000000ff sp 4767fac0 lr 80d1c041 pc 80d1c176 cpsr a0000030
#00 pc 0001c176 YYYY.so #01 pc 0003b026 YYYY.so #02 pc 00005aba YYYY.so #03 pc 0000312a YYYY.so #04 pc 0000f1f4 /system/lib/libdvm.so
pid: 1917, tid: 1960 >>> XXXX <<<
signal 11 (SIGSEGV), fault addr 450774f0
r0 ffffffa5 r1 ffec01a4 r2 450774f0 r3 45235310
r4 fffffb00 r5 ff000000 r6 ff000000 r7 000001df
r8 00ff00ff r9 4767fca4 10 4767fcc0 fp 00000780
ip 000000ff sp 4767fac0 lr 80d1c041 pc 80d1c176 cpsr a0000030
#00 pc 0001c176 YYYY.so #01 pc 0003b026 YYYY.so #02 pc 00005aba YYYY.so #03 pc 0000312a YYYY.so #04 pc 0000f1f4 /system/lib/libdvm.so
위에서 PC 값에 적힌, 주소를 Library와 함께 넣어주면 된다.
arm-eabi-addr2line.exe -f -e YYYY.so 0001c176
출력>
[Symbol Name]
??:0
arm-eabi-addr2line.exe -f -e YYYY.so 0003b026
출력>
[Symbol Name]
??:0
주) arm-eabi-addr2line.exe는 NDK의 build\prebuilt\windows\arm-eabi-4.4.0\bin\에 존재한다.
피드 구독하기:
글 (Atom)