Android上的“ su”既不会出错也不起作用。如何在有根设备上成功运行su命令?

时间:2019-07-18 19:07:32

标签: android adb root

我已经植根了三星GALAXY Note 4设备。

此后,我从应用商店中安装了一个shell应用程序,并键入“ su”,然后出现一个Toast声明该shell保证了root访问权限。

我输入了“ setprop service.adb.tcp.port 5555”,该命令失败。 因此,我键入了“ su-c'setprop service.adb.tcp.port 5555'”,但由于我仍然无法进行无线连接,因此它没有错误,但也没有任何作用。

我曾尝试运行未定义的命令,例如“ su hdhdhd”,但未给出错误!!!

但是当通过USB连接电话时从我的PC打开adb shell时,我可以成功运行su命令!

为什么在电话外壳上无法成功通过PC adb外壳执行su命令???? !!!!!!

即使在第一次使用时,我也想通过adb将手机与PC连接起来,而根本不使用USB ...

预先感谢...

1 个答案:

答案 0 :(得分:0)

我通过编写自己的自己的android应用程序(已运行包含所需命令的shell脚本)解决了该问题。

问题在于,并不是所有在Play商店中可用的终端模拟器都能正常运行,尤其是具有root特权的人。

       try {
        String line;

        Process process = Runtime.getRuntime().exec("su");
        OutputStream stdin = process.getOutputStream();
        InputStream stderr = process.getErrorStream();
        InputStream stdout = process.getInputStream();

        stdin.write(("setprop service.adb.tcp.port 5555\n").getBytes());
        stdin.write(("stop adbd\n").getBytes());
        stdin.write(("start adbd\n").getBytes());
        stdin.write("exit\n".getBytes());
        stdin.flush();

        stdin.close();
        BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
        while ((line = br.readLine()) != null) {
            Log.d("[Output]", line);
        }
        br.close();
        br =
                new BufferedReader(new InputStreamReader(stderr));
        while ((line = br.readLine()) != null) {
            Log.e("Error", line);
        }
        br.close();

        process.waitFor();
        process.destroy();

    } catch (Exception exception) {}

我希望此Shell脚本在系统启动时自动运行。 Play商店中有几个为此目的的应用程序,但是它们正在发生故障!因此,我已经通过实现BroadcastReceiver更新了我的应用程序,使其能够在系统启动时自动运行。

package com.example.liveandroid;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class ADBD extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Intent i = new Intent(context, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
}

AndroidManifest配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.liveandroid">
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".ADBD">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            </intent-filter>
        </receiver>
    </application>

</manifest>