如何修改未root的安卓手机的mprop ro.debuggablee 属性

Android 如何永久性开启adb 的root权限 M
adb 的root 权限是在system/core/adb/adb.c 中控制。主要根据ro.secure 以及 ro.debuggable 等system property 来控制。默认即档ro.secure 为0 时,即开启root 权限,为1时再根据ro.debuggable 等选项来确认是否可以用开启root 权限。为此如果要永久性开启adb 的root 权限,有两种修改的方式:
1. 修改system property ro.secure, 让ro.secure=0。
2. 修改adb.c 中开启root 权限的判断逻辑。 下面详细说明这两种修改方式:
第一种方法. 修改system property ro.secure, 让ro.secure=0。
(1)修改alps/build/core/main.mk
ifneq (,$(user_variant))
# Target is secure in user builds.
ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1 将ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1 改成 ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0 (2)在android JB 版本(4.1) 以后,google 从编译上直接去除了adbd 的user 版本root 权限, 为此您要修改system/core/adb/.mk 中的编译选项ALLOW_ADBD_ROOT, 如果没有打开这个选项,那么adb.c 中将不会根据ro.secure 去选择root 还是shell 权限,直接返回shell 权限。因此您必须需要Android.mk 中的第126行:
ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
===& ifneq (,$(filter userdebug user eng,$(TARGET_BUILD_VARIANT)))
第二种方法. 修改adb.c 中开启root 权限的判断逻辑。这里针对4.1 以后版本 和4.1以前版本有所区别。
(1).如果是JB 4.1 以后版本,直接修改函数should_drop_privileges() 函数, 清空这个函数,直接返回 0 即可。返回0 即开启root 权限。 (2).如果是JB 4.1 以前版本,直接修改函数adb_main 函数,在
/* don't listen on a port (default 5037) if running in secure mode */
/* don't run as root if we are running in secure mode */
if (secure) {
struct __user_cap_header_
struct __user_cap_data_ if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0) {
在这段代码前加一行: secure = 0; //mtk71029 add for root forever. /* don't listen on a port (default 5037) if running in secure mode */
/* don't run as root if we are running in secure mode */
if (secure) {
struct __user_cap_header_
struct __user_cap_data_ if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) != 0) {
[测试与确认]
当修改完成后,只需要重新build bootimage ,然后download 即可,然后到setting 中开启debug 选项,adb 连接后,会显示 #, 即root 成功。 如果贵司没有拿到adb 的source, 而贵司又需要自己修改adb 的话, 那么就麻烦贵司提交eService。由我司进一步协助贵司处理。
JB 版本后user build + eng bootimage 无法开机
如何打开user debug选项
JB 4.2 user 版本的开发选项不见了,如何打开adb debug6025人阅读
Android(52)
build.prop是所有安卓手机都有的一些配置信息。
位置在system/build.prop
我们了解了这些配置的意义后,可以通过root后对这个配置文件做一定的修改,达到不同的自定义效果,如:更改dpi、更改版本号、更改网络首选项等等。
*注意:有些厂商的定制系统修改了一些原生的配置信息路径,也就是说对于部分OS来说,有些修改是不生效的。
这里以color 2.0为例详细说明每个属性:
# begin build oppo properties
# autogenerated by oppo_buildinfo.sh
ro.build.date.Ymd=150522(这里说的是编译时间)
ro.build.date.ymd=150522
ro.build.date.YmdHM=
ro.common.soft=MSM_14005(设备代号)
ro.product.model=R8107(机型名称)
ro.build.product=R8107(随便改)
ro.product.name=R8107
ro.product.device=R8107
ro.build.version.ota=R8107_11.A.10_010_150522(版本号)
ro.build.soft.majorversion=
ro.build.display.id=R522
ro.build.soft.version=A.10(更新版本号)
ro.xxversion=v0.5
ro.build.kernel.id=3.10.28-G
sys.foreground_process=android
ro.oppo.version=
persist.sys.timezone=Asia/Shanghai(时区(默认亚洲上海))
persist.sys.oppo.region=CN(OPPO地区中国版本)
persist.power.useautobrightadj=true
persist.sys.modem=yes
persist.sys.net=yes
persist.sys.assert.state=true
persist.sys.assert.panic=true
persist.sys.oppo.dump=1
persist.sys.cfu_auto=1
persist.oppo.ctsversion=false
ro.build.fingerprint=OPPO/R:4.4.4/KTU84P/:user/release-keys
ro.build.oppofingerprint=
# end build oppo properties
ro.rf_version=TDD_FDD_Ch_14005
ro.telephony.default_network=20(默认网络制式)
persist.sys.assert.state=false
persist.sys.assert.panic=false
persist.sys.oppo.dump=0
persist.sys.oem_smooth=1
ro.qualcomm.svi=0
persist.radio.lte_vrte_ltd=1
persist.sys.savetosdcard=cache
# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=KTU84P(安卓版本ID)
ro.build.display.id=KTU84P release-keys(代号)
ro.build.version.incremental=eng.root.(版本增量)
ro.build.version.sdk=19(SDK版本)
ro.build.version.codename=REL(版本代号)
ro.build.version.release=4.4.4(安卓版本号可以随便修改)
ro.build.date=Fri May 22 12:41:35 CST 2015(制作者的编译时间)
ro.build.date.utc=
ro.build.type=user
ro.build.user=root
ro.build.host=ubuntu
ro.build.tags=release-keys
ro.product.model=msm8916_32
ro.product.brand=OPPO(手机品牌随便改)
ro.product.name=msm8916_32
ro.product.device=msm8916_32
ro.product.board=msm8916
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu.abi2=armeabi
ro.product.manufacturer=OPPO
ro.product.locale.language=zh(默认语言)
ro.product.locale.region=CN(默认语言)
ro.wifi.channels=(wifi链接的渠道)
ro.board.platform=msm8916(CPU型号)
# ro.build. use ro.product.device
# Do not try to parse ro.build.desc ription or .fingerprint(不要试图修改desc ription或者fingerprint)
ro.build.desc ription=msm8916_32-user 4.4.4 KTU84P eng.root. release-keys(用户名的KEY)
ro.build.fingerprint=OPPO/msm8916_32/msm.4.4/KTU84P/eng.root.:user/release-keys
ro.build.characteristics=default
ro.build.version.opporom=V2.0.1(ColorOS版本 可以随便改)
ro.rom.different.version=ColorOS2.0.1
# end build properties(性能代码完毕)
# system.prop for msm8916(系统技术支持由MSM8916提供)
#rild.libpath=/system/lib/libreference-ril.so
rild.libpath=/system/vendor/lib/libril-qc-qmi-1.so
rild.libargs=-d /dev/smd0
persist.rild.nitz_plmn=
persist.rild.nitz_long_ons_0=
persist.rild.nitz_long_ons_1=
persist.rild.nitz_long_ons_2=
persist.rild.nitz_long_ons_3=
persist.rild.nitz_short_ons_0=
persist.rild.nitz_short_ons_1=
persist.rild.nitz_short_ons_2=
persist.rild.nitz_short_ons_3=
ril.subsc ription.types=NV,RUIM
DEVICE_PROVISIONED=1
# Start in cdma mode
ro.telephony.default_network=5(网络制式)
debug.sf.hw=1(硬件加速设定 0是关闭, 1是开启)
debug.egl.hw=1
position.type=c2d(hw运行模式)
persist.hwc.mdpcomp.enable=true
debug.mdpcomp.logs=0
#Enable translucent status bar feature
persist.hwc.ptor.enable=true
dalvik.vm.heapsize=36m(虚拟机大小)
dev.pm.dyn_samplingrate=1
persist.demo.hdmirotationlock=false
debug.sf.gpu_comp_tiling=1
#ro.hdmi.enable=true
#tunnel.decode=true
#tunnel.audiovideo.decode=true
#lpa.decode=false
#lpa.use-stagefright=true
#persist.speaker.prot.enable=false
# system props for the cne module
#ifndef VENDOR_EDIT
#, , modify for enable NSRM
#e.feature=1
e.feature=4
# system props for the dpm module
#ifndef VENDOR_EDIT
#, , Modify for Qcom chen yan provider modify&
#, , Modify for Qcom gaojiugang provider modify&
#persist.dpm.feature=0
#else /* VENDOR_EDIT */
#persist.dpm.feature=4
#persist.dpm.feature=7
#, , modify to 1 (FastDormancy),because DPM only implements FD feature in KK
persist.dpm.feature=1
#endif /* VENDOR_EDIT */
#system props for the MM modules
media.stagefright.enable-pla yer=true
media.stagefright.enable-http=true
media.stagefright.enable-aac=true
media.stagefright.enable-qcp=true
media.stagefright.enable-fma2dp=true
media.stagefright.enable-scan=true
media.swhevccodectype=0
media.hwhevccodectype=0
mmp.enable.3g2=true
mm.enable.smoothstreaming=true
mm.disable.sec_smoothstreaming=true
media.aac_51_output_enabled=true(这些全改为true会增强系统自带的多媒体效果)
#codecs:(PARSER_)AAC AC3 ASF AVI DTS 3G2 MP2TS QCP FLAC
mm.enable.qcom_parser=168563
# system props for the data modules
ro.use_data_netmgrd=true
persist.data.netmgrd.qos.enable=true
#system props for time-services
persist.timed.enable=true
# system prop for opengles version
# 196608 is decimal for 0x30000 to report version 3
ro.opengles.version=196608
# System property for cabl
#ifdnef VENDOR_EDIT
#Xiaori.Yuan&Phone Software Dept.Driver, &&shutdown cabl
#ro.qualcomm.cabl=2
ro.qualcomm.cabl=0
# System props for telephony
# System prop to turn on CdmaLTEPhone always
telephony.lteOnCdmaDevice=1
persist.omh.enabled=false
# System props for bluetooh
# System prop to turn on hfp client
#ifdef VENDOR_EDIT
Modify for Close HFP Client
bluetooth.hfp.client=0
bluetooth.a2dp.sink.enabled=false
#bluetooth.hfp.client=1
#Simulate sdcard on /data/media
persist.fuse_sdcard=true
#snapdragon value add features&
ro.qc.sdk.audio.ssr=false
##fluencetype can be &fluence& or &fluencepro& or &none&
ro.qc.sdk.audio.fluencetype=none
persist.audio.fluence.voicecall=true
persist.audio.fluence.voicerec=false
persist.audio.fluence.speaker=true
#Set for msm8916
tunnel.audio.encode = false
#Buffer size in kbytes for compress offload playback
audio.offload.buffer.size.kb=32
#use VERY_HIGH_QUALITY for audio resampler
af.resampler.quality=4
#Enable offload audio video playback by default
av.offload.enable=false
#enable voice path for PCM VoIP by default
use.voice.path.for.pcm.voip=true
#System property for FM transmitter
ro.fm.transmitter=false
#enable dsp gapless mode by default
audio.offload.gapless.enabled=true
#Audio voice concurrency related flags
voice.playback.conc.disabled=true
voice.record.conc.disabled=true
voice.voip.conc.disabled=true
#Set composition for USB
#ifndef VENDOR_EDIT
#, , Remove for we don't need initialize persist.sys.usb.config
#persist.sys.usb.config=diag,serial_smd,rmnet_bam,adb
#endif /* VENDOR_EDIT */
# set max starting background services
ro.config.max_starting_bg=8 (设置最大启动后台服务为8个)
#property to enable user to access Google WFD settings
persist.debug.wfd.enable=1允许用户访问谷歌WFD的设置属性
#propery to enable VDS WFD solution
persist.hwc.enable_vds=1 能使VDS WFD的解决方案
#property to enable narrow search range for video encoding
vidc.enc.narrow.searchrange=1
(视频编码属性)
#ifdef VENDOR_EDIT
#Xiaori.Yuan@Mobile Phone Software Dept.Driver, &&Add for 14005 performance&
sys.hwc.gpu_perf_mode=1(性能调节)
#endif /* VENDOR_EDIT */
#hwui properties
#ro.hwui.texture_cache_size=72
ro.hwui.la yer_cache_size=48
ro.hwui.r_buffer_cache_size=8
ro.hwui.path_cache_size=32
ro.hwui.gradient_cache_size=1
ro.hwui.drop_shadow_cache_size=6
ro.hwui.texture_cache_flushrate=0.4
ro.hwui.text_small_cache_width=1024
ro.hwui.text_small_cache_height=1024
ro.hwui.text_large_cache_width=2048
ro.hwui.text_large_cache_height=1024
# ADDITIONAL_BUILD_PROPERTIES(其他性能设置)
dalvik.vm.heapminfree=4m
dalvik.vm.heapstartsize=12m
keyguard.no_require_sim=true(操作手机是否需要sim卡)
ro.com.android.dataroaming=false(漫游设置)
ro.com.android.dateformat=MM-dd-yyyy
ro.config.alarm_alert=alarm_005.ogg(默认提示铃声)
ro.config.ringtone=ringtone_001.ogg(默认电话铃声)
ro.config.ringtone_sim2=ringtone_005.ogg(默认卡2电话铃声)
ro.config.notification_sound=notification_001.ogg(默认短信通知铃声)
ro.config.notification_sim2=notification_009.ogg(默卡2短信通知铃声认铃声)铃声修改目录在system/media/audio
ro.carrier=unknown
ro.oppo.theme.version=701(主题版本号)
ro.vendor.extension_library=/vendor/lib/libqc-opt.so
persist.radio.apm_sim_not_pwdn=1
dalvik.vm.heapgrowthlimit=192m
dalvik.vm.heapsize=512m
dalvik.vm.heaptargetutilization=0.75
dalvik.vm.heapmaxfree=8m
drm.service.enabled=true
persist.sys.dalvik.vm.lib=libdvm.so
net.bt.name=Android
dalvik.vm.stack-trace-file=/data/anr/traces.txt
persist.gps.qc_nlp_in_use=1(打开)
persist.loc.nlp_name=com.qualcomm.services.location
ro.gps.agps_provider=1(默认打开定位)
ro.pip.gated=0
ro.secure=0 默认开启未知源APK&
ro.allow.mock.location=1 开启模拟位置&
ro.debuggable=1&
persist.service.adb.enable=1 默认打开USB调试
优化 Build.prop 教程:
1.更好的录像.照相优化(根据不同手机,修改不同的尺寸及fps等等)
ro.media.capture.maxres=8m
ro.media.capture.fast.fps=4
ro.media.capture.slow.fps=120
ro.media.panorama.defres=
ro.media.panorama.fr ameres=
ro.camcorder.videoModes=true&
2.wifi速度优化
net.ipv4.tcp_ecn=0
net.ipv4.route.flush=1
net.ipv4.tcp_rfc1337=1
net.ipv4.ip_no_pmtu_disc=0
net.ipv4.tcp_sack=1
net.ipv4.tcp_fack=1
net.ipv4.tcp_window_scaling=1net.ipv4.tcp_times tamps=1net.ipv4.tcp_rmem= 187000
net.ipv4.tcp_wmem= 187000
net.ipv4.tcp_mem=000 187000
net.ipv4.tcp_no_metrics_save=1
net.ipv4.tcp_moderate_rcvbuf=1
3.提高jpg质量100%
ro.media.enc.jpeg.quality=100
4.渲染GPU的UI
debug.sf.hw=15.拨号时间减少
ro.telephony.call_ring.delay=0
6.提高滚动反映
windowsmgr.max_events_per_sec=150
7.电池优化
wifi.supplicant_scan_interval=180
pm.sleep_mode=1
ro.ril.disable.power.collapse=0
8.提高整体触摸反应
debug.performance.tuning=1
video.accelerate.hw=1
9.网络调整
ro.ril.hsxpa=2
ro.ril.gprsclass=12
ro.ril.hep=1
ro.ril.hsdpa.category=10
ro.ril.enable.3g.prefix=1
ro.ril.htcmaskw1.bitmask=
ro.ril.htcmaskw1=14449
ro.ril.hsupa.category=6
ro.ril.def.agps.mode=2
ro.ril.def.agps.feature=1
ro.ril.enable.sdr=1
ro.ril.enable.gea3=1
ro.ril.enable.fd.plmn.prefix=,23411
ro.ril.enable.a52=1
ro.ril.enable.a53=1
ro.ril.enable.dtm=1
10.网络速度调整
net.tcp.buffersize.default=,6,
net.tcp.buffersize.wifi=,6,
net.tcp.buffersize.umts=,6,
net.tcp.buffersize.gprs=,6,
net.tcp.buffersize.edge=,6,
11.修复通话结束后黑屏问题
ro.lge.proximity.delay=25
mot.proximity.delay=25
12.修复一些应用问题
ro.kernel.android.checkjni=0
14.禁用开机动画
debug.sf.nobootanimation=1
15.使用Stagefright让视频和音乐更快
media.stagefright.enable-pla yer=true
media.stagefright.enable-me ta=true
media.stagefright.enable-scan=true
media.stagefright.enable-http=true
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:40228次
排名:千里之外
原创:20篇
转载:42篇
(7)(2)(1)(3)(1)(1)(5)(1)(12)(10)(11)(4)(3)Android属性系统简介 - 屌丝迷途 - 博客园
  1、简介
  在android&系统中,为统一管理系统的属性,设计了一个统一的属性系统。每个属性都有一个名称和值,他们都是字符串格式。属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以get/set属性。在编译的过程中会将各种系统参数汇总到build.proc&以及default.proc&这两个文件中,主要属性集中在build.proc中。系统在开机后将读取配置信息并构建共享缓冲区,加快查询速度。另外一个方面,SettingsProvider会在系统第一次初始化时(刷机第一次启动)后,将从Defaults.xml中读取数据然后写入数据库Settings.db&目录。并构建一个缓冲系统供其他应用查询。下面将详细讲述。
  2、Properties Type
  系统属性根据不同的应用类型,分为不可变型,持久型,网络型,启动和停止服务等。
&  特别属性:
  属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。
  属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。
  属性名称以“net.”开头,当设置这个属性时,“net.change”属性将会自动设置,以加入到最后修改的属性名。(这是很巧妙的。&netresolve模块的使用这个属性来追踪在net.*属性上的任何变化。)
  属性“ ctrl.start ”和“ ctrl.stop ”是用来启动和停止服务。每一项服务必须在/init.rc中定义.系统启动时,与init守护进程将解析init.rc和启动属性服务。一旦收到设置“ ctrl.start ”属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。这项服务的启动结果将会放入“ init.svc.&服务名&“属性中&。客户端应用程序可以轮询那个属性值,以确定结果。
  3、Android toolbox
  Android toolbox程序提供了两个工具:&setprop和getprop获取和设置属性。其使用方法:
  getprop &属性名&
  setprop &属性名& &属性值&
  在Java应用程序可以使用System.getProperty()和System.setProperty()函数获取和设置属性。
  Action
  默认情况下,设置属性只会使"init"守护程序写入共享内存,它不会执行任何脚本或二进制程序。但是,您可以将您的想要的实现的操作与init.rc中某个属性的变化相关联.例如,在默认的init.rc中有:
# adbd on at boot in emulator
on property:ro.kernel.qemu=1
start adbd
on property:persist.service.adb.enable=1
start adbd
on property:persist.service.adb.enable=0
  4、Properties Source
  原则上,属性的设置可以出现在make android的任何环节。目前Properties&的设置以oppo版本为例:
  alps\build\target\board\generic_arm64\
system.prop
  alps\build\target\product\core.mk
  alps\build\tools\buildinfo.sh
  编译好后,被设置的系统属性主要存放在:
  这样,如果你设置persist.service.adb.enable为1&,"init"守护程序就知道需要采取行动:开启adbd服务。
default.prop&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&手机厂商自己定制使用
  \system\build.prop
& & & & & & & & & & &
& & & & & & & & & & &
&&系统属性主要存放处
& \system\default.prop & & & & & & &
& & & & & & & & & & &
& & & & default properties,&有存放与security&相关的属性
\data\local.prop&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&目前还没有看到有内置的情况
& &\data\property下有4个prop文&件:persist.sys.timezone, persist.sys.language, persist.sys.country,
persist.sys.localevar,&里面保存着属性名称以“persist.”开头的属性值。用户的persist&开头的属性都会保存副本在这个目录下
  5、Properties Run
    5.1&&&&Properties
  在linux kernel&启动时,Android将分配一个共享内存区来存储的属性。这些是由“init”守护进程完成的,其源代码位于:system/core/init。“init”守护进程将启动一个属性服务。属性服务在“init”守护进程中运行。每一个客户端想要设置属性时,必须连接属性服务,再向其发送信息。属性服务将会在共享内存区中修改和创建属性。客户端想获得属性信息,可以从共享内存直接读取。这提高了读取性能。
  客户端应用程序可以调用libcutils中的API函数以GET/SET属性信息。libcutils的源代码位于:system/core/ibcutils。获取和设置属性的代码在properties.c里面,读取属性通过读共享内存得到,设置属性通过发送请求到property_service进行设置。API函数是:
int property_get(const char *key, char *value, const char *default_value);
int property_set(const char *key, const char *value);
int property_list(void(*propfn)(const char * key, const char * value, void * cookie), void * cookie);
system/core/init. c= & main( ) 进程将调用
= & property_init
= & init_property_area
void property_init( void ) {
//ashmem_area - android shared memory area是android共享内容存的一种方式
//打开ashmem设备,申请一段size大小的kernel空间内存,不去释放,以便供所有用户空间进程共享.
//内核驱动位于linux/mm/ashmem.c文件[luther.gliethttp].
init_property_area( ) ;
//#define PROP_PATH_RAMDISK_DEFAULT "/default.prop"
//从ramdisk中读取default.prop文件,将文件中的所有java环境中使用到的propt释放到
//这个共享内存中.
load_properties_from_file( PROP_PATH_RAMDISK_DEFAULT) ;
  后面将调用properties_service.c,&启动最原始的properties service.
  然后通过libc_init_common. c,&的__system_properties_init函数完成内核的初始化工作。
  5.2、属性的访问
如果在C/C++&层次,则可以使用libcutils&的下列函数来访问。
int property_get(const char *key, char *value, const char *default_value);
int property_set(const char *key, const char *value);
int property_list(void(*propfn)(const char * key, const char * value, void * cookie), void * cookie);
  如果在Java&层次,则可以使用System.getProperties/setProperties.&该方法(set/get)实际将调用SystemProperties.java&进行访问,而SystemProperties.java&通过jni&调用libcutils进行访问。
&&  5.3、Enlarge System Property
  Android Default System Property&默认是可以存储247笔&properties.&但因为我司有大量的数据被写入到这个system property&中,导致容易出现system property mmap&到kernel ashmem中的缓存ashmem&溢出。一方面需要确认数据是否确实有必要写入System property,&另外一方面,可以扩大缓存的区间。
缓存区间可以分成两大部分(byte), Info Area , Array Area. Info Area&又分成Header&和&Name Mapping Area.
8 Header *4
Every Property Name Mapping * 4
Every Value row and the max length is 127
因为,给出固定的最大笔数N.&缓存定义上要求
#define PA_COUNT_MAX
#define PA_INFO_START
((8+PA_COUNT_MAX) * 4) 最好保证这个值为32的整数倍
#define PA_SZE
(PA_INFO_START + (128 * PA_COUNT_MAX))
  &5.4、控制属性
  在system properties&中提供两个特殊的key,
ctl.start&和&ctl.stop&来启动和关闭服务。
其API&描述是:
SystemProperties.set(“ctl.start”,serviceName);
SystemProperties.set(“ctl.stop”,serviceName);
注意的是,这个serviceName&可在init.rc&中查询
  5.5、Init&属性
  Init&属性是System properties&中的一种特殊的属性,由init.c&定义,init&会监控定义在init.rc&中的服务,并定义init.svc.xxxx&的System properties.
具体实现,可参考init.c&中的notify_service_state&函数。
我们除了直接ps&来查看这些进程信息外,还可以直接通过查看system
properties&来确认这些服务的状态,如
[init.svc.bootlogoupdater]: [stopped]
[init.svc.pvrsrvinit]: [stopped]
[init.svc.servicemanager]: [running]
[init.svc.vold]: [running]
[init.svc.netd]: [running]
[init.svc.netdiag]: [running]
[init.svc.hald]: [running]
[init.svc.debuggerd]: [running]
[init.svc.zygote]: [running]
[init.svc.drmserver]: [running]
[init.svc.media]: [running]
[init.svc.dbus]: [running]
[init.svc.installd]: [running]
[init.svc.keystore]: [running]
[init.svc.console]: [running]
[init.svc.adbd]: [running]
[init.svc.ril-daemon]: [running]
  5.6&、属性安全性
作为一个共享的缓存系统,并非任何AP&都可以随意去修改其中的属性,针对这些属性,如果进行更改时,会有UID上的约束。
/* White list of permissions for setting property services. */
const char *
unsigned int
unsigned int
} property_perms[] = {
{ "net.rmnet0.",
AID_RADIO,
<span style="color: # },
{ "net.gprs.",
AID_RADIO,
<span style="color: # },
{ "net.ppp",
AID_RADIO,
<span style="color: # },
{ "net.qmi",
AID_RADIO,
<span style="color: # },
{ "net.lte",
AID_RADIO,
<span style="color: # },
{ "net.cdma",
AID_RADIO,
<span style="color: # },
AID_RADIO,
<span style="color: # },
AID_RADIO,
<span style="color: # },
{ "persist.radio",
AID_RADIO,
<span style="color: # },
{ "net.dns",
AID_RADIO,
<span style="color: # },
{ "sys.usb.config",
AID_RADIO,
<span style="color: # },
AID_SYSTEM,
<span style="color: # },
AID_SYSTEM,
<span style="color: # },
{ "runtime.",
AID_SYSTEM,
<span style="color: # },
AID_SYSTEM,
<span style="color: # },
AID_SYSTEM,
<span style="color: # },
{ "sys.powerctl",
AID_SHELL,
<span style="color: # },
{ "service.",
AID_SYSTEM,
<span style="color: # },
{ "wlan.",
AID_SYSTEM,
<span style="color: # },
<span style="color: # },
{ "bluetooth.",
AID_BLUETOOTH,
<span style="color: # },
{ "dhcp.",
AID_SYSTEM,
<span style="color: # },
{ "dhcp.",
<span style="color: # },
{ "debug.",
AID_SYSTEM,
<span style="color: # },
{ "debug.",
AID_SHELL,
<span style="color: # },
AID_SHELL,
<span style="color: # },
{ "service.adb.root", AID_SHELL,
<span style="color: # },
{ "service.adb.tcp.port", AID_SHELL,
<span style="color: # },
{ "persist.logd.size",AID_SYSTEM,
<span style="color: # },
{ "persist.sys.",
AID_SYSTEM,
<span style="color: # },
{ "persist.service.", AID_SYSTEM,
<span style="color: # },
{ "persist.security.", AID_SYSTEM,
<span style="color: # },
{ "persist.gps.",
<span style="color: # },
{ "persist.service.bdroid.", AID_BLUETOOTH,
<span style="color: # },
{ "selinux."
, AID_SYSTEM,
<span style="color: # },
{ "wc_transport.",
AID_BLUETOOTH,
AID_SYSTEM },
{ "build.fingerprint", AID_SYSTEM,
<span style="color: # },
{ "partition."
, AID_SYSTEM,
<span style="color: #},
#ifdef DOLBY_UDC
{ "dolby.audio",
AID_MEDIA,
<span style="color: # },
#endif // DOLBY_UDC
#ifdef DOLBY_DAP
// used for setting Dolby specific properties
{ "dolby.", AID_SYSTEM,
<span style="color: # },
#endif // DOLBY_DAP
{ "sys.audio.init",
AID_MEDIA,
<span style="color: # },
{ NULL, <span style="color: #, <span style="color: # }
具体的UID&映射为:
#define AID_RADIO
/* telephony subsystem, RIL */
#define AID_BLUETOOTH
/* bluetooth subsystem */
#define AID_GRAPHICS
/* graphics devices */
#define AID_INPUT
/* input devices */
#define AID_AUDIO
/* audio devices */
#define AID_CAMERA
/* camera devices */
#define AID_LOG
/* log devices */
#define AID_COMPASS
/* compass device */
#define AID_MOUNT
/* mountd socket */
#define AID_WIFI
/* wifi subsystem */
#define AID_ADB
/* android debug bridge (adbd) */
#define AID_INSTALL
/* group for installing packages */
#define AID_MEDIA
/* mediaserver process */
#define AID_DHCP
/* dhcp client */
#define AID_SDCARD_RW
/* external storage write access */
#define AID_VPN
/* vpn system */
#define AID_KEYSTORE
/* keystore subsystem */
#define AID_USB
/* USB devices */
#define AID_DRM
/* DRM server */
#define AID_MDNSR
/* MulticastDNSResponder (service discovery) */
#define AID_GPS
/* GPS daemon */
#define AID_UNUSED1
/* deprecated, DO NOT USE */
#define AID_MEDIA_RW
/* internal media storage write access */
#define AID_MTP
/* MTP USB driver access */
#define AID_UNUSED2
/* deprecated, DO NOT USE */
#define AID_DRMRPC
/* group for drm rpc */
#define AID_NFC
/* nfc subsystem */
#define AID_SDCARD_R
/* external storage read access */
#define AID_CLAT
/* clat part of nat464 */
#define AID_LOOP_RADIO
/* loop radio devices */
#define AID_MEDIA_DRM
/* MediaDrm plugins */
#define AID_PACKAGE_INFO
/* access to installed package details */
#define AID_SDCARD_PICS
/* external storage photos access */
#define AID_SDCARD_AV
/* external storage audio/video access */
#define AID_SDCARD_ALL
/* access all users external storage */
#define AID_LOGD
/* log daemon */
#define AID_SHARED_RELRO
/* creator of shared GNU RELRO files */
即如persist.sys&开头的属性,只能有system user(包括root)&进行修改,其他用户无法进行修改。
这个user id&表定义在\system\core\init\property_service.c和&\system\core\include\private\android_filesystem_config.h&文件中
  6、Setting Provider
  在android framework&中还定义了Setting
Provider&来对一些比较通用的数据进行初始化,并将数据写入Settings.db.&&其中直接在Setting Provider&中被初始化的属性写在defaults.xml中:
&resources&
&bool name="def_dim_screen"&true&/bool&
&integer name="def_screen_off_timeout"&60000&/integer&
&bool name="def_airplane_mode_on"&false&/bool&
&!-- Comma-separated list of bluetooth, wifi, and cell. --&
&string name="def_airplane_mode_radios" translatable="false"&cell,bluetooth,wifi&/string&
&string name="airplane_mode_toggleable_radios" translatable="false"&wifi&/string&
&bool name="def_auto_time"&true&/bool&
&bool name="def_accelerometer_rotation"&true&/bool&
&!-- Default screen brightness, from 0 to 255.
102 is 40%. --&
&integer name="def_screen_brightness"&102&/integer&
&bool name="def_screen_brightness_automatic_mode"&false&/bool&
&fraction name="def_window_animation_scale"&0%&/fraction&
&fraction name="def_window_transition_scale"&0%&/fraction&
&bool name="def_haptic_feedback"&true&/bool&
&bool name="def_bluetooth_on"&false&/bool&
&bool name="def_install_non_market_apps"&false&/bool&
&!-- Comma-separated list of location providers.
Network location is off by default because it requires
user opt-in via Setup Wizard or Settings.
&string name="def_location_providers_allowed" translatable="false"&gps&/string&
&bool name="assisted_gps_enabled"&true&/bool&
0 == mobile, 1 == wifi. --&
&integer name="def_network_preference"&1&/integer&
&bool name="def_usb_mass_storage_enabled"&true&/bool&
&bool name="def_wifi_on"&false&/bool&
&bool name="def_networks_available_notification_on"&true&/bool&
&bool name="def_backup_enabled"&false&/bool&
&string name="def_backup_transport" translatable="false"&&/string&
&!-- Default value for whether or not to pulse the notification LED when there is a
pending notification --&
&bool name="def_notification_pulse"&true&/bool&
&bool name="def_mount_play_notification_snd"&true&/bool&
&bool name="def_mount_ums_autostart"&false&/bool&
&bool name="def_mount_ums_prompt"&true&/bool&
&bool name="def_mount_ums_notify_enabled"&true&/bool&
&!-- user interface sound effects --&
&integer name="def_power_sounds_enabled"&1&/integer&
&string name="def_low_battery_sound" translatable="false"&
/system/media/audio/ui/LowBattery.ogg
&integer name="def_dock_sounds_enabled"&0&/integer&
&string name="def_desk_dock_sound" translatable="false"&
/system/media/audio/ui/Dock.ogg
&string name="def_desk_undock_sound" translatable="false"&
/system/media/audio/ui/Undock.ogg
&string name="def_car_dock_sound" translatable="false"&
/system/media/audio/ui/Dock.ogg
&string name="def_car_undock_sound" translatable="false"&
/system/media/audio/ui/Undock.ogg
&integer name="def_lockscreen_sounds_enabled"&0&/integer&
&string name="def_lock_sound" translatable="false"&
/system/media/audio/ui/Lock.ogg
&string name="def_unlock_sound" translatable="false"&
/system/media/audio/ui/Unlock.ogg
&!-- Default for Settings.System.VIBRATE_IN_SILENT --&
&bool name="def_vibrate_in_silent"&true&/bool&
&/resources&
  SettingsProvider&将通过DatabaseHelper&将这些数据读入Settings.db,&同时SettingsProvider作为控制Settings.db的Provider&,所有对该数据库的操作都要通过它来进行。
其他具体的属性的描述都在Settings.java&这个类中描述。
Settings&为提高访问的效率,建立了cache,&只有当cache&中找不到时,才会调用SettingsProvider去查询Settings.db&数据库。
具体的Setiings.db&中包括的数据库表有:
关键的system表中的数据有:
一般通过修改defaults.xml&和&make&中的配置文件即可。
  7&、About Phone Properties.
About Phone中的一些关键属性通过buildinfo.sh&来焊接(make - build),&经过测试,可修改alps\build\tools\buildinfo.sh&来修改显示的情况,整理一下如下:
修改echo "ro.build.display.id=$BUILD_DISPLAY_ID",&把 $BUILD_DISPLAY_ID 修改成其他的名称可改变 Build Nubmer. 注意此时要去除$.
修改echo "ro.product.model=$PRODUCT_MODEL",&&&把&& $PRODUCT_MODEL 修改成其他的名称可改变 Model Nubmer.&&&注意此时要去除$
修改echo &"ro.build.version.release=2.1" ,&中的2.1 可改变显示的Firmware version,&这个不建议修改。
Version&直接写在&modem.img&中,开机后modem&自动推送到Android端,需要专门的tool&才能修改。
Version&为linux&编译过程中产生,&按照标准的linux格式生成(compile.h),&最后版本信息写在文件/proc/version&下,所有的版本信息即在该文件的第一行,然后使用了一个正则表达式过滤了版本信息中一些字符。
  8、About USER Build and Eng Build
  在User &-& Eng&版本中自由切换。
郑重声明:&&在出厂正式版本的时候,请务必关闭该feature,&不然将导致机器异常容易被root.
  1.&首先说明一下User Eng&版本之间的差异
eng This is the
default flavor. A plain make is the same as make eng.
Installs modules tagged with: eng, debug, user, and/or development.
Installs non-APK modules that have no tags specified.
Installs APKs according to the product definition files, in addition to tagged
ro.secure=0
ro.debuggable=1
ro.kernel.android.checkjni=1
adb is enabled by default.
Setupwizard is optional
user make user
This is the flavor
intended to be the final release bits.
Installs modules tagged with user.
Installs non-APK modules that have no tags specified.
Installs APKs according to the prod tags are ignored for
APK modules.
ro.secure=1
ro.debuggable=0
adb is disabled by default.
Enable dex pre-optimization for all TARGET projects in default to speed up
device first boot-up
userdebug make
The same as user,
Also installs modules tagged with debug.
ro.debuggable=1
adb is enabled by default.&
  2.&从安全角度来将,其差别主要是四个system properties&的设置,在正常情况下,如果不更新boot image,&那么
& ro.secure
ro.allow.mock.location
ro.debuggable
&&是无法被修改的,即在编译的时候就已经决定了
  3.&要使得这几个值能够被修改,那么必须修改system properties&的实现,system properties&的实现上,driver&是ashmem,&上次实现是property_service.c,&需要修改的地方有两处。
check_perms&函数中,增加下面一段,放在这个函数的最前面
//add for user -& root
if(!strcmp(name,"ro.secure") || !strcmp(name,"ro.allow.mock.location")
|| !strcmp(name,"ro.debuggable") ||
!strcmp(name,"persist.service.adb.enable")){
&& return 1;
property_set&函数中屏蔽
/* ro.* properties may NEVER be modified once set */
&&&&&&&&&&
//for user -& root
// if(!strncmp(name, "ro.", 3)) return -1;
& &至此,我们已经完全开放了property&中这四个property&的控制权,&当然如果您还想稍微加以控制,您可以增加pid, uid&等的控制,减小这个权限范围。&
  4.&编写一个Application,&来实现自由调控,您可以创建一个简单的Application,&里面包括这个Activity&即可。
package com.example.user2
import android.app.A
import android.os.B
import android.os.SystemP
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.T
* This is a demo for User To Root.
* If you use this app, you MUST open system properties write security.
public class User2rootActivity extends Activity {
/** Called when the activity is first created. */
private Button mRootB
private Button mUserB
private static final String RO_SECURE = "ro.secure";
private static final String RO_ALLOW_MOCK_LOCATION="ro.allow.mock.location";
private static final String RO_DEBUG = "ro.debuggable";
private static final String ADB_ENABLE = "persist.service.adb.enable";
private OnClickListener mRootListener = new Button.OnClickListener(){
public void onClick(View v) {
SystemProperties.set(ADB_ENABLE, "1");
SystemProperties.set(RO_SECURE, "0");
SystemProperties.set(RO_ALLOW_MOCK_LOCATION,"1" );
SystemProperties.set(RO_DEBUG, "1");
Toast.makeText(User2rootActivity.this, "Update to Root Success", Toast.LENGTH_LONG).show();
private OnClickListener mUserListener = new Button.OnClickListener(){
public void onClick(View v) {
SystemProperties.set(ADB_ENABLE, "0");
SystemProperties.set(RO_SECURE, "1");
SystemProperties.set(RO_ALLOW_MOCK_LOCATION,"0" );
SystemProperties.set(RO_DEBUG, "0");
Toast.makeText(User2rootActivity.this, "Update to User Success", Toast.LENGTH_LONG).show();
protected void findViews(){
this.mRootButton = (Button) this.findViewById(R.id.root);
this.mUserButton = (Button) this.findViewById(R.id.user);
protected void setActionListener() {
this.mRootButton.setOnClickListener(this.mRootListener);
this.mUserButton.setOnClickListener(this.mUserListener);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.findViews();
this.setActionListener();
至此已经完成了全部的工作,把这个apk&编译进去后,您将发现您可以自由的切换user eng&了。
随笔 - 137

我要回帖

更多关于 ro.debuggable 修改 的文章

 

随机推荐