안녕하세요 간만에 글을 올리게 되었네요.


AOSP Build 관련하여, OS X에서도 빌드가 가능한데요.


이번에 Mac OS X를 업그레이드 하면서, 다시 빌드가 되지 않아 구글 신님을 이용하여, 방법을 찾아보았습니다.


외국어로는 잘 설명이 되어 있으나, 한글로는 설명이 되어 있지 않아, 제가 글로 간략하게 정리를 해보았습니다.


부족한 점이 있다면, 양해 부탁드리겠습니다.


1. development.apple.com 을 접속하여, XCode 5.1.1.dmg를 다운로드 합니다.

2. XCode 5.1.1.dmg를 다운로드 완료하였다면, Mount 한다.

3. Terminal을 실행하여 아래의 명령어 코드를 실행 한다.

  --> sudo xcode-select -s /Volumes/Xcode/Xcode.app/Contents/Developer

4. AOSP Code에서 source.android.com에서 지시 하는데로 빌드 하시면 됩니다.


제가 위의 방법으로 Mac OS X 10.12.1에서 해본결과 빌드가 되는 것을 확인하였습니다.


위의 글 참고하셔서 도움이 되시길 바라겠습니다.


감사합니다.


[Map] App에서 타 App Navigation 호출하는 방법


이것 저것 다시 공부를 하게 되면서, 혹시 잊어버릴까 싶어 정리해 놓은것입니다.


해당 기능은 개발 하고자 하는 App에서 목적지로 Navigation을 실행하고자 할 경우에 사용합니다.


필요 정보

1. 목적지의 위도 경도.

   - Text 하고자 할 경우, 구글 지도에서 목적지 검색 후, 주소창에서 위도 경도 값을 추출 하시면 됩니다.

   - 예를 들면, 야탑역을 가정했을 경우, https://www.google.co.kr/maps/place/

      %EC%95%BC%ED%83%91%EC%97%AD/@37.41132,127.128661,17z/

      data=!3m1!4b1!4m2!3m1!1s0x357ca874e197746f:0xa7d5e7f21062c490 에서 

      37.41132,127.128661가 위도 경도 입니다.

2. 목적지의 주소.

3. 목적지의 이름(만약 이름이 없을 경우, 구글 지도에서 POI가 표시되지 않습니다.).


위의 Data를 기준으로 URI를 생성하시면 됩니다.


geo:위도, 경도?q=주소(목적지 이름)


사용 방법은 다음과 같습니다.


Intent intent = new Intent();


intent.setAction(Intent.ACTION_VIEW);

intent.addCategory(Intent.CATEGORY_DEFAULT);

intent.setData(Uri.parse("geo:37.3848633,127.1233389?q=경기도 성남시 분당구 서현동 263(서현역)"));


startActivity(intent);

우선 해당 project를 빌드합니다.


https://code.google.com/p/android-unused-resources/ 에서 AndroidUnusedResources1.6.2.jar 파일을 다운로드 합니다.


윈도우에서 cmd 명령 또는 프로그램에 명렴 프롬프트를 실행합니다.


그리고 명령 프롬프트에서 Resource를 정리할 Project로 진입 후, 다음과 같이 명령어를 실행합니다.


java -jar AndroidUnusedResources1.6.2.jar



그러면 사용하지 않는 Resources의 목록들이 표기가 되며, 해당 Resources들을 삭제하시면 됩니다.


3. 외부 라이브러리 추가하기(jar 파일 추가하기)

이번에는 외부 라이브러리를 추가하는 방법에 대해서 알아보도록 하겠습니다.

저는 처음에는 jar파일을 app/libs폴더안에 복사만 하면 끝인 줄 알았습니다.

하지만 안되더군요.


그래서 확인한 결과 다음과 같이 라이브러리를 등록해야지만 가능한 것을 확인했습니다.


우선 원하시는 jar파일을 app/libs폴더안에 복사를 합니다. 그러면 Android-Studio에서는 자동으로 파일을 인식하여,

파일 트리에 방금 추가한 jar 파일이 추가되게 됩니다.


해당 파일이 추가되었음을 확인하셨다면, 해당 파일을 선택합니다.

그리고 마우스 오른쪽 클릭을 하여, 팝업 메뉴를 보면, [ Add As Library...] 목록을 확인할 수 있습니다.

[ Add As Library...] 를 선택 후, OK를 눌러주게 되면 자동으로 빌드가 됩니다.


빌드가 완료되었다면, app/libs폴더안의 추가한 jar파일에 삼각형이 생긴 것을 확인하 실 수 있습니다.


이렇게 해서 외부 라이브러리를 추가하는 것입니다.


역시 처음 다루는 툴이다보니, 적응하기가 어렵네요.

제가 외부 라이브러리를 추가해볼려고 1시간을 해매고 있었습니다. ㅠㅠ

여러분들 에게 도움이 되셨으면 하네요.


'안드로이드 > Android Studio' 카테고리의 다른 글

2. Android Studio Theme 변경하기.  (0) 2014.08.14
1. Android Studio 설치(Ubuntu 환경)  (0) 2014.08.14

2. Android Studio Theme 변경하는 방법을 알려드리겠습니다.


[Project가 존재하지 않을 경우]

Android Studio를 실행하면, 다음과 같은 화면이 나타날 것입니다.



위의 화면에서 [ Configure ] 를 선택합니다.


그리고 다음 목록에서 [ Setting ] 을 선택합니다.



[Project가 존재할 경우]

상단의 메뉴에서 [File] --> [Settings] 를 선택합니다.

또는 상단의 단축 메뉴 중, [Settings Icon]을 선택합니다.



[Settings Window를 화면에 뛰웠을 경우]

왼쪽 메뉴 중, [ Appearance ] 를 선택하고, 오른쪽의 [ UI Option ] 중, [Theme]를 선택하면, 원하는 theme를 변경할 수 있습니다.




여기까지가 테마를 변경하는 방법입니다.


모두들 힘내시고 수고하세요! ^^

서론

 - Android Studio를 접한지 하루가 지났습니다.
    Android Studio에 대해서 구글에서 검색해본 결과, 일부 사람들은 Eclipse보다는 좋은 툴이라고 말씀하시는 분들도 있지만, 일부는 툴의
    사용법이 너무 어렵다고 Eclipse를 사용하시는 분들도 있더군요.
    그런데 앞으로의 추세를 보았을 때, Android Studio를 개발자들이 많이 사용하게 되지 않을 까 싶습니다.

    그래서 저는 이 툴에 대해서 설치 및 사용을 해보고자 이글을 정리해서 올립니다.

    Android Studio에 대해서 잘 정리하신 분이 계셔서 해당글의 내용을 아래에 적어드립니다.
    여러분들도 도움이 되셨으면 하네요.

    [ http://blog.saltfactory.net/227 ]


Android Studio HomePage
 - Android Developer : http://developer.android.com/sdk/installing/studio.html

 - Android Studio : http://paolorotolo.github.io/android-studio/


설치 (Ubuntu 에서 shall 명령어를 통한 설치) : Android Studio 홈페이지 참고.

 - sudo apt-add-repository ppa:paolorotolo/android-studio 

    sudo apt-get update 

    sudo apt-get install android-studio
 - 위의 명령어 들을 이용하여, 설치가 완료가 된 후, App 목록에서 확인해보면, Android Studio가 설치되었음을 확인할 수 있다.
    (저같은 경우에는 설치가 끝났음에도 App 목록에 나타나지 않아서 재부팅을 해보니 설치가 됨을 확인할 수 있었다.)

 - 위와 같이 설치시, 다음과 같은 경로에 설치가 됨.
    경로) /usr/share/android-studio/data/


설치 (Android Developer에서 다운 받았을 경우.)

 - Android Developer에서 Android Studio 압축 파일을 다운받았다면, 원하는 위치에 압축을 풀어줍니다.
    --> 예) tar -xzvf android-studio-bundle-135.1245622-linux.tgz

 - 위 명령어를 통해서, 압축을 풀었다면, 압축을 풀은 경로에서 아래의 경로를 이동하여, studio.sh를 실행하면 됩니다.
    경로) .../android-studio/bin/studio.h


위와 같이 실행하기 전에 메모리를 조금 늘려주어야 한다. 그렇지 않으면, 로딩 및 빌드시 상당한 시간을 소요하게 된다.

/bin/studio.vmoptions 파일을 Open 하여 다음과 같이 수정하면됩니다.

-Xms512m

-Xmx768m

-XX:MaxPermSize=350m

-XX:ReservedCodeCacheSize=96m

...

-Dfile.encoding=UTF-8


마지막 부분은 파일을 열때, 한글이 깨지지 않도록 처리하는 부분입니다.


환경 변수에 설정하고 싶다면, 다음과 같이 설정해주면 됩니다.

sudo vi /etc/bash.bashrc 와 같이 해당 파일을 Open한 후, 마지막 부분에 다음과 같은 명령어들을 추가해주면 됩니다.

 - export PATH=$PATH:/usr/share/android-studio/data/bin


혹시 부족하거나 잘못된 내용이 있다면, 많은 지적 부탁드릴게요 ^^

오늘도 즐거운 하루 되셔요.


http://code-rilla.blogspot.kr/2010/04/android-ndk-lib.html

안드로이드 에서 NDK를 이용한 JNI Header파일을 생성하기 위해서는


다음과 같은 명령어를 작성하면 정상적으로 생성이 된다.


javah -classpath ./classes/ -jni com.ace.hellojni.NativeCall


이전에 인터엣에서 있는 방법으로 classpath가 없는 형식으로 하게 되면 Class 파일을 찾을수 없다는 에러가 발생하게 된다.

[Android] adb를 이용해 터치 이벤트 생성하기.

출처 : http://dry-kiss.blogspot.kr/2012/03/android-adb.html
0. 배경 지식
안드로이드의 사용자 이벤트 처리 과정은 크게, H/W(device) > Linux kernel > Android input system 정도의 3단계로 나눠 볼 수 있다.

터치스크린, 키보드, 센서 등의 입력 기기는 사용자의 실제 입력을 받게 되고, 이는 각 기기의 드라이버를 통해 Linux 커널에게 Linux 표준 방식으로 자신의 이벤트를 알리게 된다.
Linux 커널의 표준 방식이란, 널리 알려진 대로 기기 자신을 커널의 파일 시스템 상에 존재하는 하나의 파일로 추상화 시키고, 해당 기기를 사용하고자 하는 사용자는 해당 파일을 open 하고, read / write / ioctl 과 같은 표준 방식으로 조작하는 방식이다. 이때, 사용되는 각 이벤트의 데이터 형식은 Linux 표준을 따른다.

안드로이드 input system 은 EventHub 라는 모듈이 직접 각 입력 기기의 device file 에 접근, 이벤트를 읽어들이고, 이는 InputReader 라는 모듈에게 Linux kernel 표준 이벤트 형태로 전달된다.
이 이벤트는 InputReader 에서 Android 에서 사용하는 형식의 이벤트로 다듬어지고, Input dispatcher 라는 모듈에게 전달된다. Input dispatcher 는 현재 시스템에서 이벤트를 받아야 할 윈도우에게 Android 에서 사용하는 형식의 이벤트를 던져 준다.

안드로이드 기기는 자신의 파일시스템 상에 getevent, sendevent 라는 native 프로그램을 내장하고 있으며, adb shell 명령을 이용해 안드로이드 기기의 shell 에 접근 하면 두 프로그램을 실행 할 수 있다.

getevent 는 위에서 말한 input device file 들의 내용을 실시간으로 읽어서 표시해 주는 일을 하고, sendevent 는 사용자가 전달한 인자를 가지고 이벤트를 만들어 input device file 에 넣어준다. 즉, 사용자가 의도한 이벤트를 발생시킨다.
때문에, getevent 를 가지고 end-user 의 입력이 어떤 모습으로 커널에 전달되는지 확인 할 수 있고, 이를 분석함으로써 얻은 구조에 대한 이해를 가지고 sendevent 로 원하는 이벤트를 발생 시킬 수 있다.


1. 터치 이벤트 분석하기
# adb shell getevent
를 입력하면, 현재 adb 에 연결된 기기 또는 에뮬레이터의 입력 기기 목록과 해당 기기들의 device file 경로가 나오고, 이후 몇몇 기기의 이벤트가 계속해서 실시간으로 화면에 나타날 것이다.
다음은 Nexus One 을 연결하고 getevent 했을 때의 출력 내용이다.


$ adb shell getevent
add device 1: /dev/input/event6
  name:     "mahimahi-nav"
add device 2: /dev/input/event5
  name:     "mahimahi-keypad"
add device 3: /dev/input/event4
  name:     "proximity"
add device 4: /dev/input/event3
  name:     "synaptics-rmi-touchscreen"
add device 5: /dev/input/event2
  name:     "compass"
add device 6: /dev/input/event1
  name:     "h2w headset"
add device 7: /dev/input/event0
  name:     "lightsensor-level"
/dev/input/event2: 0003 0001 fffffd3e
/dev/input/event2: 0003 0002 00000008
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0003 0000 ffffffef
/dev/input/event2: 0003 0002 0000000b
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0003 0000 ffffffec
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0003 0000 ffffffe9
/dev/input/event2: 0003 0001 fffffd41
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0003 0001 fffffd3e
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0003 0002 00000008
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0003 0000 ffffffec
/dev/input/event2: 0003 0001 fffffd3b
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0003 0000 ffffffe9


아무짓도 하지 않고 있는데 계속 이벤트를 뿌려주는 입력 기기는 대부분 light sensor 등과 같은 센서들이다.
여기서 직접 화면에 손가락을 대서 터치 이벤트를 발생시키면, 그때만 이벤트를 뿌리는 device file 이 있을 것이다. 그게 터치스크린 device file 이다.
꼭 그러지 않더라도, 최초의 기기 목록의 이름을 가지고도 어느정도 짐작은 할 수 있다. 위의 출력 내용에서는 /dev/input/event3 가 터치스크린일 것임을 짐작 할 수 있다.

이벤트의 내용은 좌측부터 순서대로 device file path, type, code, value 이다.

위의 명령은 light sensor 등과 같은 필요치 않은 기기의 이벤트를 뿌려 정신을 산만하게 만드니까 grep 명령 등을 이용하면 좋다.

이제, getevent 를 통해 터치스크린의 이벤트에 집중하면서 짧게 화면을 터치해 보자.
다음과 같은 이벤트 내용을 얻을 수 있을 것이다.


$ adb shell getevent | grep event0
add device 7: /dev/input/event0
/dev/input/event0: 0003 0035 0000035d
/dev/input/event0: 0003 0036 000000e0
/dev/input/event0: 0003 003a 00000044
/dev/input/event0: 0003 0030 00000007
/dev/input/event0: 0003 0039 00000000
/dev/input/event0: 0000 0002 00000000
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0000 0002 00000000
/dev/input/event0: 0000 0000 00000000



이번엔 터치 위치를 좌우로 또는 아래로 약간 움직여 한번 더 터치해 보자.
여기선 x축 좌표는 거의 그대로 두고, 꽤 아래 쪽을 터치했다.

$ adb shell getevent | grep event0
add device 7: /dev/input/event0
/dev/input/event0: 0003 0035 0000035a
/dev/input/event0: 0003 0036 00000286
/dev/input/event0: 0003 003a 00000037
/dev/input/event0: 0003 0030 00000007
/dev/input/event0: 0003 0039 00000000
/dev/input/event0: 0000 0002 00000000
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0000 0002 00000000
/dev/input/event0: 0000 0000 00000000




참고로, getevent 가 표시해 주는 값들은 16진수다. 10진수로 바꿔주면 가지고 있는 기기의 해상도와 터치한 손가락의 위치를 바탕으로 보다 쉽게 어느 type / code 가 어느 값을 의미하는지 알 수 있다.
보면 중복되는 값들이 있고, x/y축의 이동을 생각해 보면, 최초 두개의 이벤트는 x/y 축을 의미하며, 세번째는 터치 압력을 의미한다. 나머지는 두 이벤트가 똑같다.

이제, 위와 같은 내용의 이벤트를 x / y 축의 값만 바꿔 입력하면, 원하는 위치에 터치 이벤트를 만들어 줄 수 있다.
setevent 는 10진수를 입력받으므로, 위의 값들은 10진수로 변환해야 한다.
파이썬을 사용한다면 다음과 같은 스크립트를 만들 수 있을 것이다.


os.system("adb shell sendevent /dev/input/event1 3 53 " + x_axis)
os.system("adb shell sendevent /dev/input/event1 3 54 " + y_axis)
os.system("adb shell sendevent /dev/input/event1 3 58 55")
os.system("adb shell sendevent /dev/input/event1 3 48 7")
os.system("adb shell sendevent /dev/input/event1 3 57 0")
os.system("adb shell sendevent /dev/input/event1 0 2 0")
os.system("adb shell sendevent /dev/input/event1 0 0 0")
os.system("adb shell sendevent /dev/input/event1 0 2 0")
os.system("adb shell sendevent /dev/input/event1 0 0 0")

추가 내용
http://source.android.com/tech/input/getevent.html

+ Recent posts