ADB(Android Debug Bridge) 명령어 정리 Android

ADB (Android Debug Bridge)



ADB의 구성

client : development machine에서 동작. shell에서 client를 invocation해서 command 실행 가능. ADT, DDMS도 client

server : development machine의 background process이며, client와 daemon 사이에서의 communication을 관리

daemon : 각각의 device에서 동작하는 background process

client를 시작하면, ADB server가 실행중인지 확인해서 실행중이지 않으면 server를 시작시킨다. server가 시작되면 TCP의 5037 port로 binding해서 adb client로부터의 command를 받아들이는데, 모든 client는 server와 communication 하기 위해 5037 port를 사용.

실행파일 : ${android_sdk_path}/tools/adb



Command 입력 형식

adb [-d | -e | -s <serialNumber>] <command>

adb devices : adb server와 연결된 device를 보여준다.
형식 : [serialNumber] [state]

serialNumber = type-consolePort (ex : emulator-5554)
state = offline (device가 adb와 아직 연결되지 않았거나 응답이 없는 상태)
            device (adb server와 연결된 상태)

-s option : 여러개의 device가 연결되어 있는 상태에서 특정 device에 command를 입력하고 싶을 때 사용
형식
adb -s <serialNumber> <command>

ex : adb -s emulator-5554 install sample.apk



Port forwarding

device의 port를 forwarding 하고 싶을 때 사용하는 명령

ex : port 6100에서 7100으로 forwarding 하고 싶은 경우
adb forward tcp:6100 tcp:7100



Copying files

pull
device에서 file을 copy해 올 때 사용 (recursively)
adb pull <remote> <local>

push
pull과 반대로 file을 device에 복사해 넣고 싶을 때 사용 (recursively)
adb push <local> <remote>

ex : adb push foo.txt /sdcard/foo.txt) (/sdcard/foo.txt 에서 /sdcard는 device에 존재하는 path



Listing of adb Commands

Options

-d
연결된 USB device에만 direct로 command 전송
USB device가 하나 이상이면 error return

-e
실행중인 device에만 command 전송
하나 이상의 device가 실행중이면 error return

-s <serialNumber>
특정 device에만 command 전송 (serialNumber 형식은 위 내용 참조)


General

devices
연결된 모든 device list 출력

help
제공되는 adb command list 출력

version
adb version 출력


Debug

logcat [<option>] [<filter-specs>]
log data 출력

bugreport
bugreport를 위한 dumpsys(system data dump), dumpstate(state dump), logcat data 출력

jdwp
특정 device의 JDWP process들의 list(pid) 출력


Data

install <path-to-apk>
application 설치

pull <remote> <local>
push <local> <remote>
위 내용 참조


Ports and Networking

forward <local> <remote>
특정 local port를 remote port로 fowarding
Scheme
tcp:<portnum>
local:<UNIX domain socket name>
dev:<character device name>
jdwp:<pid>

ppp <tty> [parm]...
USB로 PPP 실행
<tty> : PPP stream을 위한 tty
[parm] : PPP option


Scripting

get-serialno
adb의 serial number 출력

get-state
adb의 state 출력 (device / offline)

wait-for-device
device가 online일 때 까지 command 실행 정지

ex : adb wait-for-device shell getprop (state가 device가 되면 shell getprop command 실행

Note : 완전히 boot 된 이후에 사용 가능한 install 등의 command를 함께 사용할 경우 wait-for-device는 device state만 확인하므로 fully boot 되지 않았을 경우 error 발생 가능


Server

start-server
adb server가 실행중인지 확인해서 running 상태가 아니면 실행

kill-server
adb server process를 종료


Shell

shell
target device 안에서 remote shell을 시작

shell [<shellCommand>]
target device 안에서 shell command를 실행하고 remote shell을 빠져나간다



Shell Command 실행

ADB는 ash shell을 제공하는데, ash shell의 실행 바이너리는 device 내부의 /system/bin 경로에 존재

adb [-d | -e | -s <serialNumber>] shell로 remote shell을 실행한 후에 shell을 종료하고 싶으면 Ctrl + D or exit 입력



UI/Application Exerciser Monkey

User event의 random stream을 생성해 device에서 실행시키는 tool (stress test 용도)

ex : adb shell monkey -v -p packageName 500 (500가지의 random stream)



Other Shell Commands

device의 /system/bin 경로의 file들을 살펴보거나, adb -help로 확인

dumpsys
system data의 dump를 표시

dumpstate
state의 dump를 file로 저장

logcat [<option>]...[<filter-spec>]
logging을 가능하게 하거나 화면에 표시

dmesg
kernel debugging message를 화면에 출력

start
device를 시작(재시작)

stop
device 종료



Using logcat Commands

adb logcat
단순히 전체 log를 보고싶은 경우 사용 또는 remote shell에서 logcat 실행

Android에서 모든 log message는 tag와 priority를 가지고 있음
tag : system component를 짧은 문자열로 표현 (ex : view system의 경우 "View")
priority (ordered from lowest to highest)
V (Verbose)
D (Debug)
I (Info)
W (Warning)
E (Error)
F (Fatal)
S (Silent)

logcat 실행 후에 나타나는 log message에서 tag와 priority가 첫 column에 priority/tag 형태로 표시

ex : I/ActivityManager( 585) : Starting activity : Intent { action = android.intent.action... }

logcat의 filter는 tag:priority 형태로 표현하는데 tag는 표시하려는 tag의 이름을 입력하면 되고 입력한 priority와 상위 priority의 log들을 표시

ex : adb logcat ActivityManager:I MyApp:D *:S
ActivityManager의 I(Info) level 이상, MyApp의 D(Debug) level 이상의 log들만 표시


default filter expression

환경변수 ANDROID_LOG_TAGS에 default로 사용할 filter expression을 setting 후에 export 해서 사용

ex : export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"

Note : remote shell을 사용해서 logcat을 실행하고 있을 경우 export 되지 않음 (?)


Controlling Log Output Format

-v option을 사용해서 출력되는 log의 format 변경 가능

output format
brief : priority/tag, PID 표시 (default)
process : PID only
tag : priority/tag only
thread : process:thread, priority/tag only
raw : 다른 metadata field 없이 raw log message 표시
time : date, invocation time, priority/tag, PID
long : 모든 metadata filed와 message 표시

ex : adb logcat -v thread


Viewing Alternative Log Buffers

Android logging system은 log message들을 위해 여러 개의 circular buffer를 가지고 있고 default circular buffer가 모든 log를 보관하지 않기 때문에 다른 circular log buffer의 내용을 보고 싶을 때에는 -b option을 사용해서 circular buffer를 변경해주어야 한다.

Buffers
radio : radio/telephony 관련된 log message를 보관하는 buffer
events : related-events
main : main log buffer (default)

ex : adb logcat -b radio



Viewing stdout and stderr
Android에서는 default로 stdout과 stderr ouput을 /dev/null로 내보내는데, file에 쓰도록 변경 가능하고 이 경우 변경 전에 device를 stop 후 setprop shell command를 실행해서 redirection 설정해야 한다. device start 이후에는 stop 전까지 설정이 유지된다. default로 설정을 유지하고 싶다면, /data/local.prop에 기록

ex :
adb shell stop
adb shell setprop log.redirect-stdio true
adb shell start



Listing of logcat Command Options

-b <buffer>
load log buffer

-c
모든 log를 clear하고 빠져나간다

-d
log를 화면에 dump하고 종료

-f <filename>
log를 <filename>에 기록. default는 stdout

-g
특정 log buffer의 size를 출력하고 종료

-n <count>
rotated log의 최대값을 <count>로 설정. default는 4, -r option이 필요

-r <kbytes>
log file을 <kbytes>씩 rotate. default는 16, -f option 필요

-s
default filter를 silent로 설정

-v <format>
log format을 <format>으로 설정. default는 brief format.



[출처] : https://docs.google.com/View?id=dhj7zms7_0cfm752gq

[이글루스] 방명록(Guest Book) 만들기 (메뉴릿) Egloos

이글루스로 이사오면서 부터 메뉴릿에 방명록이 있었기 때문에 방명록을 어떻게 만드는지에 대해서 그다지 고민하지는 않았고,
다만, 누군가들처럼 카테고리 하나를 방명록으로 사용하는 정도를 생각해 보았었는데,
오늘 이것저것 만져보다보니 이글루스에서 제공하는 기능을 그대로 이용하여 방명록을 만들 수 있는 방법이 있어 소개한다.
(물론, 이미 알고 있는 분들도 있겠지만, 모르는 분들을 위해)

어찌보면 참 간편한 방식이다.
별도의 방명록 생성 페이지가 있다기 보다는, 기존에 새글쓰기 방식을 그대로 차용하여,
하나의 게시물을 방명록처럼 만들도록 한 방법.
별도의 복잡한 인터페이스와 복잡한 로직을 세울 필요없이, 기존의 코드에 약간의 수정을 가미하여 만들어낸 효율적인 방식이긴 하지만,
이용자들에게 '방명록' 을 만드려면 어떻게 하라고 알려주지 않기 때문에, 대부분의 블로거들이 방명록 없이 지내거나,
아니면 처음 내가 그랬던것처럼, 게시물 하나를 방명록처럼 만들어서 사용하는 수고로움과 불소통이 생긴것 같다.

아무튼, 생각보다는 쉽게 방명록을 만들어낼 수 있고, 방명록뿐만 아니라, 이용자의 취향에 따라 다른 특성의 메뉴들도 만들어 낼 수 있게 되었다.

단, 기존의 방문자들이 카테고리쪽을 보는데에 익숙해서, 메뉴릿쪽을 잘 보지않기 때문에,
홍보가 제대로 되지 않으면, 클릭조차 제대로 되지 않아 접근성이 매우 떨어질 가능성은 있다.



네트워크 드라이브 자동연결 배치스크립트 Windows



네트워크 드라이브 연결 설정후에 '자동로그인'을 선택했음에도 불구하고 자동로그인이 되지 않는 분은 아래의 배치파일을 '시작 프로그램'에 배치하시면 유용하게 사용할 수 있습니다. 필자가 사용중인 배치파일의 내용은 아래와 같으며 사용자님의 환경에 맞게 수정하여 사용하시면 됩니다.
 배치파일을 만드는 방법은 이미 여러차례 언급하였기 때문에 이 포스트에서는 설명하지 않으며, 앞에 작성한 포스트를 보지 않으신 분은
[이곳]을 클릭하여 배치파일을 만드는 방법을 참고하시기 바랍니다.

#0. 네트워크 드라이브를 만드는 방법
 네트워크 드라이브를 만드는 방법은 이미 앞에 포스트에서 작성하였기 때문에 이미 작성한 포스트로 링크를 해두었습니다.

 
네트워크 드라이브는 친구/회사/학교등에서 무리없이 사용이 가능하다는 장점이 있습니다. 필자는 다양한 용도로 활용하고 있지만, 필자의 개인서버인만큼 HTML 수정 및 저장공간용으로 사용합니다.

#1. 배치파일 내용
[code]
net use /delete * /y
@echo off
set USER=아이디
set PASSWD=비밀번호
net use Y: ₩₩123.456.789.0₩drive1 %PASSWD% /user:%USER% /persistent:yes
net use X: ₩₩123.456.789.0₩drive2 %PASSWD% /user:%USER% /persistent:yes
[/code] 위의 내용이 네트워크 드라이브 자동 연결 배치파일의 내용입니다.
set USER / set PASSWD / net use부분은 사용자님에게 맞도록 수정해주셔야 사용이 가능하며, 일일이 Y를 눌러주는 번거로움을 없애기 위하여 모든 질문에 Y로 답변하도록 설정하였습니다.

#2. USER ID 및 PASSWORD 수정
 공유폴더를 네트워크 드라이브로 사용하기 위해서는 원격지 컴퓨터에 접근이 가능한 아이디와 비밀번호를 입력해야합니다. 만약 최고관리자(administrator)로 접근하고 비밀번호가 admin123456이라면 아래와 같이 수정하여 주시면 됩니다.[code]
set USER=administrator
set PASSWD=admin123456
[/code] 위와 같이 하게 되면 최고관리자 권한으로 네트워크 드라이브를 이용하게되며, 연결시 자신의 하드디스크 처럼 파일 읽기/수정/삭제도 가능합니다.

#3. net use(연결 드라이브) 부분 수정
 네트워크 드라이브를 이용하기 위해서는 net use부분을 네트워크 드라이브를 이용하기 위한 부분으로 수정해주어야 합니다. 필자의 예는 위와 같으며 사용자님이 필요하신데로 수정하셔서 사용하시면 됩니다.[code]
net use Y: ₩₩123.456.789.0₩drive1 %PASSWD% /user:%USER% /persistent:yes
연결 Y드라이브: ₩₩아이피₩공유폴더이름
net use X: ₩₩123.456.789.0₩drive2 %PASSWD% /user:%USER% /persistent:yes
연결 X드라이브: ₩₩아이피₩공유폴더이름
[/code] 필자는 네트워크 드라이브를 2개 연결한다는 가정하에 작성한 것이고, 만약 1개의 드라이브만 연결할 것이라면 net use를 한개만 배치하고 더 늘이실 것이라면 net use부분을 복사하여 붙여넣기 하는 방법으로 계속 늘려나가시면 됩니다.

 위의 배치파일을 작성한 후 시작 프로그램에 넣어주어야하며, 변경사항이 있는 경우에는 수정해주어야 합니다. 만약 Guest기능을 활성화한 상태로 공유폴더를 만들었다면 별도로 USER ID와 PASSWD란을 입력하지 않아도 됩니다. (해당 코드 부분을 삭제하시고 사용하시면 됩니다.)
 그렇지만 가급적 관리자 아이디로만 공유폴더에 접근이 가능하도록 설정하시는 것이 보안성면에서 좋다는 점을 잊어서는 안됩니다.


[출처] 네트워크 드라이브 자동연결 배치스크립트

네트워크 드라이브 자동 로그인하기 Windows

네트워크 드라이브 자동 로그인하기



Windows 2000 이하 버전은 재부팅하면 네트워크 드라이브에 연결이 끊어져 다시 비번을 입력하고 로그인을 해야하는 번거로운 과정을 거친다. 그럴때 Batch file이나 VBScript를 만들어 부팅시 시작프로그램이나 컴퓨터정책으로 넣어두면 자동으로 연결이 된다.



1. Batch 파일 이용하기

메모장을 열고 아래와 같이 입력한다.

========================================================================

net use E: \\서버\디렉토리 ******** /user:도메인\사용자 /persistent:no
ex) net use z: \\192.168.0.114\d$ 1234 /user:administrator /persistent:no

========================================================================



※ 설명



E: 내컴퓨터에 나타나는 연결하고자 하는 드라이브 명(A~Z 까지 가능)



\\서버\디렉토리 원하는 디렉토리(디렉토리명에 공백이 있으면 큰 따옴표로 묶음)



******** 비밀번호



/user:도메인\사용자 원하는 도메인에 속한 아이디 (같은 도메인인 경우 생략가능, 도메인 및

아이디에 공백이 있으면 큰 따옴표로 묶음)



/persistent 재부팅해도 유지할 것인가에 대한 옵션. NO를 해야 재부팅시 없어지므로

위의 스크립트가 먹힌다. YES를 하면 Y: 라는 이름의 네트워크 드라이브

가 있어 설정이 먹히질 않는다.



기존에 연결된 네트워크드라이브를 전부 연결끊기를 한다.

이제 Batch file을 실행시키면 네트워크 드라이브가 연결된다.



2. VBScript 이용하기

========================================================================

Dim Fso
Dim WshNetwork
Set Fso = CreateObject("Scripting.FileSystemObject")

If Not Fso.DriveExists ("V") Then

Set WshNetwork = WScript.CreateObject("WScript.Network")
' WshNetwork.RemoveNetworkDrive "V:"
WshNetwork.MapNetworkDrive "V:", "\\서버\공유명", "true", "administrator", "비밀번호
Set WshNetwork = nothing
End If

========================================================================


FSO 개체를 통해 드라이브의 존재유무를 확인한다.

이때 탐색기에서 네트워크 드라이브가 이미 매핑된것 것처럼 보여진다하더라도 로그인이 되지 않는다면 드라이브가 존재하지 않는 것으로 간주하여 FSO는 false를 리턴하게 된다.

Window Script Host 개체를 생성하여 네트워크 드라이브를 매핑하는데 Usage는 다음과 같다.



object.MapNetworkDrive(strLocalName, strRemoteName, [bUpdateProfile], [strUser], [strPassword])

strLocalName : 로컬 드라이브명

strRemoteName : 원격서버(공유)명

[bUpdateProfile] : true 이면 userprofile에 매핑정보를 저장한다. (디폴트는 false)

[strUser] : userName

[strPassword] : userPassword



필요에 따라 네트워크드라이브를 제거하고 싶을 경우는 RemoveNetworkDrive "드라이브명"을 사용한다.



========================================================================

* 시작프로그램으로 추가법 :

1) '시작-프로그램-시작프로그램'에 파일을 끌어다 놓는다.

* 컴퓨터정책으로 추가법 :

1) gpedit.msc 실행!
2) '컴퓨터구성-Windows설정-스크립트(시작/종료)-시스템 시작'을 더블클릭!
위의 파일을 추가해 주면 된다.


[출처]
네트워크 드라이브 자동연결 | 작성자 고스트

우분투 서버 윈도우 클라이언트 freenx 설치 방법 Linux

freenx
윈도우xp client -- 우분투server

http://www.nomachine.com/download.php
위의 사이트에서 NX Free Edition for Linux 선택
client node server 순서로 다운로드 설치
sudo dpkg -i nxclient_3.2.0-14_i386.deb
sudo dpkg -i nxnode_3.2.0-11_i386.deb
sudo dpkg -i nxserver_3.2.0-13_i386.deb

윈도우 클라이언트에는 NX Client for Windows를 설치

서버측 설정
1) ssh를 시작
sudo /etc/init.d/ssh start
2) sudo /usr/NX/scripts/setup/nxserver --install
3) 키 생성을 위해 다음을 실행
sudo /usr/NX/bin/nxserver --keygen
4) /usr/NX/share/keys/default.id_dsa.key의 키값을 복사한다
5) sudo gedit /usr/NX/etc/server.cfg 설정 파일을 수정한다

EnableAdministratorLogin = "1"(root계정으로 접속이 필요하면 변경)
EnableUserDB = "1"

EnablePasswordDB = "1"
EnableClipboard = "both"
0을 1로 변경 #마크 제거한다
6) sudo /usr/NX/bin/nxserver --useradd testman(현재 시스템에 존재하는 사용자 이름 사용할 것)
패스워드 설정

*sudo /usr/NX/bin/nxserver --useradd testman --administrator(root권한 유저 생성방법)

7) sudo /usr/NX/bin/nxserver --userenable testman(현재 시스템에 존재하는 사용자 이름 사용할 것)
8) sudo /usr/NX/bin/nxserver --restart

윈도우 xp에서 아이콘을 클릭하면 NX Connection Wizard가 실행된다
session이름 아무거나 적어주고 host에 접속할 컴퓨터의 ip주소 적어준다








우분투 NX서버의 그래픽 환경이 GNOME이므로 GNOME선택했다







configure버튼 클릭하면 다음의 대화상자가 뜬다

key 버튼 클릭하고 4)에서 복사한 키를 붙여넣기하고 save한다






















자 이제 6)에서 설정한 비밀번호로 로그인해보자

 
















[출처] 우분투 서버 윈도우 클라이언트 freenx 설치 방법

1 2 3