本文转载自:http://blog.csdn.net/u012719256/article/details/52094982

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"); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

init.rc

on late-inittrigger load_all_props_action  // 在late-init阶段加载所有的属性---------- on load_all_props_action load_all_props
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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" 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

build/tools/buildinfo.sh

☆ 生成 system/build.prop 文件,需要添加prop只需要在这个编译脚本中添加即可!!!

in system/build.prop# begin build properties3 # 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.属性值的获取设置

1. 在system.prop里面添加需要使用的系统属性,添加完后需要编译生成system.img2. 在native层,使用property_set(...)和property_get(...)来存取系统属性3. 在Java层, 使用SystemProperties.set(...)和SystemProperties.get(...)来存取系统属性 4. 在adb shell命令行,使用getprop和setprop来存取系统属性
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.charger

# init.rc
on chargerclass_start charger----------# init.qcom.rc
service charger /chargerclass charger----------#system/core/healthd/Android.mk LOCAL_MODULE := healthd
...
# Symlink /charger to /sbin/healthd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

4.屏幕截图 & 屏幕录制

adb shell screencap /sdcard/test.png
adb shell screenrecord  sdcard/sss.mp4
  • 1
  • 2

5.关闭selinux

setenforce 0
  • 1

6.adb devices 串号

(1)init.rc

 write /sys/class/android_usb/android0/iSerial ${ro.serialno} 
  • 1
  • 2
  • 3

(2)cat /pro/cmdline


adb root;adb shell cat /proc/cmdline

androidboot.serialno=YOGABOOK12 
  • 1

(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", "", }, ... };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

7.system/bin/input 命令

demo

 input keyevent   keycodeNum    //4 表示KEYCODE_BACK
  • 1

常用的几种事件:

//键值对应 android/keycodes.h
26 --> KEYCODE_POWER         // 电源
82 -->  "KEYCODE_MENU" //菜单 3 --> "KEYCODE_HOME" //返回home 4 --> "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" //确定键
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

8. 重新挂载某个分区

mount -o remount,rw system system
  • 1

9.命令行查看分辨率

frameworks/base/cmds/wm/

窗口分辨率

wm size


10.android init阶段 bootanimation之前的一张启动画面

// 在init.c中通过 “console_init” 这个action触发queue_builtin_action(console_init_action, "console_init");
  • 1
  • 2
  • 3

11.aplog

1.位置

/data/logs/aplog.n
data/local/log/aplog
  • 1
  • 2

2.crash信息

//logs\crashlog0_72612f74d4e263a53665\crashfile 中表明了crash原因EVENT=CRASH
ID=61c96fdba2162a052323
SN=4cca94f595db403f749622792dfe73a6167ded48
DATE=2016-10-08/08:09:56
UPTIME=0000:00:19 BUILD=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-Q501L IMEI= TYPE=SWWDT_UNHANDLED // crash 类型 看门狗 DATA_READY=1 OPERATOR=UNKNOWN DATA0=SWWDT_RESET // _END ---------- EVENT=CRASH ID=72612f74d4e263a53665 SN=7f406c2f2e2675c73a5a85d52a237d80f747c2ea DATE=2016-10-07/21:23:08 UPTIME=0000:00:22 BUILD=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-Q501L IMEI= TYPE=IPANIC // // crash 类型 kernel panic DATA_READY=1 OPERATOR=UNKNOWN _END 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

3. ” BUG: “

搜索“ BUG: ”会有栈回溯或者null point信息
  • 1

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")
  • 1

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盘 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12


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  // 拔出 
  • 1
  • 2
  • 3
  • 4

15.U盘插入拔出mount/umount代码流程

1.监听subsystem为block 的uevent事件

    NetlinkHandler::onEventVolumeManager::handleBlockEventcase 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); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

2.发送广播

    Disk::notifyEventVolumeManager::Instance()->getBroadcaster()->sendBroadcast 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.mountService接收来着vold的广播

MountService.onEventMountService.onEventLockedcase VoldResponseCode.VOLUME_STATE_CHANGED:  //每一次状态的改变都会调用这个分支onVolumeStateChangedLocked(vol, oldState, newState);  // 状态改变做相应操作mHandler.obtainMessage(H_VOLUME_BROADCAST, userVol).sendToTarget(); // mountService发广播给mountService 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9


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()); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

16.查看android分区及dd命令烧写分区

#ls /dev/block/by-name/android_bootandroid_bootloaderandroid_bootloader2android_cacheandroid_configandroid_dataandroid_factoryandroid_metadataandroid_miscandroid_persistentandroid_recoveryandroid_system----------push boot.img到及机子的任意目录,在此目录执行 ,dd if=boot.img of=/dev/block/by-name/android_boot,重启之后,boot.img烧写成功.其他分区也类似. 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

17.android 各层次获取时间的方法

1. 在Java层,long now = SystemClock.uptimeMillis();2. 在native层,nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);3. 在驱动层,s64 time = ktime_to_us(ktime_get());
  • 1
  • 2
  • 3
  • 4
  • 5

18.android 分区大小设置

vendor/qcom/non-hlos/MSM8953.LA.2.0/common/config/partition.xml
  • 1

19.android framwork打印调用栈

// c++ 代码
#include <utils/CallStack.h>
...
CallStack stack;
stack.update();
stack.dump();----------// java 代码
Log.d(TAG,Log.getStackTraceString(new Throwable()));  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

20.快速编译打包bootimage和system

make kernel:只重新编译kernel部分镜像,但是不会打包更新boot.img 
make bootimage-nodeps:不会编译kernel以及ramdisk,只会将out目录中现有的kernel和ramdisk.img重新打包一次生成boot.img 
make ramdisk:只重新编译ramdisk镜像,生成ramdisk.img,但是不会打包更新boot.img 
make ramdisk-nodeps:不会编译ramdisk,只会将out目录中现有的文件重新打包一次。out/target/product/hq6737t_66_1ha_m0/root,比如更改了init..rc之类的文件,只需要修改out/…/root/中对应的文件,然后重新用此命令打包一次,就会生成一个包含更改过init..rc的ramdisk.img 
make snod:打包system


21.modern

./mk johnson-eng update-none-hlos.bin vendor/qcom/non-hlos/MSM8953.LA.2.0/common/build/bin/asic/NON-HLOS.bin
  • 1
  • 2
  • 3

22.Qcom 开机后继续打印串口log

主要是修改 persist.console.silent.config 属性,persist.console.silent.config = 1是不打印, persist.console.silent.config = 0继续打印。 修改的文件, 将手机中的build.prop导出, 直接修改,再push进去; 修改 device/qcom/msmXXX/system.prop,编译systemimage。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

23.关闭selinux


when build, open the CONFIG_SECURITY_SELINUX_DEVELOP, add then append the " androidboot.selinux=permissive" in commandline. or in device/qcom/msmxxxx/system.prop, add ro.boot.selinux=disable
  • 1
  • 2
  • 3
  • 4

24.sbl检测电池是否在位

Non-HOLS/BOOT.BF.3.3/boot_images/core/systemdrivers/pmic/app/chg/src/pm_app_smbchg.c 里有个检测电池在不在的函数,Check Battery presence
  • 1

25.charge log mask

qpnp-smbcharger.c:
+ #define DEBUG
- static int smbchg_debug_mask;
+ static int smbchg_debug_mask = 0xFF; 
  • 1
  • 2
  • 3
  • 4

26.各模块JNI层代码


26.1 surfaceflinger

android_view_Surface.cpp
static const JNINativeMethod gSurfaceMethods[] = {demo
SurfaceTest.cpp
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6


27.input keyevent 命令

对应的键值 frameworks/native/include/android/keycodes.h

$adb shell input keyevent 26            // power$adb shell input keyevent 4 //模拟返回键(BACK) $adb shell input keyevent 82 //模拟菜单键(MENU) $adb shell input keyevent 3 //模拟主页键(HOME)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

28.inpudispatch中添加tp报点

--- a/frameworks/native/services/inputflinger/InputDispatcher.cpp
+++ b/frameworks/native/services/inputflinger/InputDispatcher.cpp
@@ -2483,15 +2483,16 @@ bool InputDispatcher::shouldSendKeyToInputFilterLocked(const NotifyKeyArgs* args } void InputDispatcher::notifyMotion(const NotifyMotionArgs* args) { -#if DEBUG_INBOUND_EVENT_DETAILS - ALOGD("notifyMotion - eventTime=%lld, deviceId=%d, source=0x%x, policyFlags=0x%x, " + ALOGE("zch----in notifyMotion"); +#if 1 + ALOGE("notifyMotion - eventTime=%lld, deviceId=%d, source=0x%x, policyFlags=0x%x, " "action=0x%x, actionButton=0x%x, flags=0x%x, metaState=0x%x, buttonState=0x%x," "edgeFlags=0x%x, xPrecision=%f, yPrecision=%f, downTime=%lld", args->eventTime, args->deviceId, args->source, args->policyFlags, args->action, args->actionButton, args->flags, args->metaState, args->buttonState, args->edgeFlags, args->xPrecision, args->yPrecision, args->downTime); for (uint32_t i = 0; i < args->pointerCount; i++) { - ALOGD(" Pointer %d: id=%d, toolType=%d, " + ALOGE(" Pointer %d: id=%d, toolType=%d, " "x=%f, y=%f, pressure=%f, size=%f, " "touchMajor=%f, touchMinor=%f, toolMajor=%f, toolMinor=%f, " "orientation=%f", 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

29.wifi连接adb

1. 在目标板上通过使用以太网连接来配置adb守护进程,使用setprop来设置守护进程的端口号# setprop service.adb.tcp.port 55552. 如果以上配置成功,再重启目标板上的adbd服务# stop adbd# start adbd 3. 在主机端使用如下命令建立adb连接 export ADBHOST=<target's ip address> adb kill-server adb start-server adb connect <target_ip_address>:5555 4. 使用如下命令确认设备连接成功 adb devices 设备连接成功后将出现设备序列号和名称

android note【转】相关推荐

  1. Android Note - 内存优化

    内存优化是Android性能优化的重点内容,一般来说,谈及性能优化,肯定避不开内存优化.虽然现在手机内存都很大,但并不意味着我们的App在使用内存时能"为所欲为".这篇就简单地总结 ...

  2. android note

    1.重要的property属性 #define ANDROID_RB_PROPERTY "sys.powerctl" // 控制启动状态property_set(ANDROID_R ...

  3. android note分析,随记你的掌上灵感 三星S Note功能解析

    今天要为大家介绍的是三星GALAXY Note升级4.0后的新功能之一的S Note,相信不少已经升级的朋友早已发现了这个程序,不过大家应该还不知如何操作,不要着急,通过今天的介绍和步步演示,你也可以 ...

  4. android note分析,三星Note9七大亮点解析

    三星Note9七大亮点解析 2018-08-10 14:18:56 0点赞 0收藏 0评论 作为大屏手机的先行者,三星Note系列无疑是成功的,至少大屏.S Pen以及便捷的商务功能等都给消费者留下了 ...

  5. android studio 库项目管理,在Android Studio中将现有项目转换为库项目

    在模块的applicationId文件中(如果使用模块,则不是根项目!),只需替换: apply plugin: 'com.android.application' // or, if you're ...

  6. 如何在“首选项”摘要中显示Android首选项的当前值?

    这必须经常出现. 当用户在Android应用程序中编辑首选项时,我希望他们能够在Preference摘要中查看首选项的当前设置值. 示例:如果我有"丢弃旧邮件"的"首选项 ...

  7. android HttpClient,DefaultHttpClient,AbstractHttpClient之间关系

    HttpClient是一个接口,定义了连接和访问规范. /** $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/ ...

  8. Android Kernel Features

    2019独角兽企业重金招聘Python工程师标准>>> Android Kernel Features Jump to: navigation, search Contents 1 ...

  9. Android开发错误汇总

    大家都在为项目开发成功而喜悦,但可不知成功的路上是会经常出错的,下面是我碰到的一些错误集合! [错误信息] [2011-01-19 16:39:10 - ApiDemos] WARNING: Appl ...

最新文章

  1. Google 鼓励的 13 条代码审查标准,建议收藏!
  2. ASP.NET中 DropDownList+GridView(网格视图)的使用前台绑定[高]
  3. 【每周CV论文推荐】 初学深度学习单张图像三维人脸重建需要读的文章
  4. boost::nowide模块相关的测试程序
  5. 网页设计图片向上浮动_HTML5 背景图片漂浮/浮动特效
  6. 计算两向量的旋转角(转)
  7. 84行C++代码教你实现洛谷占卜功能
  8. 浅析webpack的原理
  9. 520套日式 韩游 消除RGB类 人物角色 动画序列帧 手游动画
  10. Python处理PDF神器:PyMuPDF的安装与使用
  11. 用latex写毕业论文--设置附录、参考文献、致谢环境
  12. java是什么?用来做什么的?
  13. RedHat7使用yum源安装依赖包
  14. 【如何开发小程序?】如何快速开发一个小程序
  15. Android开发规范文档
  16. 同期对比图_Excel展示两组同期数据,这种左右对比图真好看,只需六步搞定
  17. 局域网通过IP查看对方计算机名,通过计算机名查看对方IP以及查看在线所有电脑IP
  18. EasyExcel导出、按列设置样式、根据表头字数设置列宽、Converter转换
  19. 路由器FCC认证办理周期是多久
  20. 从键盘任意输入一个实数,不使用计算绝对值函数编程计算并输出该实数的绝对值。

热门文章

  1. 无约束最优化问题的一般结构与规划方法
  2. 企业绩效考核与6s管理办法实施方案
  3. 复旦学长:考完试的这段空档期应该怎么过
  4. iyiw oracle_oracle详解
  5. HP DL380 G7 物理机安装debian10 提示缺少:bnx2/bnx2-mips-09-6.2.1b.fw
  6. 这个是我的第一篇博文!《我们的浪漫爱情》
  7. 深入浅出用户态协议栈
  8. 3GPP USIM milenage算法code
  9. Java实现穷举_对数器实现(C++)
  10. 电脑软件“加密” 神器,深度保护你的“学习软件”