android note
来源:互联网 发布:linux经典书籍推荐 编辑:程序博客网 时间:2024/05/16 05:34
1.重要的property属性
#define ANDROID_RB_PROPERTY "sys.powerctl" // 控制启动状态 property_set(ANDROID_RB_PROPERTY, "shutdown,"); property_set(ANDROID_RB_PROPERTY, "reboot,bootloader"); property_set(ANDROID_RB_PROPERTY, "reboot,"); property_set(ANDROID_RB_PROPERTY, "reboot,edl");
2.propety属性的管理
init.c
if (is_charger) { action_for_each_trigger("charger", action_add_queue_tail); } else { if (is_ffbm) { action_for_each_trigger("ffbm", action_add_queue_tail); } else { // 正常开机模式进入最后的 late-init 阶段 action_for_each_trigger("late-init", action_add_queue_tail); } }
init.rc
on late-init trigger load_all_props_action // 在late-init阶段加载所有的属性----------on load_all_props_action load_all_props
keywords.h property_service.c
KEYWORD(load_all_props, COMMAND, 0, do_load_all_props) //keywords.h -> do_load_all_props // builtins.c ->load_all_props // property_service.c // 依次从下面几个路径中加载所有的属性 "system/build.prop" (常用) "system/default.prop"
build/tools/buildinfo.sh
☆ 生成 system/build.prop 文件,需要添加prop只需要在这个编译脚本中添加即可!!!
in system/build.prop# begin build properties 3 # autogenerated by buildinfo.sh 4 ro.build.id=LMY47V 5 ro.build.display.id=LMY47V.WW_Phone.12.0.0.020-20160719_userdebug 6 ro.build.display.wtid=LMY47V.WW_Ph
3.属性值的获取设置
1. 在system.prop里面添加需要使用的系统属性,添加完后需要编译生成system.img2. 在native层,使用property_set(...)和property_get(...)来存取系统属性3. 在Java层, 使用SystemProperties.set(...)和SystemProperties.get(...)来存取系统属性4. 在adb shell命令行,使用getprop和setprop来存取系统属性
3.charger
# init.rcon charger class_start charger----------# init.qcom.rcservice charger /charger class charger----------#system/core/healthd/Android.mk LOCAL_MODULE := healthd...# Symlink /charger to /sbin/healthd
4.屏幕截图 & 屏幕录制
adb shell screencap /sdcard/test.pngadb shell screenrecord sdcard/sss.mp4
5.关闭selinux
setenforce 0
6.adb devices 串号
(1)init.rc
write /sys/class/android_usb/android0/iSerial ${ro.serialno}
(2)cat /pro/cmdline
adb root;adb shell cat /proc/cmdline
androidboot.serialno=YOGABOOK12
(3)init.cpp
process_kernel_cmdline ->import_kernel_cmdline(false, import_kernel_nv); ->import_kernel_nv---------- char *value = strchr(name, '='); (!strncmp(name, "androidboot.", 12) && name_len > 12) { char *boot_prop_name = name + 12; char prop[PROP_NAME_MAX]; snprintf(prop, sizeof(prop), "ro.boot.%s", boot_prop_name); property_set(prop, value); } ----------static void export_kernel_boot_props() { struct { const char *src_prop; const char *dst_prop; const char *default_value; } prop_map[] = { ... { "ro.boot.serialno", "ro.serialno", "", }, ... };
7.system/bin/input 命令
demo
input keyevent keycodeNum //4 表示KEYCODE_BACK
常用的几种事件:
//键值对应 android/keycodes.h26 --> KEYCODE_POWER // 电源 82 --> "KEYCODE_MENU" //菜单3 --> "KEYCODE_HOME" //返回home4 --> "KEYCODE_BACK" //返回上一级菜单19 --> "KEYCODE_DPAD_UP" //向上20 --> "KEYCODE_DPAD_DOWN" //向下21 --> "KEYCODE_DPAD_LEFT" //向左22 --> "KEYCODE_DPAD_RIGHT" //向右24 --> "KEYCODE_VOLUME_UP" //音量加25 --> "KEYCODE_VOLUME_DOWN" //音量减66 --> "KEYCODE_ENTER" //确定键
8. 重新挂载某个分区
mount -o remount,rw system system
9.命令行查看分辨率
frameworks/base/cmds/wm/
窗口分辨率
wm size
10.android init阶段 bootanimation之前的一张启动画面
// 在init.c中通过 “console_init” 这个action触发 queue_builtin_action(console_init_action, "console_init");
11.aplog
1.位置
/data/logs/aplog.ndata/local/log/aplog
2.crash信息
//logs\crashlog0_72612f74d4e263a53665\crashfile 中表明了crash原因EVENT=CRASHID=61c96fdba2162a052323SN=4cca94f595db403f749622792dfe73a6167ded48DATE=2016-10-08/08:09:56 UPTIME=0000:00:19BUILD=YB-Q501L_USR_S000014_1610010228_WW12_ROW,Lenovo/yogi_12_row_lte/YOGABOOK12:6.0.1/MMB29M/1610010228:user/release-keys,3.14.55-x86_64,queen@fyy-SMBIOSfyy,unknown,YOGI.T2000AH.V015,,,,BOARD=Lenovo YB-Q501LIMEI=TYPE=SWWDT_UNHANDLED // crash 类型 看门狗DATA_READY=1OPERATOR=UNKNOWNDATA0=SWWDT_RESET //_END----------EVENT=CRASHID=72612f74d4e263a53665SN=7f406c2f2e2675c73a5a85d52a237d80f747c2eaDATE=2016-10-07/21:23:08 UPTIME=0000:00:22BUILD=YB-Q501L_USR_S000014_1610010228_WW12_ROW,Lenovo/yogi_12_row_lte/YOGABOOK12:6.0.1/MMB29M/1610010228:user/release-keys,3.14.55-x86_64,queen@fyy-SMBIOSfyy,unknown,YOGI.T2000AH.V015,,,,BOARD=Lenovo YB-Q501LIMEI=TYPE=IPANIC // // crash 类型 kernel panicDATA_READY=1OPERATOR=UNKNOWN_END
3. ” BUG: “
搜索“ BUG: ”会有栈回溯或者null point信息
2.kernel启动信息/重启信息
beginning of kernel
10-07 21:22:46.780 0 0 I KERNEL : [ 0.000000] Initializing cgroup subsys cpuset
10-07 21:22:46.780 0 0 I KERNEL : [ 0.000000] Initializing cgroup subsys cpu
10-07 21:22:46.780 0 0 I KERNEL : [ 0.000000] Initializing cgroup subsys cpuacct
10-07 21:22:46.780 0 0 I KERNEL : [ 0.000000] Linux version 3.14.55-x86_64 (queen@fyy-SMBIOSfyy) (gcc version 4.9.2 (GCC) ) #1 SMP PREEMPT Sat Oct 1 03:04:35 CST 2016
10-07 21:22:46.780 0 0 I KERNEL : [ 0.000000] Command line: androidboot.bootloader=yogi_t2000ah_v015_kernelflinger-02_1f androidboot.diskbus=10.0 androidboot.verifiedbootstate=green androidboot.bootreason=kernel_panic androidboot.mode=0 :
12. 指定工程的 .config
KERNEL_DEFCONFIG
device/intel/cherrytrail/cht_ffd/AndroidBoard.mk
13. Android.mk中添加打印
$(warning "print info")
14.U盘插入拔出打印
1.mountservice 完整流程
MountService: Volume public:8,1 broadcasting checking to UserHandle{0} // 插入后检测挂载 MountService: Volume public:8,1 broadcasting mounted to UserHandle{0} MountService: Volume public:8,1 broadcasting ejecting to UserHandle{0} // 点击弹出umount MountService: Volume public:8,1 broadcasting unmounted to UserHandle{0} MountService: Volume public:8,1 broadcasting removed to UserHandle{0} // 拔出U盘
2.kernelU盘插入拔出kernel打印
usb 2-1: new SuperSpeed USB device number 2 using xhci_hcd // 插上 30375936 512-byte logical blocks: (15.5 GB/14.4 GiB) // 读取大小 USB disconnect, device number // 拔出
15.U盘插入拔出mount/umount代码流程
1.监听subsystem为block 的uevent事件
NetlinkHandler::onEvent VolumeManager::handleBlockEvent case add: Disk::create // disk.cpp disk::readMetadata(); disk::readPartitions(); notifyEvent(ResponseCode::DiskCreated, StringPrintf("%d", mFlags)); case chager: disk::readMetadata(); disk::readPartitions(); case remove: Disk::destroy() destroyAllVolumes(); notifyEvent(ResponseCode::DiskDestroyed);
2.发送广播
Disk::notifyEvent VolumeManager::Instance()->getBroadcaster()->sendBroadcast
3.mountService接收来着vold的广播
MountService.onEvent MountService.onEventLocked case VoldResponseCode.VOLUME_STATE_CHANGED: //每一次状态的改变都会调用这个分支 onVolumeStateChangedLocked(vol, oldState, newState); // 状态改变做相应操作 mHandler.obtainMessage(H_VOLUME_BROADCAST, userVol).sendToTarget(); // mountService发广播给mountService
3.mountService接收来着mountService的广播
MountServiceHandler.handleMessage //接收广播 case H_VOLUME_MOUNT: // 挂载 mConnector.execute("volume", "mount", vol.id, vol.mountFlags,vol.mountUserId); case H_VOLUME_BROADCAST: // 发送广播给用户告知状态 Slog.d(TAG, "Volume " + userVol.getId() + " broadcasting " + envState + " to "+ userVol.getOwner()); mContext.sendBroadcastAsUser(intent, userVol.getOwner());
16.查看android分区及dd命令烧写分区
#ls /dev/block/by-name/ android_boot android_bootloader android_bootloader2 android_cache android_config android_data android_factory android_metadata android_misc android_persistent android_recovery android_system----------push boot.img到及机子的任意目录,在此目录执行 ,dd if=boot.img of=/dev/block/by-name/android_boot,重启之后,boot.img烧写成功.其他分区也类似.
11.android 各层次获取时间的方法
1. 在Java层,long now = SystemClock.uptimeMillis();2. 在native层,nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);3. 在驱动层,s64 time = ktime_to_us(ktime_get());
- android note
- android note
- Android note
- android note
- android note
- android note
- android note
- Android build system note
- Android build system note
- Android build system note
- Android build system note
- Android build system note
- Android build system note
- Android build system note
- Android build system note
- Android build system note
- Android build system note
- Android build system note
- java字符串操作
- 雅虎网站性能优化-34条黄金守则
- VB6 Advanced Filter Function
- Android5.0+(NavigationView)
- 纯虚函数与纯虚类
- android note
- POJ 2752
- mysql远程登录及修改用户密码
- Pytyhon 爬虫-爬取阿里旅行特价机票信息(2)
- C#读取系统安装的字体的方法
- 关于Bootstrap(二)
- nodejs-express4.X框架路由中获取参数值方法
- JQuery各种点击事件的区别
- 神经网络读书笔记:《神经网络与机器学习/Simon Haykin》导言概念总结