Keep on going, never give up.

Android获取ROOT权限方法汇总

本文介绍Android系统上获取TF/SD卡ROOT权限方法,应用程序获取Root权限有个前提是该设备已经破解ROOT过,比如使用SuperOneClick软件,否则执行SU命令毫无效果,演示程序使用chmod方式修改某个设备(TF卡分区)的访问权限,比如要按照物理扇区访问读写TF卡或希望删除某些重要文件时,在Android系统上必须具备ROOT权限才可以。

还有一种我们开发人员经常会遇到就是/system/lib目录控制问题,直接使用adb去控制Android设备都是无权限的,每次遇到此类问题都是非常挠头,各家源码定制不同也不是每个设备都能解决。

执行su命令时无反应,可能是您的设备没有ROOT,还有一种可能,您的/system/bin下面根本就没有这个文件(可以找其它同版本上su文件拷贝过来)。

一、使用SuperOneClick等软件ROOT提权

下载地址:http://forum.xda-developers.com/showthread.php?t=803682

用法参考:http://hi.baidu.com/cy594/blog/item/190e8794021c150bd31b7041.html

该ROOT破解软件的原理就是利用Android系统的漏洞进行提权,最终目的开启ROOT账户登录,且在下文执行SU命令时不会执行失败。如果您对ROOT结果及潜在风险知之甚少,请谨慎而为。

二、应用程序获取ROOT权限代码

示例获取ROOT并修改mmcblk0分区权限为777:

package com.android.myapp.utility;

import java.io.DataOutputStream;

import android.app.Activity;

public class MyTestPri extends Activity{

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    	//* Create a TextView and set its content.
        //* the text is retrieved by calling a native
        //* function.

        setContentView(R.layout.main);
        String apkRoot="chmod 777 /dev/block/mmcblk0";//SD卡分区路径,也可能是mmcblk1随系统版本定,当前程序路径请用getPackageCodePath();
        RootCmd(apkRoot);
    }

    public boolean RootCmd(String cmd){
        Process process = null;
        DataOutputStream os = null;
        try{
            process = Runtime.getRuntime().exec("su");
            os = new DataOutputStream(process.getOutputStream());
            os.writeBytes(cmd+ "\n");
            os.writeBytes("exit\n");
            os.flush();
            process.waitFor();
        } catch (Exception e) {
            return false;
        } finally {
            try {
                if (os != null)   {
                    os.close();
                }
                process.destroy();
            } catch (Exception e) {
            }
        }
        return true;
    }
}

以上程序第一次运行时,会弹出类似“XXX应用程序想要获取root权限”这样提示的对话框。这时你只需确认许可即可,下次再次执行时,Android会自动授权该程序进行ROOT提权。

执行完成后,可以看到该设备权限已被修改为777,注:如果只是想按照扇区读写SD卡,修改为606就足够了,或者再尝试低一点的权限。

另外,关于TF/SD卡的挂载点问题,好像有的版本会挂载到mmcblk0,有的会挂载到mmcblk1上,具体还是要判断一下,有深入研究过的不妨留言补充。

三、修改init.rc ROOT提权

除了SuperOneClick,如果我们拥有修改系统源码(init.rc)的权限,似乎去修改init.rc更加规范些。(请注意system权限和root权限是两种不同的权限)。当然,前提是我们要知道init.rc中的初始化语句写法。

参考资料:

http://www.cnblogs.com/ycmoon/archive/2011/05/11/2042999.html(Android应用程序获取ROOT权限的方法,本文主要参考来源)

更多文章:

Google Android开发机之真机调试

Android开发入门之环境概念介绍

Android源码在32位Linux系统上编译配置

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.