안드로이드 기기 정보 확인하기

안드로이드 기기 정보는 디버깅을 위해서 꼭 필요한 정보이다. 그래서 기기 정보를 확인하는 방법을 살펴보자. 안드로이드 기기 정보를 확인하는 방법으로 Adb 툴을 사용할 수 있고, 리플렉션을 이용해서 코드로 정보를 확인할 수 있다.  코드에서 안드로이드 기기의 정보를 얻기 위해서 android.os.Build 클래스에서 제공하는 각종 static 변수의 값을 사용한다. 하지만 이 클래스가 제공하는 정보는 제한적이어서 더 많은 정보가 필요할 수 있다. 이런 경우, android.os.SystemProperties 클래스를 사용해서 더 많은 기기의 정보를 확인할 수 있다. 그리고 이 클래스를 사용하기 위해서는 시스템 앱으로 개발되지 않는 이상 기기의 정보를 확인할 수 없게 되어 있다. 그래서, 안드로이드가 제공하는 기기의 정보를 앱 레벨에서 확인하는 방법에 대해서 살펴보자.

1. Adb를 사용하는 방법

1.1 Adb를 사용해서 기기 설정 파일 가져오기..

mcsong@mcsong-ubuntu:~$ adb -d pull /system/build.prop
45 KB/s (3212 bytes in 0.069s)

1.2 기기 설정 파일 정보..

# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=JDQ39
ro.build.display.id=JDQ39
ro.build.version.incremental=573038
ro.build.version.sdk=17
ro.build.version.codename=REL
ro.build.version.release=4.2.2
ro.build.date=Fri Feb  8 22:38:31 UTC 2013
ro.build.date.utc=1360363111
ro.build.type=user
ro.build.user=android-build
ro.build.host=wpef10.hot.corp.google.com
ro.build.tags=release-keys
ro.product.model=Galaxy Nexus
ro.product.brand=google
ro.product.name=mysid
ro.product.device=toro
ro.product.board=tuna
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu.abi2=armeabi
ro.product.manufacturer=samsung
ro.product.locale.language=en
ro.product.locale.region=US
ro.wifi.channels=
ro.board.platform=omap4
# ro.build.product is obsolete; use ro.product.device
ro.build.product=toro
# Do not try to parse ro.build.description or .fingerprint
ro.build.description=mysid-user 4.2.2 JDQ39 573038 release-keys
ro.build.fingerprint=google/mysid/toro:4.2.2/JDQ39/573038:user/release-keys
ro.build.characteristics=nosdcard
# end build properties
#
# system.prop for toro
#

rild.libpath=/vendor/lib/libsec-ril_lte.so
rild.libargs=-d /dev/ttys0
telephony.lteOnCdmaDevice=1

# Ril sends only one RIL_UNSOL_CALL_RING, so set call_ring.multiple to false
ro.telephony.call_ring.multiple=0

# Turn on IMS by default
persist.radio.imsregrequired=1
persist.radio.imsallowmtsms=1

# Default ecclist
ro.ril.ecclist=112,911,#911,*911

#
# ADDITIONAL_BUILD_PROPERTIES
#
ro.com.google.clientidbase=android-verizon
ro.com.google.locationfeatures=1
ro.url.legal=http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html
ro.url.legal.android_privacy=http://www.google.com/intl/%s/mobile/android/basic/privacy.html
ro.setupwizard.mode=OPTIONAL
ro.cdma.home.operator.numeric=310004
ro.cdma.home.operator.alpha=Verizon
ro.cdma.homesystem=64,65,76,77,78,79,80,81,82,83
ro.cdma.data_retry_config=default_randomization=2000,0,0,120000,180000,540000,960000
ro.gsm.data_retry_config=max_retries=infinite,default_randomization=2000,0,0,80000,125000,485000,905000
ro.gsm.2nd_data_retry_config=max_retries=infinite,default_randomization=2000,0,0,80000,125000,485000,905000
ro.config.vc_call_vol_steps=7
ro.cdma.otaspnumschema=SELC,1,80,99
wifi.interface=wlan0
media.aac_51_output_enabled=true
ro.opengles.version=131072
ro.sf.lcd_density=320
ro.hwui.disable_scissor_opt=true
# 디바이스 별 힙 정보
dalvik.vm.heapstartsize=8m
dalvik.vm.heapgrowthlimit=96m
dalvik.vm.heapsize=256m
dalvik.vm.heaptargetutilization=0.75
dalvik.vm.heapminfree=512k
dalvik.vm.heapmaxfree=8m
ro.config.ringtone=Themos.ogg
ro.config.notification_sound=Proxima.ogg
ro.config.alarm_alert=Cesium.ogg
ro.com.android.dateformat=MM-dd-yyyy
ro.com.android.dataroaming=false
ro.carrier=unknown
ro.com.android.wifi-watchlist=GoogleGuest
ro.error.receiver.system.apps=com.google.android.feedback
ro.setupwizard.enterprise_mode=1
keyguard.no_require_sim=true
drm.service.enabled=true
ro.facelock.black_timeout=1250
ro.facelock.det_timeout=1500
ro.facelock.rec_timeout=2500
ro.facelock.lively_timeout=2500
ro.facelock.est_max_time=800
ro.facelock.use_intro_anim=true
camera.flash_off=0
dalvik.vm.dexopt-flags=m=y
net.bt.name=Android
dalvik.vm.stack-trace-file=/data/anr/traces.txt

2. 리플렉션을 사용하는 방법

2.1 리플렉션을 사용하는 코드..

public static String get(String key) {
	try {
		Class clazz = Class.forName("android.os.SystemProperties");
		if(clazz == null)
			return "";
		
		Method method = clazz.getDeclaredMethod("get", String.class);
		if(method == null)
			return "";
		
		return (String) method.invoke(null, key);
	} catch (Exception e) {
		ZLog.e("WHOOPS", "Exception during reflection: " + e.getMessage());
	}
	
	return "";
}

2.2 위 코드의 결과

ZLog.e(TAG, "HeapStartFree --> " + SystemProperties.get("dalvik.vm.heapstartsize"));
ZLog.e(TAG, "HeapMaxFree --> " + SystemProperties.get("dalvik.vm.heapmaxfree"));
HeapStartFree --> 8m
HeapMaxFree --> 8m

이 코드로 간단하게 로그를 확인하면, 위에서 확인한 설정파일인 build.prop의 안드로이드 기기 정보를 확인할 수 있다. 변경도 가능하겠지만, 시스템 정보라서 권한 문제가 발생할 수 있다. 만약 앱이 시스템 권한을 가진다면 이런 리플렉션을 사용하지 않아도 바로 사용할 수 있겠다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.