Android下如何写出一个需要Root应用的程式
2013-07-09 20:31
344 查看
/* kangear:文章提到了NDK怎么获取ROOT权限,abc步应该能够解决了我的NDK获取ROOT的问题 */
在Linux/Unix环境下root是最高权限者,所以拥有root就等于拥有系统全部控制权,也因为这样只要使用root随便一个动作将会造成系统的损毁或是产生资安问题。
正因如此Android装置一般原厂不会开放root权限而只会提供uid及gid为shell的权限,除了担心使用者勿删重要档案外,最主要的原因还是资讯安全的问题,例如保护apk程式、线上影音DRM、...等等。
本篇主要实作如何在Android程式中使用root权限执行动作,注意的是当Android装置进行root后,原厂几乎不在保固该设备,故本篇文章内容说明在SDK开发中使用root权限全所以不提供如何root方法,相关root方法有需要的Google搜寻一下吧。
![](https://www.xingdaili.com/browse.php?u=4c8nEkAd8tIDG4t9uv%2Fiq4cz0Q5xRQ8PbvSOnorCzXIJP83RAPIAjpkRGgY25YnphTbZJaJuqgEM6Prdoh3UqqdIF6v1bfu7J9UacImBjIQe8Q%3D%3D&b=6)
【免责声明】:本实作有可能会造成Android装置或是相关周边的损毁,相对可能危及到相关设备的保固或维修,请评估是否可以自行承担相关风险,如无把握请勿尝试将不负任何责任。 在Google
Play中我们发现有不少程式会使用到root权限才能执行,通常这些程式绝大多都是为了更改档案(装置)系统权限,然后使用它。 例如HelloUsbUart这一篇文章内容所述如果要挂载USB随身碟的话最快的方法就是将/dev/usb/xxx(装置名)权限改为drwxrwxrwx (chmod 777)然后将该装置挂载到一个目录下就可以使用了,这种方式有点类似[root]
StickMount这个程式做法,使用这样的方法优点是程式撰写简单,使用Linux操作指令就可用了,缺点是装置需要进行root,有保固问题。 另外值得一提的是在Google Play上有一个不用root就可以读取USB随身碟软体Nexus
Media Importer,这支程式作法就类似使用上一篇直接使用USB通讯来做,所以不用root权限就可以读取USB随身碟,这部分请看下图程式开启时会去读取的USB装置是/dev/bus/usb/00x/00x....讯息。使用这样的方法优点是装置不需要进行root,缺点是程式撰写比较进阶(专业)而且要对于USB装置的通讯十分清楚。
![](https://www.xingdaili.com/browse.php?u=4c8nF0Ad8tIDG4t9uv%2Fiq4cz0Q5xRRlOQ%2FOE4KqV6ExSP83RAP54ucgoXCc25YnphTbZJaJuqgF56L2tpTDViPdpMJ%2B6bfu7J9UacImEjJ4A8Q%3D%3D&b=6)
除了USB随身碟应用外,再举个比较知名的软体SetCPU
for Root Users,这支程式主要就是在调整/sys/devices/system/cpu目录下的参数达到节能获超频的功能,由于该目录下的档案权限一般shell的权限无法修改,所以必须透过root权限来读写。 综合上述说明概略的提出了root权限的使用时机,今天实作如何在Android程式中使用root权限执行动作,延续上一篇HelloUsbUart文章还是以NEXUS
7作为测试平台。 下面是本次实验的环境: Google nexus 7 (Android 4.2 Jelly Bean) ASUS Transformer Prime TF201 OTG线 USB to RS-232 (PL-2303) 开发环境: Win 7 SP1 Java 1.6.0_35Eclipse 3.7.2 Android SDK r20 .0.3 具备知识 Linux系统操作 USB通讯知识 程式内容: (1)获取与设备通讯的权限 在这个部分在这支程式可有可无,这部分功能主要是侦测当USB装置插上后,会询问是否要执行这个程式,如果不需要这样的功能可以直接跳过。 参考Android
USB应用之HelloUsbUart(RS-232)这篇文章中的获取与设备通讯的权限,主要是改AndroidManifest.xml及增加res/xml/device_filter.xml AndroidManifest.xml 在<intent-filter>与</ intent-filter>加入<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
/> 在</activity>前面加入<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" /> 在专案目录res中建立一个xml目录,在xml目录下建立一个device_filter.xml档案,其内容定义USB的PID与UID这必须要视你连上的USB装置而定,相关内容如下:
res/xml/device_filter.xml <?xml version="1.0" encoding="utf-8"?> <resources> <usb-device vendor-id="1659" product-id="8963" /> </resources
> (2)主程式MainActivity中程式码如下:
![](https://www.xingdaili.com/browse.php?u=4c8nEEAd8tIDG4t9uv%2Fiq4cz0Q5xRQ4%2FUN%2BVj4TNt1A7P83RAPBgnskPGQ825YnphTbZJaJuqgEE6LrxsQjnsPhkH6XXbfu7J9UacImFjJ4A8Q%3D%3D&b=6)
![](https://www.xingdaili.com/browse.php?u=4c8nEUAd8tIDG4t9uv%2Fiq4cz0Q5xRRg7bOSGpKrv02IVP83RAPBjqpE2Zws25YnphTbZJaJuqgEc6MfAoTLpgNB1FIrTbfu7J9UacImGjJ4A8Q%3D%3D&b=6)
![](https://www.xingdaili.com/browse.php?u=4c8nEkAd8tIDG4t9uv%2Fiq4cz0Q5xRQ9EC%2Fqps4jxyls7P83RAPBYoooafCI25YnphTbZJaJuqgEq6P7OuC7k66BcR7jhbfu7J9UacImHjJ4A8Q%3D%3D&b=6)
上述程式主要有三个步骤:
a.执行"su
-c system/bin/sh"将预设shell使用者改变成root。
b.用root权限执行chmod
0666 /dev/xxx(装置名)
c.离开root权限返回shell使用者。(3)执行结果: 可以用指令方式确认: 执行程式前: android:/ $ ls -l /dev/ttyUSB0 crw------- root
root 188, 0 2012-11-16 09:57 ttyUSB0 执行程式后: android:/ # ls -l /dev/ttyUSB0 crw-rw-rw- root root 188, 0 2012-11-16 17:47 ttyUSB0
![](https://www.xingdaili.com/browse.php?u=4c8nEUAd8tIDG4t9uv%2Fiq4cz0Q5xRV4%2BVO%2FasPKQxlYJP83RAPBQ8qkxRSM25YnphTbZJaJuqgEi6PzaknL%2Bl%2B96MOG2bfu7J9UacImCjJ4A8Q%3D%3D&b=6)
![](https://www.xingdaili.com/browse.php?u=4c8nEkAd8tIDG4t9uv%2Fiq4cz0Q5xRQ8PbvSOnorCzXIJP83RAPIAjpkRGgY25YnphTbZJaJuqgEM6Prdoh3UqqdIF6v1bfu7J9UacImBjIQe8Q%3D%3D&b=6)
![](https://www.xingdaili.com/browse.php?u=4c8nEEAd8tIDG4t9uv%2Fiq4cz0Q5xRVhAT4mr5I313VEnP83RAPBTqpgjdg425YnphTbZJaJuqgE66NHv2w%2F5q9xYS5rlbfu7J9UacImDjJ4A8Q%3D%3D&b=6)
后记:
类似这样的方法同样可以使用在NDK开发下,如果是透过NDK来开始用root权限的话,只要找有关于C语言执行外部指令同样执行上面所说的abc三个步骤即可。 ==============延伸阅读===================== Android
USB应用之HelloUsbUart(RS-232) === ===========相关阅读===================== Java
Native Interface (JNI) Android实战篇(使用NDK) -- HelloUartAndroid
Bluetooth应用之HelloBTUart(RS-232)
原文地址:http://cheng-min-i-taiwan.blogspot.com/2012/11/androidroot.html
在Linux/Unix环境下root是最高权限者,所以拥有root就等于拥有系统全部控制权,也因为这样只要使用root随便一个动作将会造成系统的损毁或是产生资安问题。
正因如此Android装置一般原厂不会开放root权限而只会提供uid及gid为shell的权限,除了担心使用者勿删重要档案外,最主要的原因还是资讯安全的问题,例如保护apk程式、线上影音DRM、...等等。
本篇主要实作如何在Android程式中使用root权限执行动作,注意的是当Android装置进行root后,原厂几乎不在保固该设备,故本篇文章内容说明在SDK开发中使用root权限全所以不提供如何root方法,相关root方法有需要的Google搜寻一下吧。
【免责声明】:本实作有可能会造成Android装置或是相关周边的损毁,相对可能危及到相关设备的保固或维修,请评估是否可以自行承担相关风险,如无把握请勿尝试将不负任何责任。 在Google
Play中我们发现有不少程式会使用到root权限才能执行,通常这些程式绝大多都是为了更改档案(装置)系统权限,然后使用它。 例如HelloUsbUart这一篇文章内容所述如果要挂载USB随身碟的话最快的方法就是将/dev/usb/xxx(装置名)权限改为drwxrwxrwx (chmod 777)然后将该装置挂载到一个目录下就可以使用了,这种方式有点类似[root]
StickMount这个程式做法,使用这样的方法优点是程式撰写简单,使用Linux操作指令就可用了,缺点是装置需要进行root,有保固问题。 另外值得一提的是在Google Play上有一个不用root就可以读取USB随身碟软体Nexus
Media Importer,这支程式作法就类似使用上一篇直接使用USB通讯来做,所以不用root权限就可以读取USB随身碟,这部分请看下图程式开启时会去读取的USB装置是/dev/bus/usb/00x/00x....讯息。使用这样的方法优点是装置不需要进行root,缺点是程式撰写比较进阶(专业)而且要对于USB装置的通讯十分清楚。
除了USB随身碟应用外,再举个比较知名的软体SetCPU
for Root Users,这支程式主要就是在调整/sys/devices/system/cpu目录下的参数达到节能获超频的功能,由于该目录下的档案权限一般shell的权限无法修改,所以必须透过root权限来读写。 综合上述说明概略的提出了root权限的使用时机,今天实作如何在Android程式中使用root权限执行动作,延续上一篇HelloUsbUart文章还是以NEXUS
7作为测试平台。 下面是本次实验的环境: Google nexus 7 (Android 4.2 Jelly Bean) ASUS Transformer Prime TF201 OTG线 USB to RS-232 (PL-2303) 开发环境: Win 7 SP1 Java 1.6.0_35Eclipse 3.7.2 Android SDK r20 .0.3 具备知识 Linux系统操作 USB通讯知识 程式内容: (1)获取与设备通讯的权限 在这个部分在这支程式可有可无,这部分功能主要是侦测当USB装置插上后,会询问是否要执行这个程式,如果不需要这样的功能可以直接跳过。 参考Android
USB应用之HelloUsbUart(RS-232)这篇文章中的获取与设备通讯的权限,主要是改AndroidManifest.xml及增加res/xml/device_filter.xml AndroidManifest.xml 在<intent-filter>与</ intent-filter>加入<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
/> 在</activity>前面加入<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" /> 在专案目录res中建立一个xml目录,在xml目录下建立一个device_filter.xml档案,其内容定义USB的PID与UID这必须要视你连上的USB装置而定,相关内容如下:
res/xml/device_filter.xml <?xml version="1.0" encoding="utf-8"?> <resources> <usb-device vendor-id="1659" product-id="8963" /> </resources
> (2)主程式MainActivity中程式码如下:
上述程式主要有三个步骤:
a.执行"su
-c system/bin/sh"将预设shell使用者改变成root。
b.用root权限执行chmod
0666 /dev/xxx(装置名)
c.离开root权限返回shell使用者。(3)执行结果: 可以用指令方式确认: 执行程式前: android:/ $ ls -l /dev/ttyUSB0 crw------- root
root 188, 0 2012-11-16 09:57 ttyUSB0 执行程式后: android:/ # ls -l /dev/ttyUSB0 crw-rw-rw- root root 188, 0 2012-11-16 17:47 ttyUSB0
后记:
类似这样的方法同样可以使用在NDK开发下,如果是透过NDK来开始用root权限的话,只要找有关于C语言执行外部指令同样执行上面所说的abc三个步骤即可。 ==============延伸阅读===================== Android
USB应用之HelloUsbUart(RS-232) === ===========相关阅读===================== Java
Native Interface (JNI) Android实战篇(使用NDK) -- HelloUartAndroid
Bluetooth应用之HelloBTUart(RS-232)
原文地址:http://cheng-min-i-taiwan.blogspot.com/2012/11/androidroot.html
相关文章推荐
- Android 在一个应用中如何启动另外一个已安装的应用!!!
- [Android]如何做一个崩溃率少于千分之三噶应用app(21)-组件化数据分享
- 如何获取所有安装的Android应用并且可以运行其中一个?
- Android 开发有时需要在一个应用中启动另一个应用
- [Android]如何做一个崩溃率少于千分之三噶应用app(8)-多渠道模块
- [Android]如何做一个崩溃率少于千分之三噶应用app(22)-组件化路由跳转
- Android 在一个应用中如何启动另外一个已安装的应用
- Android高手进阶教程(十一)----Android 在一个应用中如何启动另外一个已安装的应用!!!
- android应用如何在有需要时申请root权限?在程序中要调用哪些语句来实现?
- Android高级控件(五)——如何打造一个企业级应用对话列表,以QQ,微信为例
- 如何制作一个漂亮的 Android 应用图标
- Android 在一个应用中如何启动另外一个已安装的应用!!!
- android应用如何启动另外一个apk应用
- [Android]如何做一个崩溃率少于千分之三噶应用app(23)-组件化&模块化&插件化演进
- Android 如何判断一个应用在运行
- Android深入浅出系列之实例应用—如何在一个Activity里调用另外一个Activity?
- Android 在一个应用中如何启动另外一个已安装的应用!!!
- Android 如何判断一个应用在运行
- [Android]如何做一个崩溃率少于千分之三噶应用app(13)-Activity分发功能module架构
- Android高手进阶教程(十二)之----Android 在一个应用中如何启动另外一个已安装的应用!