build.prop
基础
Android中有一些常用的配置信息都是存放在一个文件中,比如设备的系统,版本号,cpu型号等信息,而这个文件位置在:
/system/build.prop
同时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进程挂掉的情况,那么设备肯定会重启的。到时候在重新操作一下即可。
修改的是内存的值,而不是文件中的值。
build.prop文件生成过程
build.prop文件的生成过程就是系统收集各个配置属性然后合并到build.prop文件的过程。
-
执行build/tools/buildinfo.sh
-
将system.prop中的内容添加到$(OUT_TARGET_DEVICE)/system/build.prop
-
将ADDITIONAL_BUILD_PROPERTIES的值也添加到$(OUT_TARGET_DEVICE)/system/build.prop
-
在执行
make
后,build.prop
会重新生成,因此不能仅仅修改$(OUT_TARGET_DEVICE)/system/build.prop
,需要找到源码树中具体的配置位置进行修改,这个每个厂家的做法也是不一样的
adb修改build.prop
启动root
模式
adb connect $设备IP地址
adb root
重新挂载文件系统
adb remount
将本地修改后的build.prop
文件push
到android
系统中
adb push build.prop /system/build.prop
重启系统后生效。