好的,我在这里感到困惑。我是Java / Android编程的新手,我自学,所以请耐心等待。
基本上,我的整个onCreate
由一个巨大的if / else语句组成。我有几个方法可以检查设备上是否安装了各种应用程序,然后我有一个名为RunAsRoot
的方法,它只是以su执行shell命令。这是完整的onCreate
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CharSequence message = null;
Button button = (Button) findViewById(R.id.button1);
boolean installed = appInstalledOrNot("x");
if(installed) {
message = "whateverhere";
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
RunAsRoot(commands);
}
});
}
else {
message = "whateverhere";
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "You don't have packagenamehere installed, sorry!", Toast.LENGTH_LONG).show();
}
});
}
TextView textView = (TextView )findViewById(R.id.textView);
textView.setTextSize(20);
textView.setText(message);
}
整个过程非常基础......如果安装了包,那么很酷,请执行命令。如果它没有安装,太糟糕了,你就无法运行这些命令。而且效果很好。但这是我的问题...我想检查设备是否在应用程序的开头扎根。如果 已植根,请转到我在上面发布的if / else。如果不 root,setContentView
为不同的布局。我无法解决任何问题!从字面上看,没有任何工作。
我有一个名为isRooted()
的方法,用于检查/system/xbin
中是否存在su。但我无法弄清楚如何将其纳入我的if / else语句。我希望在发生任何其他事情之前检查root,如果找不到root,只需切换血腥布局即可。但是由于NullPointerException,一切都崩溃了。
以下是isRooted()
:
public boolean isRooted() {
try {
Process process = new ProcessBuilder()
.command("/system/xbin/su")
.redirectErrorStream(false)
.start();
} catch (IOException e) {
return true;
}
return false;
}
我想我只是对这里的去处感到困惑。我应该将我的整个if / else包装在另一个if / else检查root吗?我猜另一件事是,我如何致电isRooted()
?我想我做错了:
if (isRooted()) {
//everything here
}
else {
setContentView(R.layout.notrooted);
}
Logcat输出显示我的onCreate中发生了NullPointerException,我认为这是由于if (isRooted())
关于我应该从哪里开始的任何建议?
TL; DR:我想检查一下我是否可以以root用户身份运行,如果可以的话,继续编程,如果我不能,则更改布局并停止。
编辑:以下是我退出LogCat的所有内容:
07-24 09:00:51.257: E/AndroidRuntime(16282): Process: com.test.app, PID: 16282
07-24 09:00:51.257: E/AndroidRuntime(16282): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.app/com.test.app.MainActivity}: java.lang.NullPointerException
07-24 09:00:51.257: E/AndroidRuntime(16282): at com.test.app.MainActivity.onCreate(MainActivity.java:126)
答案 0 :(得分:0)
我遇到过在Android中运行su命令的问题。 这是我的问题: Working Directory : null environment when running Process.Builder on android
基本上我根据使用Process.Builder获得的输出,确定我是否具有root访问权限。您可以使用它来确定您是否具有root权限。