1. test app를 만들어서 아래 퍼미션 추가하고

    <uses-permission android:name="android.permission.MASTER_CLEAR" /> 
    <uses-permission android:name="android.permission.REBOOT" />

 

코드상 

  if (mContext.checkCallingOrSelfPermission("android.permission.MASTER_CLEAR") !=
            PackageManager.PERMISSION_GRANTED) {
        Log.e(TAG, "Permission Denial: can't invoke masterClear from "
                + "pid=" + Binder.getCallingPid() + ", "
                + "uid=" + Binder.getCallingUid());
        return;
    }
  try{
   Power.reboot("reboot");
  }catch(IOException e){
   e.printStackTrace();
   throw new DevicePortingException("Reboot fail");
  }

 했으나 아래와 같은 에러 메세지가 나옵니다.

 

01-14 09:19:12.410: WARN/System.err(1079): java.io.IOException: Operation not permitted
01-14 09:19:12.451: WARN/System.err(1079):     at android.os.Power.reboot(Native Method)
01-14 09:19:12.451: WARN/System.err(1079):     at com.kks.test.boot.Boot.rebootOk(Boot.java:76)
01-14 09:19:12.451: WARN/System.err(1079):     at com.kks.test.boot.Boot.access$000(Boot.java:20)
01-14 09:19:12.451: WARN/System.err(1079):     at com.kks.test.boot.Boot$1.onClick(Boot.java:38)
01-14 09:19:12.451: WARN/System.err(1079):     at android.view.View.performClick(View.java:2344)
01-14 09:19:12.451: WARN/System.err(1079):     at android.view.View.onTouchEvent(View.java:4133)
01-14 09:19:12.451: WARN/System.err(1079):     at android.widget.TextView.onTouchEvent(TextView.java:6504)
01-14 09:19:12.451: WARN/System.err(1079):     at android.view.View.dispatchTouchEvent(View.java:3672)
01-14 09:19:12.451: WARN/System.err(1079):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
01-14 09:19:12.451: WARN/System.err(1079):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
01-14 09:19:12.451: WARN/System.err(1079):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
01-14 09:19:12.451: WARN/System.err(1079):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
01-14 09:19:12.451: WARN/System.err(1079):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
01-14 09:19:12.451: WARN/System.err(1079):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1712)
01-14 09:19:12.451: WARN/System.err(1079):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1202)
01-14 09:19:12.451: WARN/System.err(1079):     at android.app.Activity.dispatchTouchEvent(Activity.java:1987)
01-14 09:19:12.451: WARN/System.err(1079):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696)
01-14 09:19:12.451: WARN/System.err(1079):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1653)
01-14 09:19:12.451: WARN/System.err(1079):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-14 09:19:12.451: WARN/System.err(1079):     at android.os.Looper.loop(Looper.java:123)
01-14 09:19:12.451: WARN/System.err(1079):     at android.app.ActivityThread.main(ActivityThread.java:4195)
01-14 09:19:12.451: WARN/System.err(1079):     at java.lang.reflect.Method.invokeNative(Native Method)
01-14 09:19:12.451: WARN/System.err(1079):     at java.lang.reflect.Method.invoke(Method.java:521)
01-14 09:19:12.451: WARN/System.err(1079):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
01-14 09:19:12.451: WARN/System.err(1079):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
01-14 09:19:12.451: WARN/System.err(1079):     at dalvik.system.NativeStart.main(Native Method)

 

2. test app를 만들어서 아래 퍼미션 추가하고

    <uses-permission android:name="android.permission.MASTER_CLEAR" /> 
    <uses-permission android:name="android.permission.REBOOT" />

 

코드상

if (mContext.checkCallingOrSelfPermission("android.permission.MASTER_CLEAR") !=
            PackageManager.PERMISSION_GRANTED) {
        Log.e(TAG, "Permission Denial: can't invoke masterClear from "
                + "pid=" + Binder.getCallingPid() + ", "
                + "uid=" + Binder.getCallingUid());
        return;
    }
  try{
   RecoverySystem.rebootAndWipe();
  }catch(IOException e){
   e.printStackTrace();
   throw new DevicePortingException("Reboot for masterClear() failed");
  }

했으나 아래와 같은 에러 메세지가 나옵니다.

 

01-14 09:20:02.348: DEBUG/(1079): unable to unlink '/cache/recovery/command': Permission denied (errno=13)
01-14 09:20:02.348: DEBUG/(1079): unable to unlink '/cache/recovery/log': Permission denied (errno=13)
01-14 09:20:02.348: WARN/System.err(1079): java.io.FileNotFoundException: /cache/recovery/command
01-14 09:20:02.348: WARN/System.err(1079):     at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:231)
01-14 09:20:02.348: WARN/System.err(1079):     at java.io.FileOutputStream.<init>(FileOutputStream.java:96)
01-14 09:20:02.348: WARN/System.err(1079):     at java.io.FileOutputStream.<init>(FileOutputStream.java:69)
01-14 09:20:02.348: WARN/System.err(1079):     at java.io.FileWriter.<init>(FileWriter.java:45)
01-14 09:20:02.348: WARN/System.err(1079):     at com.android.internal.os.RecoverySystem.bootCommand(RecoverySystem.java:87)
01-14 09:20:02.348: WARN/System.err(1079):     at com.android.internal.os.RecoverySystem.rebootAndWipe(RecoverySystem.java:74)
01-14 09:20:02.348: WARN/System.err(1079):     at com.kks.test.boot.Boot.resetToFactoryModeOk(Boot.java:96)
01-14 09:20:02.348: WARN/System.err(1079):     at com.kks.test.boot.Boot.access$100(Boot.java:20)
01-14 09:20:02.348: WARN/System.err(1079):     at com.kks.test.boot.Boot$2.onClick(Boot.java:52)
01-14 09:20:02.348: WARN/System.err(1079):     at android.view.View.performClick(View.java:2344)
01-14 09:20:02.348: WARN/System.err(1079):     at android.view.View.onTouchEvent(View.java:4133)
01-14 09:20:02.348: WARN/System.err(1079):     at android.widget.TextView.onTouchEvent(TextView.java:6504)
01-14 09:20:02.348: WARN/System.err(1079):     at android.view.View.dispatchTouchEvent(View.java:3672)
01-14 09:20:02.348: WARN/System.err(1079):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
01-14 09:20:02.348: WARN/System.err(1079):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
01-14 09:20:02.348: WARN/System.err(1079):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
01-14 09:20:02.348: WARN/System.err(1079):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
01-14 09:20:02.348: WARN/System.err(1079):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
01-14 09:20:02.348: WARN/System.err(1079):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1712)
01-14 09:20:02.348: WARN/System.err(1079):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1202)
01-14 09:20:02.348: WARN/System.err(1079):     at android.app.Activity.dispatchTouchEvent(Activity.java:1987)
01-14 09:20:02.348: WARN/System.err(1079):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696)
01-14 09:20:02.348: WARN/System.err(1079):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1653)
01-14 09:20:02.348: WARN/System.err(1079):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-14 09:20:02.348: WARN/System.err(1079):     at android.os.Looper.loop(Looper.java:123)
01-14 09:20:02.348: WARN/System.err(1079):     at android.app.ActivityThread.main(ActivityThread.java:4195)
01-14 09:20:02.348: WARN/System.err(1079):     at java.lang.reflect.Method.invokeNative(Native Method)
01-14 09:20:02.348: WARN/System.err(1079):     at java.lang.reflect.Method.invoke(Method.java:521)
01-14 09:20:02.348: WARN/System.err(1079):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
01-14 09:20:02.348: WARN/System.err(1079):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
01-14 09:20:02.348: WARN/System.err(1079):     at dalvik.system.NativeStart.main(Native Method)