现在的位置: 首页 > 综合 > 正文

android的root权限问题

2013年05月01日 ⁄ 综合 ⁄ 共 1019字 ⁄ 字号 评论关闭

  今天终于把android的apk正常调用/sys下的bind与unbind。

  现象:

    插入鼠标后,会在/sys下面生成一个usb设备,其中就会有unbind与unbind。由于项目中需要走自己的usb采集,因此要用到绑定与解绑定。自己写的测试程序,可以正常绑定与解绑定,但是apk调用测试程序后就会出现解绑定失败。

  分析过程:

    出现这种现象,人的第一反应就会认为是android的apk的权限问题,我也是这么认为的。

    因此我尝试了以下几种办法:

    1,在java代码中加入chmod 的命令,具体见我的博客。

    2,在android的工程中,修改xml的uses-permission android::name所对应的属性。

    3,修改init.rc

    4,修改sdk下面的build/core/main.mk,把其中的ro.seure修改为0,还有persist修改为1。详细见我的另一篇博客。

    但是这几种办法都没有成功。

    我之后就/sys所生成的usb设备下查看unbind属性,发现其属性为-w- --- ---,因此我就chmod 777 bind,使其为777属性,发现apk可以正常调用其属性。

    唉,这时候其实才解决了问题的一半,因为在终端输入命令不能从根本上解决这个问题,我们不可能让用户在终端输入命令。

    之后正常思维就是在jni的C代码中加入system("chmod *****");*****是我要修改的属性。又回到了起点,脱离apk的test代码可以成功,但是通过apk调用的test,无法修改其属性。

    人生无常,但要锲而不舍才能自强不息。

    system无法正常使用,我就又想到了方法四,但是试试了不行。

    这时候我就跳出去想,应该与驱动有关系,而与android没有关系,因为usb驱动生成的bind与unbind属性为-w- --- --- ,这时候为什么不修改驱动文件,使其生成时就是777属性呢?

    经过修改尝试,发现成功。修改文件为kernel/drivers/base/bus.c文件中的

          static DRIVER_ATTR(unbind, 0777, NULL, driver_unbind);

    static DRIVER_ATTR(bind, 0777, NULL, driver_bind);

    至此问题彻底解决。

抱歉!评论已关闭.