ADB_Over_network을 reboot시 초기화 하지 않는 방법
전체적인 System Properties와 preference와의 일관성 유지 및 사용자와의 상호작용 그리고 초기화 매커니즘은 아래의 그림과 같다.
□ setprop persist.adb.tcp.port 5555
- 위 명령을 adb를 이용해서 치면, 재부팅 시에도 port가 5555로 설정 되어 짐.
- 플랫폼을 수정할 필요 없는 가장 간단한 방법
- adbd 자체에서, 이 기능을 지원함.
- 원상태 복구를 위해서는, setprop을 다시 직접 쳐야한다는 단점, 발생 왜냐하면, Adb deamon은 persist option에는 반응하지 않음.
□ adbd을 수정
□ Settings App과 System Server 수정
Settings App: 사용자와의 상호작용을 담당. 설정값에 대한 입력 과 출력
System Server: System Properties로부터 값을 읽어와서 System Preference값을 그에 맞추어 변경함. 즉, 서로다른 두 레벨간의 일관성을 유지시켜 줌.
추가로, ContentObserver를 등록 시켜서, System Preference가 변경되어 지면, 그것을 System Properties에 적용 시킴.
framework/base -> service/SystemServer.java
//해당 코드는 Content가 변경 되어지면, 호출 되어 짐. (e.g: 사용자가 설정을 변경 했을 때)
91 private class AdbPortObserver extends ContentObserver {
92 public AdbPortObserver() {
93 super(null);
94 }
95 @Override
96 public void onChange(boolean selfChange) {
97 int adbPort = Settings.Secure.getInt(mContentResolver,
98 Settings.Secure.ADB_PORT, 0);
99 // setting this will control whether ADB runs on TCP/IP or USB
100 SystemProperties.set("service.adb.tcp.port", Integer.toString(adbPort));
// 결국, 위 코드가 Setting.Secure(java)의 내용을 SystemProperties (native) 영역으로 // 전송하는 역할을 함.
101 Log.e("SystemServer:jaynux","adbPort: "+ adbPort);
102 }
103 }
System property를 Setting 하는 방법은 3가지가 있습니다.
1. Native
int
property_get(
const
char
*key,
char
*value,
const
char
*default_value);
int
property_set(
const
char
*key,
const
char
*value);
2. Java
String SystemProperties.get(String key);
SystemProperties.set(String key,String value);
3. adb 명령
adb shell
root# setprop key value
root# getprop key
'Computer Science > Android Platform' 카테고리의 다른 글
Google IO 2016: Android Battery and Memory Optimizations (0) | 2016.06.06 |
---|---|
Battery Current 정보를 알아내는 위치 (PMIC 이용), 추가 GPU (0) | 2015.04.29 |
Android Platform 에서 Logcat 사용법 (0) | 2014.04.16 |
monkeyrunner의 분석 (0) | 2013.05.24 |
monkeyrunner: visual image comparison (0) | 2013.05.07 |