Translate

2015년 6월 5일 금요일

[Android][Settings] 설정에서 홈버튼의 비활성화 이슈




최근 이슈가 된 문제중에 어떠한 액션을 하게되면 "설정=>접근성"에서 하단 소프트키 버튼을 비활성화 시켜버리는 이슈가 있었다.



증상

설정 => 접근성 진입 시 아래와 같이 보여지는 문제가 있었다.

 




원인

해당 Andorid 디바이스의 Accessibility Activity 에서의 로직에서 해당 버튼을 비활성화 시켜버렸다.

만일 해당 SoftKey를 활성화 시키려면 아래와 같이 로직을 분석하여 비활성화 되지 않는 조건으로 만들어야 한다.





분석


1. 해당 Accessibility Activity를 알아보기 위해 apk를 가져온다.



Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\1004lucifer>cd Downloads

C:\Users\1004lucifer\Downloads>cd LG

C:\Users\1004lucifer\Downloads\LG>
C:\Users\1004lucifer\Downloads\LG>adb shell
shell@g2:/ $

shell@g2:/ $ pm list packages -f | grep sett
pm list packages -f | grep sett
package:/system/priv-app/LGSettings.apk=com.android.settings
package:/system/priv-app/LGSettingsProvider.apk=com.android.providers.settings
package:/system/priv-app/LGSettingsAccessibility.apk=com.android.settingsaccessibility
package:/system/app/LGLockScreenSettings.apk=com.lge.lockscreensettings
package:/system/app/LGEasySettings.apk=com.lge.settings.easy
package:/system/priv-app/LGRoamingSettingsKr.apk=com.lge.roamingsettings
shell@g2:/ $

shell@g2:/ $ exit
exit

C:\Users\1004lucifer\Downloads\LG>adb pull /system/priv-app/LGSettingsAccessibility.apk
3529 KB/s (4351877 bytes in 1.204s)

C:\Users\1004lucifer\Downloads\LG>





2. 가져온 apk를 Decompile 하여 Source를 추출한다.

- Decompile 하는 방법은 인터넷 찾아보면 쉽게 방법을 알아낼 수 있다.




3. Log와 Source를 확인하여 Activity를 찾아 분석한다.

내가 테스트한 LG단말에서는 SettingsAccessibilityActivity.java 가 해당 Activity 였다.


  public void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    Intent localIntent1 = new Intent("com.lge.appbox.commonservice.update");
    localIntent1.putExtra("packagename", getPackageName());
    localIntent1.putExtra("type", "update");
    startService(localIntent1);
    ActionBar localActionBar = getActionBar();
    localActionBar.setDisplayOptions(15);
    Intent localIntent2 = getIntent();
    if (localIntent2 == null)
    {
      this.mFragmentInActivityStatus = 1;
      return;
    }
    Bundle localBundle = localIntent2.getExtras();
    if (localBundle != null)
    {
      String str = localBundle.getString("where_are_you_from");
      if ((str != null) && ("from_startup_wizard".equals(str)))
      {
        this.mFragmentInActivityStatus = 2;
        addFragment();
        localActionBar.setHomeButtonEnabled(false);
        localActionBar.setDisplayHomeAsUpEnabled(false);
        return;
      }
      this.mFragmentInActivityStatus = 1;
      return;
    }
    this.mFragmentInActivityStatus = 0;
    addFragment();
  }





PS.
주의사항
1. 단말기 제조사에 따라 apk나 수행하는 Activity Class 이름이 다를 수 있다.
2. 같은 Android version 이라도 Build version 이 다르면 Source가 다를 수 있다.



댓글 없음 :

댓글 쓰기