EXODUS_Q™
14.04.19
조회 수 4354
추천 수 2
댓글 3
"노숙자 Hax빙글"님께서 아주 예전에 맛클에 올리셨던 원조격 게시글입니다.
늦게마나 Hax빙글님께 감사하다는 말씀을 드립니다.^^

제가 작업해보면서 좀 더 구체적이고 보충 설명이 필요하다고 판단했던 부분만 추가로 설명해드리겠습니다.
(baksmali와 smali가 가능한 분들에게 해당되는 내용입니다.)

위의 게시글 내용대로
SecSettings.apk/smali/com/android/settings폴더를 열어보면 수많은 smali파일들이 있습니다.
그중에서 DisplaySettings.smali(디스플레이 셋팅)와 LockScreenSettings.smali(잠금화면 셋팅)가 아마도 가장 실용적이고 많이들 필요로하는 smali인것 같습니다.


》각각의 smali를 notepad++로 엽니다.

》"찾기"창에 remove를 입력하고 검색하면 여러개의 관련 구문이 나옵니다.

》활성화 시킬수 있는 구문들은 주로 아래와 같은 구조로 돼있습니다.
(참고:갤럭시S2_DisasterV4_SecSettings.apk/smali/com/android/settings/DisplaySettings.smali)

 .line 334
    invoke-virtual {p0}, Lcom/android/settings/DisplaySettings;->getPreferenceScreen()Landroid/preference/PreferenceScreen;

    move-result-object v12

    const-string v13, "led_indicator_settings"

    invoke-virtual {p0, v13}, Lcom/android/settings/DisplaySettings;->findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;

    move-result-object v13

    invoke-virtual {v12, v13}, Landroid/preference/PreferenceScreen;->removePreference(Landroid/preference/Preference;)Z

 .line 340
    invoke-virtual {p0}, Lcom/android/settings/DisplaySettings;->getPreferenceScreen()Landroid/preference/PreferenceScreen;

    move-result-object v12

    const-string v13, "contextualpage_settings"

    invoke-virtual {p0, v13}, Lcom/android/settings/DisplaySettings;->findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;

    move-result-object v13

    invoke-virtual {v12, v13}, Landroid/preference/PreferenceScreen;->removePreference(Landroid/preference/Preference;)Z

 .line 364
    invoke-virtual {p0}, Lcom/android/settings/DisplaySettings;->getPreferenceScreen()Landroid/preference/PreferenceScreen;

    move-result-object v12

    iget-object v13, p0, Lcom/android/settings/DisplaySettings;->mAccelerometer:Landroid/preference/CheckBoxPreference;

    invoke-virtual {v12, v13}, Landroid/preference/PreferenceScreen;->removePreference(Landroid/preference/Preference;)Z

 .line 512
    :cond_9
    invoke-virtual {p0}, Lcom/android/settings/DisplaySettings;->getPreferenceScreen()Landroid/preference/PreferenceScreen;

    move-result-object v12

    iget-object v13, p0, Lcom/android/settings/DisplaySettings;->mQuickLaunchPreference:Landroid/preference/ListPreference;

    invoke-virtual {v12, v13}, Landroid/preference/PreferenceScreen;->removePreference(Landroid/preference/Preference;)Z


위 예시를 보면 아시겠지만, 
활성화를 묶어둔 설정들은 저런식의 구조로 마지막 라인에 removePreference 가 포함돼 있습니다.

저런식의 구조로 된 항목들을 다 찾아서 라인(.line)밑의 모든 구문들을 삭제하면 환경설정창에 숨겨졌던 항목들이 되살아 납니다.(왜 그렇게 숨겨뒀는지..?..)

그리고,CheckBoxPreference;라는 구문이 있는게 있고 없는게 있습니다.
그것은 우리가 환경설정창에서 많이 보는 설정창 해당 항목의 활성화 여부를 묻는 그 체크박스가 있는 항목입니다. 

체크박스(CheckBoxPreference;) 구문이 없는 경우는, 
맨위의 "led_indicator_settings(LED상태표시등)"처럼 체크박스는 없지만 해당 항목을 클릭하면 추가로 여러 항목의 활성화를 체크할수있는 설정창이 열리는 경우입니다.

어쨌든, 저런 식으로  removePreference구문이 포함된 라인의 구문들을 모두 삭제하면 되는데 주의해야 할 점이 있습니다.

[주의]
각각의 구문마다 맨 첫라인에 .line 512 이렇게 해당 항목의 라인을 구분하는 구문은 삭제하지말고 남겨둬야 합니다.
그리고, 그 밑에 :cond_9 라는(비슷한) 구문이 있는게 있고 없는게 있는데 만약 있다면 그것도 삭제하면 안됩니다.
삭제한후에는 구문 사이의 빈칸이 추가로 생기는데 그 빈칸도 위아래 구문들과 같이 다시 맞춰줘야 합니다.

그리고, 무엇보다 중요한것은,
removePreference구문이 있다고해서 마구잡이로 삭제하지 마시고 
천천히 각 항목별 내용이 뭔지를 잘 살펴보시고 나에게 꼭 필요한 항목만 정확히 확인한후에 삭제하시길 추천드립니다.

특히,
PenSettingsMenu.smali 라는게 있는데 그안의 특정구문(?)을 잘못 삭제하게 되면,
나중에 컴파일하여 폰에 적용했다가 S펜 사용중에 갑자기 터치위즈홈이 ALL-STOP되는 경우가 있습니다.
강제리부팅을 하지않고서는 터치가 전혀 안먹히는 아주 황당한 경우가 발생하니 엥간하면 그쪽 smali는 건드리지 마세요.

EXODUS_Q™ 님의 SIGNATURE

profile
Just Do It.
댓글 3
댓글 쓰기 권한이 없습니다.
정렬 목록 검색 쓰기
등록된 글이 없습니다.
1 - 2