android Superuser.apk源码分析

下载位置:

https://github.com/ChainsDD/Superuser

关于Superuser,这边分析一个接收su程序发送过来的广播以及处理过程

SuRequestReceiver
这个类进行处理的接收过程。(可直接去查看AndroidManifest.xml)
onReceive里面进行判断,首先读取是否存储过,有默认选择。否则走到
showPrompt,这个函数启动了SuRequestActivity 界面。即是我们操作的对话框。
SuRequestActivity
这个类启动了对话框,通过
            ((Button)findViewById(R.id.allow)).setOnClickListener(this);
            ((Button)findViewById(R.id.deny)).setOnClickListener(this);
            注册了选择按钮的回调函数。
            查看此类的onClick函数,我们来看
                    case R.id.allow:
        case R.id.pin_ok:
        这个允许的操作。
        执行sendResult语句,此语句里面
                    OutputStream os = mSocket.getOutputStream();
            Log.i(TAG, "Sending result: " + resultCode + " for UID: " + mCallerUid);
            os.write(resultCode.getBytes("UTF-8"));
            os.flush();
            os.close();
            mSocket.close();
            向su创建的socket fd反馈结果。su的socket fd通过参数在onCreate里面可以看到。
            onCreate里面的:
             String socketPath = intent.getStringExtra(SuRequestReceiver.EXTRA_SOCKET);
             以及创建连接
                            mSocket = new LocalSocket();
                mSocket.connect(new LocalSocketAddress(socketPath,
                        LocalSocketAddress.Namespace.FILESYSTEM));
                Credentials creds= mSocket.getPeerCredentials();
            分析完毕。

你可能感兴趣的:(android,su)