前言
笔者最近在工作中遇到了关于 Android 的权限管理的问题,在搜索资料的时候发现关于 Android 如何获取 Android 系统权限或者 root 权限的资料少之又少,而且千篇一律。我这只小白真真切切的感受到了失望和无助。写下这篇文章主要是为了抛砖引玉。希望有大牛能来抚慰我受伤的心灵。
普通权限
对于 Android 中普通的权限我们只需要在 AndroidManifest.xml 中的 manifest 节点下进行声明就可了。比如网络权限,只需要在 AndroidManifest 中添加如下内容即可。
<uses-permission android:name="android.permission.INTERNET" />
在[Android] Android 6.0 的权限管理变化 这篇文章中作者介绍了 Android 6.0 的权限管理变化。
root 权限
如何使自己的应用获取 root 权限,是笔者问题的症结所在。笔者尝试的方法只要有:
- 破解手机
- 打 Android 平台的签名包
破解手机获取 root 权限
这种方法需要用户自行破解手机才能生效。确定破解手机后执行如下代码启动一个在 root 账户中运行的进程。然后在此进程中执行要实现的功能。
/**
* 应用程序运行命令获取 Root权限,设备必须已破解(获得ROOT权限)
*
* @return 应用程序是/否获取Root权限
*/
public static boolean upgradeRootPermission(String pkgCodePath,String commendLine) {
Process process = null;
DataOutputStream os = null;
try {
String cmd="chmod 777 " + pkgCodePath;
process = Runtime.getRuntime().exec("su"); //切换到root帐号
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(cmd + "\n");
os.writeBytes(commendLine+"\n");
os.flush();
process.waitFor();
} catch (Exception e) {
return false;
} finally {
try {
if (os != null) {
os.close();
}
process.destroy();
} catch (Exception e) {
}
}
return true;
}
上述代码中 commendLine 是需要在 root 账户中执行的操作。这种方法只适合执行一些简单的 shell 命令或者简单的程序。比如关机或者重启。但是你的应用依然没有 root权限。
打 Android 平台的签名包获取系统权限
这种方法其实就是把自己的应用提升到系统应用的级别,从而使应用获取系统权限。Android 系统权限和 root 权限这篇文章中具体介绍了如何使应用获取系统权限和 root 权限。对于文中介绍的怎样使 Android APK 获取 system 权限笔者不在重复介绍。因为笔者尝试过,然而并没有什么卵用。而网上几乎所有的资料都是这么介绍的。