内容纲要

build.prop

基础

Android中有一些常用的配置信息都是存放在一个文件中,比如设备的系统,版本号,cpu型号等信息,而这个文件位置在:

/system/build.prop

1

同时Android中提供了两个命令来操作这些信息:getprop和setprop命令

Android系统中有一个可以调试所有设备中的应用的开关,在根目录中的default.prop文件中的ro.debuggable属性值,如果把这个值设置成1的话,那么设备中所有应用都可以被调试,即使在AndroidManifest.xml中没有android:debuggable=true,还是可以调试的。而这些系统属性的文件system/build.prop和default.prop,都是init进程来进行解析的,系统启动的时候就会去解析init.rc文件,这个文件中有配置关于系统属性的解析工作信息。然后会把这些系统属性信息解析到内存中,提供给所有app进行访问,这块信息也是内存共享的。但是这些ro开头的属性信息只能init进程进行修改。

init进程会解析这个属性文件,然后把这些属性信息解析到内存中,给所有app进行访问使用,所以在init进程的内存块中是存在这些属性值的,那么这时候就好办了,有一个技术可以做到了,就是进程注入技术,我们可以使用ptrace注入到init进程,然后修改内存中的这些属性值,只要init进程不重启的话,那么这些属性值就会起效。好了,这个方法可以尝试,但是这个方法有一个弊端,就是如果init进程挂了重启的话,那么设置就没有任何效果了,必须重新操作了,所以有效期不是很长,但是一般情况下只要保证设备不重启的话,init进程会一直存在的,而且如果发生了init进程挂掉的情况,那么设备肯定会重启的。到时候在重新操作一下即可。

image-20220718162809116

修改的是内存的值,而不是文件中的值。

build.prop文件生成过程

build.prop文件的生成过程就是系统收集各个配置属性然后合并到build.prop文件的过程。

  1. 执行build/tools/buildinfo.sh

  2. 将system.prop中的内容添加到$(OUT_TARGET_DEVICE)/system/build.prop

  3. 将ADDITIONAL_BUILD_PROPERTIES的值也添加到$(OUT_TARGET_DEVICE)/system/build.prop

  4. 在执行make后,build.prop会重新生成,因此不能仅仅修改$(OUT_TARGET_DEVICE)/system/build.prop,需要找到源码树中具体的配置位置进行修改,这个每个厂家的做法也是不一样的

adb修改build.prop

启动root模式

adb connect $设备IP地址
adb root

重新挂载文件系统

adb remount

将本地修改后的build.prop文件pushandroid系统中

adb push build.prop /system/build.prop

重启系统后生效。

参考资料

prop debuggable修改

prop详解