adb.c中
int adb_main(int is_daemon, int server_port)
{
... ...
property_get("ro.adb.secure", value, "0");
auth_enabled = !strcmp(value, "1");
/* Modify byXXX */
if (auth_enabled) {
adb_auth_init();
property_get("persist.service.adb.root", value, "0");
auth_enabled = !strcmp(value, "0");
}
/* End modify */
... ...
/* don't listen on a port (default 5037) if running in secure mode */
/* don't run as root if we are running in secure mode */
if (should_drop_privileges()) {
drop_capabilities_bounding_set_if_needed();
... ...
}
static int should_drop_privileges() {
/* Add by XXX*/
char value1[PROPERTY_VALUE_MAX];
property_get("persist.service.adb.root", value1, "");
if (strcmp(value1, "1") == 0) {
return 0;
}
/* End add */
... ...
}
static void drop_capabilities_bounding_set_if_needed() {
/* Modify by XXX*/
char value1[PROPERTY_VALUE_MAX];
property_get("persist.service.adb.root", value1, "");
if (strcmp(value1, "1") == 0) {
return;
}
/* End modify */
... ...
}
system/core/init.rc中红色部分去掉。
# adbd is controlled via property triggers in init.<platform>.usb.rc
service adbd /sbin/adbd --root_seclabel=u:r:su:s0
class core
socket adbd stream 660 system system
disabled
seclabel u:r:adbd:s0
在MMI APP层
public class HuaAdbRootActivity extends Activity implements OnCheckedChangeListener {
private final String TAG = "XXX";
private CheckBox mCheckBoxAdbRoot;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Settings.Secure.putInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 1);
mCheckBoxAdbRoot.setEnabled(true);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hua_adb_root);
mCheckBoxAdbRoot = (CheckBox) findViewById(R.id.checkBoxAdbRoot);
mCheckBoxAdbRoot.setChecked(SystemProperties.getInt("persist.service.adb.root", 0) > 0);
if (ActivityManager.isUserAMonkey()) {
Log.d(TAG, getClass() + " in monkey test mode");
} else {
mCheckBoxAdbRoot.setOnCheckedChangeListener(this);
}
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
mCheckBoxAdbRoot.setEnabled(false);
SystemProperties.set("persist.service.adb.root", isChecked ? "1" : "0");
Settings.Secure.putInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 0);
mHandler.sendEmptyMessageDelayed(0, 1000);
}
}