一、Android ro属性概述

在adb shell中输入getprop命令就可以获取到当前系统所有的属性内容:

20180313152110414

另外,如果我们系统获取到指定属性的属性值,我们也可以通过在adb shell中输入getprop+属性名来获取,设置属性也是一样的,可以通过setprop+属性名+新值来给指定的属性名称设置新的属性。

在android中,属性一般是存放在属性文件中,系统启动的时候会对属性文件进行加载。存储属性的文件如下所示:

/default.prop

/system/build.prop

/system/default.prop(该文件不一定存在)

/data/local.prop

/data/property目录里的若干脚本

以ro开头的属性都是只读属性,以persist开头的属性,一般都是从/data/property目录中加载的。

由于对于ro属性是不可以改的。像/default.prop 是不能直接编辑的,即使修改了重启也会还原。

二、如何修改ro属性

那么如何修改ro属性呢?网上已经有人提供了一种方法,主要是通过进程注入的方式来修改的。

通过下面链接下载对应的mprop文件

https://pan.baidu.com/s/1i5NsZzR 密码:inrg

将mprop文件push到手机,并且执行

#adb push mprop/armeabi-v7a/mprop /sdcard/mprop

#adb shell

#su

#cp /sdcard/mprop /data/local/tmp

#cd /data/local/tmp

#chmod 755 mprop

#./mprop

20180313152542267

我们可以看到使用方法

Usage: propmod [prop_name] [prop_value]

e.g.: propmod ro.secure 0

三、作用

那么有人可能会说,修改ro属性到底有什么作用呢?

假如我们想动态调试一个应用,但是往往应用都是不可调试的,因为在AndroidManifest.xml,应用往往会将android:debuggable设置为false,通常的做法是对应用进行反编译,将其android:debuggable=”false”修改为true,没有android:debuggable属性则添加android:debuggable=”true”,然后对应用再次进行打包,重新签名安装在手机上。

这种方法的有两种弊端:

(1)太麻烦,如果我们希望对大量的应用进行调试,或者使用调试工具来获取相应的信息,那么就需要对所有的应用都进行android:debuggable的修改操作。

(2)为了防止应用被篡改,现在市面上很多应用都有签名校验,如果我们对该应用重新打包签名,这样在启动应用的时候,签名校验是无法通过的,因此程序也不能正常使用。

其实如果我们希望对手机上的应用进行调试,我们只需要修改ro.debuggable属性,将它的值修改为1就可以对手机上所有的应用进行调试了,这样是不是很方便。

有了上面的方法,我只需要执行下面命令。

#./mprop ro.debuggable 1

成功之后,我们可以在Android Studio中看到,Android中所有运行的应用进程都是可以调试的。

20180313152617159

下面我们打开Android Device Monitor,我们也可以看到当前运行的进程都是可以调试的。这样我们就可以对手机上的任何应用进行跟踪调试了。

20180313152638513

20180313152649718

四、参考文章

http://blog.leanote.com/post/iunknow/动态调试so

https://bbs.pediy.com/thread-215311.htm

https://bbs.pediy.com/thread-222293.htm

http://www.iloveandroid.net/2015/09/26/Android_property_1/

欢迎关注我的公众号:DroidMind

精品内容,独家发布

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐