下载位置:
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();
分析完毕。