Android 루팅 여부 체크하기

 

안드로이드 개발을 하다가 루팅된 기기에서는 앱이 동작하지 않도록 해야하는 요구사항이 생겼다

 

1. Command를 실행할 수 있는 Runtime.getRuntime().exec( command ); 을 이용하여 루트권한이 있는지 체크한다

    private boolean isRooted() {

        boolean runtimeFlag = false;

        try{
            Runtime.getRuntime().exec("su");
            runtimeFlag = true;
        }catch(Exception e){
            runtimeFlag = false;
        }


        if(findBinary("su") || runtimeFlag){
            return true;
        }else{
            return false;
        }
        
    }

 - true : 루트권한이 있는 디바이스, false : 루트권한이 없는 디바이스

 

 

 

2. 루팅 여부를 체크하고 루트권한이 있는 기기라면 다이얼로그를 띄우고 확인을 누르면 앱을 종료하는 예제

 	if(isRooted()){

            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
            alertDialogBuilder
                    .setMessage("루트권한을 가진 디바이스에서는 실행할 수 없습니다.")
                    .setCancelable(false)
                    .setPositiveButton("확인",
                            new DialogInterface.OnClickListener() {
                                public void onClick(
                                        DialogInterface dialog, int id) {

                                    moveTaskToBack(true);
                                    finish();
                                    android.os.Process.killProcess(android.os.Process.myPid());

                                }
                            });
            AlertDialog alertDialog = alertDialogBuilder.create();

            alertDialog.show();

            return;
        }

 - 내 주력은 웹이지만 겉핥기로 안드로이드, 아이폰 개발을 조금 할 수 있어서 프로젝트에서 병행하게 되는 일이 많은데 규모가 있는 프로젝트에서는 항상 루팅여부를 체크하는 로직을 원하는 것 같다

 

 

swift4 에서 사용할 수 있는 동일한 포스팅은 아래 링크를 참고

 

iOS Swift4 탈옥 여부 체크하기

iOS Swift4 탈옥 여부 체크하기 Swift 카테고리의 게시글은 처음쓴다 안드로이드의 루트 권한을 체크하는 포스팅을 아래와 같이 하고 내친김에 iOS를 개발할때 Swift4에서 사용하고있는 방식을 포스팅 하려한다 An..

6developer.com