在上篇博客中实例说明了在android系统下修改init.rc文件添加开机启动脚本,使用的on property:ro.debuggable,下面说一下原理。
在android系统中,有一些初始化的配置文件,例如:
/init.rc
/default.prop
/system/build.prop
文件里面里面配置了开机设置的系统属性值,
这些属性值,可以通过getprop获取,setprop设置,
它的格式如下:
getprop [key]:获取指定key的配置值,如果不带参数,只是getprop则是显示系统所有的配置值。
[dalvik.vm.heapsize]: [24m]
[curlockscreen]: [1]
[ro.sf.hwrotation]: [0]
[ro.config.notification_sound]: [OnTheHunt.ogg]
[ro.config.alarm_alert]: [Alarm_Classic.ogg]
setprop [key] [value]:设置指定key的属性值,
watchprops:监听系统属性的变化,如果期间系统的属性发生变化则把变化的值显示出来
/system # watchprops
1307501833 sys.settings_system_version = '37'
1307501836 sys.settings_system_version = '38'
1307501862 persist.sys.timezone = 'Asia/Hong_Kong'
其实这三个命令都是toolbox的子命令,如果有兴趣的可以看在android源码中看到其对应的源码:
system/core/toolbox/
一般而言,我们在串口中输入getprop指令,会出现很多类似键值对的系统变量值,例如:
-
#
-
# ADDITIONAL_DEFAULT_PROPERTIES
-
#
-
ro.secure=0
-
ro.allow.mock.location=1
-
ro.debuggable=1
-
persist.sys.usb.config=adb
-
root@android:/ # getprop
-
[dalvik.vm.dexopt-flags]: [m=y]
-
[dalvik.vm.heapgrowthlimit]: [64m]
-
[dalvik.vm.heapmaxfree]: [8m]
-
[dalvik.vm.heapminfree]: [512k]
-
[dalvik.vm.heapsize]: [384m]
-
[dalvik.vm.heapstartsize]: [8m]
-
[dalvik.vm.heaptargetutilization]: [0.75]
-
[dalvik.vm.jniopts]: [warnonly]
-
[dalvik.vm.stack-trace-file]: [/data/anr/traces.txt]
-
[dev.bootcomplete]: [1]
-
[drm.service.enabled]: [false]
-
[gsm.current.phone-type]: [2]
-
[gsm.operator.alpha]: []
-
[gsm.operator.iso-country]: []
-
[gsm.operator.isroaming]: [false]
-
[gsm.operator.numeric]: []
-
[gsm.sim.operator.alpha]: []
-
[gsm.sim.operator.iso-country]: []
-
[gsm.sim.operator.numeric]: []
-
[gsm.sim.state]: [NOT_READY]
-
[gsm.version.ril-impl]: [V100R005B003D30SP00C03]
-
[init.svc.bootanim]: [stopped]
-
[init.svc.console]: [running]
-
[init.svc.debuggerd]: [running]
-
[init.svc.drm]: [running]
-
[init.svc.drmservice]: [stopped]
-
[init.svc.installd]: [running]
-
[init.svc.keystore]: [running]
-
[init.svc.media]: [running]
-
[init.svc.netd]: [running]
-
[init.svc.read]: [stopped]
-
[init.svc.ril-daemon]: [running]
-
[init.svc.sdcard]: [stopped]
-
[init.svc.servicemanager]: [running]
-
[init.svc.surfaceflinger]: [running]
-
[init.svc.ueventd]: [running]
-
[init.svc.vold]: [running]
-
[init.svc.zygote]: [running]
-
[keyguard.no_require_sim]: [true]
-
[net.bt.name]: [Android]
-
[net.change]: [net.qtaguid_enabled]
-
[net.hostname]: [android-e7f44b61e326df24]
-
[net.qtaguid_enabled]: [1]
-
[net.tcp.buffersize.default]: [4096,87380,110208,4096,16384,110208]
-
[net.tcp.buffersize.edge]: [4093,26280,35040,4096,16384,35040]
-
[net.tcp.buffersize.evdo]: [4094,87380,262144,4096,16384,262144]
-
[net.tcp.buffersize.gprs]: [4092,8760,11680,4096,8760,11680]
-
[net.tcp.buffersize.hsdpa]: [4094,87380,262144,4096,16384,262144]
-
[net.tcp.buffersize.hspa]: [4094,87380,262144,4096,16384,262144]
-
[net.tcp.buffersize.hspap]: [4094,87380,1220608,4096,16384,1220608]
-
[net.tcp.buffersize.hsupa]: [4094,87380,262144,4096,16384,262144]
-
[net.tcp.buffersize.lte]: [524288,1048576,2097152,262144,524288,1048576]
-
[net.tcp.buffersize.umts]: [4094,87380,110208,4096,16384,110208]
-
[net.tcp.buffersize.wifi]: [524288,1048576,2097152,262144,524288,1048576]
-
[persist.service.bdroid.bdaddr]: [b0:99:8e:34:da:a9]
-
[persist.sys.country]: [US]
-
[persist.sys.language]: [en]
-
[persist.sys.localevar]: []
-
[persist.sys.profiler_ms]: [0]
-
[persist.sys.strictmode.visual]: [false]
-
[persist.sys.timezone]: [Atlantic/Azores]
-
[persist.sys.usb.config]: [mass_storage]
-
[ro.allow.mock.location]: [1]
-
[ro.ap_data_only]: [0]
-
[ro.ap_has_alsa]: [0]
-
[ro.ap_has_earphone]: [0]
-
[ro.ap_mdm]: [0]
-
[ro.baseband]: [unknown]
-
[ro.board.platform]: [rk3188]
-
[ro.boot.console]: [ttyFIQ0]
-
[ro.bootloader]: [unknown]
-
[ro.bootmode]: [unknown]
-
[ro.bt.bdaddr_path]: [/data/misc/bluetoothd/bt_addr]
-
[ro.build.characteristics]: [tablet]
-
[ro.build.date.utc]: [1442301840]
-
[ro.build.date]: [2015骞09鏈15鏃鏄熸湡浜15:24:00 CST]
-
[ro.build.description]: [rk30sdk-eng 4.2.2 WT04 root.20150915.151740 test-keys]
-
[ro.build.display.id]: [rk30sdk-eng 4.2.2 WT04 root.20150915.151740 test-keys]
-
[ro.build.fingerprint]: [rk30sdk/rk30sdk/rk30sdk:4.2.2/WT04/root.20150915.151740:eng/test-keys]
-
[ro.build.host]: [jonlu]
-
[ro.build.id]: [WT04]
-
[ro.build.product]: [rk30sdk]
-
[ro.build.tags]: [test-keys]
-
[ro.build.type]: [eng]
-
[ro.build.user]: [android]
-
[ro.build.version.codename]: [REL]
-
[ro.build.version.incremental]: [root.20150915.151740]
-
[ro.build.version.release]: [4.2.2]
-
[ro.build.version.sdk]: [17]
-
[ro.carrier]: [unknown]
-
[ro.com.android.dataroaming]: [true]
-
[ro.com.android.dateformat]: [MM-dd-yyyy]
-
[ro.config.alarm_alert]: [Alarm_Classic.ogg]
-
[ro.config.notification_sound]: [pixiedust.ogg]
-
[ro.config.ringtone]: [Ring_Synth_04.ogg]
-
[ro.debuggable]: [1]
-
[ro.default.size]: [100]
-
[ro.factory.storage_policy]: [0]
-
[ro.factory.tool]: [0]
-
[ro.factorytest]: [0]
-
[ro.hardware]: [rk30board]
-
[ro.kernel.android.checkjni]: [0]
-
[ro.opengles.version]: [131072]
-
[ro.product.board]: [rk30sdk]
-
[ro.product.brand]: [rk30sdk]
-
[ro.product.cpu.abi2]: [armeabi]
-
[ro.product.cpu.abi]: [armeabi-v7a]
-
[ro.product.device]: [rk30sdk]
-
[ro.product.locale.language]: [en]
-
[ro.product.locale.region]: [US]
-
[ro.product.manufacturer]: [rockchip]
-
[ro.product.model]: [WTA902]
-
[ro.product.name]: [rk30sdk]
-
[ro.product.ota.host]: [www.rockchip.com:2300]
-
[ro.product.usbfactory]: [rockchip_usb]
-
[ro.product.version]: [1.0.0]
-
[ro.revision]: [0]
-
[ro.ril.ecclist]: [112,911]
-
[ro.rk.MassStorage]: [false]
-
[ro.rk.bt_enable]: [true]
-
[ro.rk.cpu]: [rk3188]
-
[ro.rk.def_brightness]: [200]
-
[ro.rk.homepage_base]: [http://www.msn.com]
-
[ro.rk.install_non_market_apps]: [false]
-
[ro.rk.screenoff_time]: [-1]
-
[ro.rk.soc]: [rk3188+]
-
[ro.rk.systembar.tabletUI]: [true]
-
[ro.rk.systembar.voiceicon]: [false]
-
[ro.rksdk.version]: [RK31_ANDROID4.2.2-SDK-v1.04.00]
-
[ro.runtime.firstboot]: [1293883995626]
-
[ro.secure]: [0]
-
[ro.serialno]: []
-
[ro.sf.fakerotation]: [true]
-
[ro.sf.hwrotation]: [270]
-
[ro.sf.lcd_density]: [160]
-
[ro.sf.lcdc_composer]: [0]
-
[ro.sms.capable]: [false]
-
[ro.tether.denied]: [false]
-
[ro.voice.capable]: [false]
-
[ro.wifi.channels]: []
-
[service.bootanim.exit]: [1]
-
[sf.power.control]: [2073600]
-
[sim.contacts.enable]: [false]
-
[sys.boot_completed]: [1]
-
[sys.display.oritation]: [0]
-
[sys.dump]: [false]
-
[sys.ggralloc.version]: [1.000]
-
[sys.ghwc.version]: [1.023]
-
[sys.ghwui.version]: [1.005]
-
[sys.glibui.version]: [1.000]
-
[sys.gmali.cores]: [4]
-
[sys.gmali.savedinstance]: [384]
-
[sys.gmali.version]: [4X_13_16]
-
[sys.grga.version]: [1.002]
-
[sys.gsflg.version]: [1.001]
-
[sys.hwc.compose_policy]: [6]
-
[sys.launcher.drawer]: [0]
-
[sys.rkadb.root]: [0]
-
[sys.settings_global_version]: [4]
-
[sys.usb.config]: [mass_storage]
-
[sys.usb.state]: [mass_storage]
-
[sys.usb.umsavailible]: [true]
-
[sys.wallpaper.rgb565]: [0]
-
[sys.wfd.rotation]: [0]
-
[sys.yuv.rgb.format]: [1]
-
[sys_graphic.cam_hal.ver]: [0.4.23]
-
[system_init.startsurfaceflinger]: [0]
-
[testing.mediascanner.skiplist]: [/mnt/sdcard/Android/]
-
[wifi.interface]: [wlan0]
-
[wifi.supplicant_scan_interval]: [15]
这些都是系统值,然而这些都是都是底层创建的变量,例如在某个驱动程序中创建,但如果在java语言中想获得这些信息中的某个变量的值,怎么办呢?
1,在java中如何调用linux的指令,主要通过如下代码实现:
-
Runtime myrun = Runtime.getRuntime();
-
proc1 = myrun.exec("sh /system/bin/read.sh"); //要执行的指令
-
proc1.waitFor(); //等待执行结束
-
Log.d("wintec","---cmd_exe--ok-sh read.sh--"); //结束后输出提示信息
该段程序相当于在终端下执行:sh /system/bin/read.sh
所以上面说的三个命令也可以参照这种方法在android应用程序中执行。
阅读(2739) | 评论(0) | 转发(0) |