android note
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-inittrigger load_all_props_action // 在late-init阶段加载所有的属性----------on load_all_props_actionload_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 properties3 # autogenerated by buildinfo.sh4 ro.build.id=LMY47V5 ro.build.display.id=LMY47V.WW_Phone.12.0.0.020-20160719_userdebug6 ro.build.display.wtid=LMY47V.WW_Ph
// device/qcom/msm89xx/xxx_8937.mk
PRODUCT_PROPERTY_OVERRIDES += \persist.sys.exttable=1
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.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
4.屏幕截图 & 屏幕录制
adb shell screencap /sdcard/test.png
adb 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.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" //确定键
- 重新挂载某个分区
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.n
data/local/log/aplog
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
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 :
- 指定工程的 .config
KERNEL_DEFCONFIG
device/intel/cherrytrail/cht_ffd/AndroidBoard.mk
- 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} // 点击弹出umountMountService: 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::onEventVolumeManager::handleBlockEventcase add:Disk::create // disk.cppdisk::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::notifyEventVolumeManager::Instance()->getBroadcaster()->sendBroadcast
3.mountService接收来着vold的广播
MountService.onEventMountService.onEventLockedcase 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_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烧写成功.其他分区也类似.
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());
18.android 分区大小设置
vendor/qcom/non-hlos/MSM8953.LA.2.0/common/config/partition.xml
device/qcom/xxx_8937/BoardConfig.mk
19.android framwork打印调用栈
// c++ 代码
#include <utils/CallStack.h>
...
CallStack stack;
stack.update();
stack.dump();----------// java 代码
Log.d(TAG,Log.getStackTraceString(new Throwable()));
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.binvendor/qcom/non-hlos/MSM8953.LA.2.0/common/build/bin/asic/NON-HLOS.bin
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。
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
24.sbl检测电池是否在位
Non-HOLS/BOOT.BF.3.3/boot_images/core/systemdrivers/pmic/app/chg/src/pm_app_smbchg.c 里有个检测电池在不在的函数,Check Battery presence
25.charge log mask
qpnp-smbcharger.c:
+ #define DEBUG
- static int smbchg_debug_mask;
+ static int smbchg_debug_mask = 0xFF;
26.各模块JNI层代码
26.1 surfaceflinger
android_view_Surface.cpp
static const JNINativeMethod gSurfaceMethods[] = {demo
SurfaceTest.cpp
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)
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",
29.wifi连接adb
1. 在目标板上通过使用以太网连接来配置adb守护进程,使用setprop来设置守护进程的端口号# setprop service.adb.tcp.port 55552. 如果以上配置成功,再重启目标板上的adbd服务# stop adbd# start adbd3. 在主机端使用如下命令建立adb连接export ADBHOST=<target's ip address>adb kill-serveradb start-serveradb connect <target_ip_address>:55554. 使用如下命令确认设备连接成功adb devices设备连接成功后将出现设备序列号和名称
30.ramdump开关
diff --git a/kernel/msm-3.18/drivers/power/reset/msm-poweroff.c b/kernel/msm-3.18/drivers/power/reset/msm-poweroff.c
index ee3e72b..98521a0 100644
--- a/kernel/msm-3.18/drivers/power/reset/msm-poweroff.c
+++ b/kernel/msm-3.18/drivers/power/reset/msm-poweroff.c
@@ -488,6 +488,51 @@ static struct attribute_group reset_attr_group = {};#endif+
+
+
+static ssize_t show_ramdump(struct kobject *kobj, struct attribute *attr,
+ char *buf)
+{
+ return snprintf(buf, sizeof(download_mode), "%u\n", download_mode);
+
+}
+
+static size_t store_ramdump(struct kobject *kobj, struct attribute *attr,
+ const char *buf, size_t count)
+{
+ uint32_t enabled;
+ int ret;
+ ret = kstrtouint(buf, 0, &enabled);
+ if( download_mode != enabled)
+ {
+ download_mode = enabled;
+ set_dload_mode(download_mode);
+
+ }
+ return count;
+
+}
+
+
+
+RESET_ATTR(enable_ramdump, 0644, show_ramdump, store_ramdump);
+
+
+static struct attribute *ramdump_attrs[] = {
+ &reset_attr_enable_ramdump.attr,
+ NULL
+};
+
+
+
+static struct attribute_group ramdump_attr_group = {
+ .attrs = ramdump_attrs,
+};
+
+
+
+static int msm_restart_probe(struct platform_device *pdev){struct device *dev = &pdev->dev;
@@ -544,6 +589,12 @@ static int msm_restart_probe(struct platform_device *pdev)pr_err("%s:Error in creation sysfs_create_group\n", __func__);kobject_del(&dload_kobj);}
+
+ ret = sysfs_create_group(&dload_kobj, &ramdump_attr_group);
+ if (ret) {
+ pr_err("%s:Error in creation sysfs_create_group\n", __func__);
+ kobject_del(&dload_kobj);
+ }skip_sysfs_create:#endifnp = of_find_compatible_node(NULL, NULL,
31.qcom单编boot后wifi不能用
diff --git a/arch/arm/configs/msm8937-perf_defconfig b/arch/arm/configs/msm8937-perf_defconfig
index 546ab81..02730eb 100644
--- a/arch/arm/configs/msm8937-perf_defconfig
+++ b/arch/arm/configs/msm8937-perf_defconfig
@@ -1,5 +1,4 @@CONFIG_EARLY_IOREMAP=y
-CONFIG_LOCALVERSION="-perf"CONFIG_AUDIT=yCONFIG_NO_HZ=yCONFIG_HIGH_RES_TIMERS=y
@@ -33,10 +32,6 @@ CONFIG_ARCH_MMAP_RND_BITS=16CONFIG_MODULES=yCONFIG_MODULE_UNLOAD=yCONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-CONFIG_MODULE_SIG=y
-CONFIG_MODULE_SIG_FORCE=y
-CONFIG_MODULE_SIG_SHA512=yCONFIG_PARTITION_ADVANCED=yCONFIG_ARCH_MSM=yCONFIG_ARCH_MSM8916=y
diff --git a/arch/arm/configs/msm8937_defconfig b/arch/arm/configs/msm8937_defconfig
index 1f5b851..c8d3b37 100644
--- a/arch/arm/configs/msm8937_defconfig
+++ b/arch/arm/configs/msm8937_defconfig
@@ -34,10 +34,6 @@ CONFIG_ARCH_MMAP_RND_BITS=16CONFIG_MODULES=yCONFIG_MODULE_UNLOAD=yCONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-CONFIG_MODULE_SIG=y
-CONFIG_MODULE_SIG_FORCE=y
-CONFIG_MODULE_SIG_SHA512=yCONFIG_PARTITION_ADVANCED=yCONFIG_ARCH_MSM=yCONFIG_ARCH_MSM8916=y
/work2/sku6_8.1/vendor/qcom/opensource/wlan/prima
32 secureboot 签名
cd None-HLOS/MSM8937.LA.3.0/common/sectools
python sectools.py secimage -i xxx.mbn -c .\config\8937\8937_secimage.xml -sa
// 8937_secimage.xml 中包含了需要签名的分区,且指定了签名的key
<general_properties>。。。<selected_cert_config>xxxxx_certs</selected_cert_config>
。。。
//签名使用的key的目录
MSM8937.LA.3.0.1/common/sectools/resources/data_prov_assets/Signing/Local/xx_certskey2048_exp65537
33 fastboot unlock
#fastboot getvar secret-key-opt 2>&1secret-key-opt: 17425620170519finished. total time: 0.002secho 17425620170519 > default_key.binfastboot flash frp-unlock default_key.binfastboot flashing unlockfastboot flashing unlock_critical
- helathd 打开adb
=================
on chargerwait /dev/block/bootdevice/by-name/systemmount ext4 /dev/block/bootdevice/by-name/system /system ro barrier=1load_all_propssetprop sys.usb.configfs 0setprop persist.sys.usb.config adbstart qcom-post-bootsetprop persist.sys.usb.config adbstart hvdcp_opti
- framworj/base/core/res/res/values/config.xml 配置
===================================================
// 亮度变化响应时间
config_autoBrightnessBrighteningLightDebounce
config_autoBrightnessDarkeningLightDebounce//最小亮度、默认亮度
config_screenBrightnessSettingMinimum
config_screenBrightnessSettingDefault
36.sbl1 battery status check
// boot_images/core/systemdrivers/pmic/target/msm8937_pm8937_pmi8937/system/src/pm_sbl_boot.c
pm_sbl_chg_init (void)
{err_flag |= pm_sbl_chg_check_weak_battery_status(device_index); }// boot_images/core/systemdrivers/pmic/app/chg/src/pm_app_smbchg.c
pm_err_flag_type pm_sbl_chg_check_weak_battery_status(uint32 device_index)
{
...while(vbatt_weak_status) //While battery is in weak state{...if (vbat_adc >= bootup_threshold) //Compare it with SW bootup threshold{LOGD("Battery good, bootup");pm_chg_indication_led_et6326_init(vbat_adc, 0);vbatt_weak_status = FALSE;break; //bootup}.../* new add did not voltage limit when insert charger*/pm_comm_read_byte(0, 0x808, &chg_sts, 0);snprintf(s_buf, LOG_BUF_SIZE, "chg_sts = 0x%x", chg_sts);boot_log_message(s_buf);if (chg_sts == PM8940_CHARGER_EXIST) {break; //bootup}/* end */}
...if(!bat_present){// If battery absent, set Vsysmin to 3.6Verr_flag |= pm_smbchg_bat_if_set_min_sys_volt(device_index, 3600);}else{// If battery present, set Vsysmin to 3.15Verr_flag |= pm_smbchg_bat_if_set_min_sys_volt(device_index, 3150);}}
- system.img/ vendor .img 解包打包
================================
1.解包为元数据
/work/d1S_androidP/out/host/linux-x86/bin/simg2img system.img system.raw2.挂载
sudo mount -t ext4 system.raw ./my_sysdir3.umount
sudo umount my_sysdir/4.重新打包
/work/d1S_androidP/out/host/linux-x86/bin/img2simg system.raw system2.img
(img2simg工具默认是没有编译出来的,可以在编译环境建立后,make img2simg-host 来生成)
- fingerprint TZ modify
=========================
trustzone_images/apps/bsp/trustzone/qsapps/build/secimage.xml
trustzone_images/core/bsp/trustzone/qsapps/build/secimage.xml trustzone_images/core/bsp/trustzone/qsapps/fpctzappfingerprint/
trustzone_images/core/bsp/trustzone/qsapps/goodixfp/ trustzone_images/core/kernel/libstd/build/SConscript
trustzone_images/core/kernel/libstd/build/fpctzappfingerprint/
trustzone_images/core/kernel/libstd/build/goodixfp/// TA
trustzone_images/core/securemsm/secrsa/build/SConscript
trustzone_images/core/securemsm/trustzone/qsapps/fpctzappfingerprint/
trustzone_images/core/securemsm/trustzone/qsapps/goodixfp/trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/common_applib/build/SConscript
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/common_applib/build/fpctzappfingerprint
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/common_applib/build/goodixfptrustzone_images/core/securemsm/trustzone/qsapps/libs/applib/proxy/build/SConscript
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/proxy/build/fpctzappfingerprint/
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/proxy/build/goodixfp/trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/qsee/build/SConscript
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/qsee/build/fpctzappfingerprint/
trustzone_images/core/securemsm/trustzone/qsapps/libs/applib/qsee/build/goodixfptrustzone_images/core/securemsm/trustzone/qsapps/libs/biometric/build/SConscript
trustzone_images/core/securemsm/trustzone/qsapps/libs/biometric/build/goodixfp/
trustzone_images/core/securemsm/trustzone/qsapps/libs/biometric/build/fpctzappfingerprinttrustzone_images/core/securemsm/trustzone/qsee/mink/libstd/build/SConscript
trustzone_images/core/securemsm/trustzone/qsee/mink/libstd/build/fpctzappfingerprint/
trustzone_images/core/securemsm/trustzone/qsee/mink/libstd/build/goodixfp/trustzone_images/core/securemsm/trustzone/qsee/mink/oem/config/msm8953/oem_config.xml
trustzone_images/core/securemsm/trustzone/qsee/mink/oem/config/common/keymaster_oem_config.xml
trustzone_images/core/buses/qup_accesscontrol/bear/config/QUPAC_8953_Access.xml
39. user debug 版本宏
TARGET_BUILD_VARIANTeng user userdebug
40 dm-verify
关键字 : veritykeyid关键宏:VERITY_LE BUILD_SIGN_FOR_SECBOOT HQ_BUILD_FLAG#ifneq ($(BUILD_SIGN_FOR_SECBOOT),)
#DEFINES += HQ_BUILD_FLAG=1
#endif
41. bugreport 关键字
beginning of|KERNEL LOG|LAST KMSG|LAST LOGCAT当 warm reset的时候才会有last log,当关机再开机后就不会保存有last log
LAST KMSG
cat /sys/fs/pstore/console-ramoops
- Android.mk if判断
ifeq (,$(filter MT6735 MT6737 MT6753 MT6755 MT6757, $(MTK_PLATFORM))) |~
|~
else |~
|~
endif
android note相关推荐
- Android Note - 内存优化
内存优化是Android性能优化的重点内容,一般来说,谈及性能优化,肯定避不开内存优化.虽然现在手机内存都很大,但并不意味着我们的App在使用内存时能"为所欲为".这篇就简单地总结 ...
- android note【转】
本文转载自:http://blog.csdn.net/u012719256/article/details/52094982 1.重要的property属性 #define ANDROID_RB_PR ...
- android note分析,随记你的掌上灵感 三星S Note功能解析
今天要为大家介绍的是三星GALAXY Note升级4.0后的新功能之一的S Note,相信不少已经升级的朋友早已发现了这个程序,不过大家应该还不知如何操作,不要着急,通过今天的介绍和步步演示,你也可以 ...
- android note分析,三星Note9七大亮点解析
三星Note9七大亮点解析 2018-08-10 14:18:56 0点赞 0收藏 0评论 作为大屏手机的先行者,三星Note系列无疑是成功的,至少大屏.S Pen以及便捷的商务功能等都给消费者留下了 ...
- android studio 库项目管理,在Android Studio中将现有项目转换为库项目
在模块的applicationId文件中(如果使用模块,则不是根项目!),只需替换: apply plugin: 'com.android.application' // or, if you're ...
- 如何在“首选项”摘要中显示Android首选项的当前值?
这必须经常出现. 当用户在Android应用程序中编辑首选项时,我希望他们能够在Preference摘要中查看首选项的当前设置值. 示例:如果我有"丢弃旧邮件"的"首选项 ...
- android HttpClient,DefaultHttpClient,AbstractHttpClient之间关系
HttpClient是一个接口,定义了连接和访问规范. /** $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/ ...
- Android Kernel Features
2019独角兽企业重金招聘Python工程师标准>>> Android Kernel Features Jump to: navigation, search Contents 1 ...
- Android开发错误汇总
大家都在为项目开发成功而喜悦,但可不知成功的路上是会经常出错的,下面是我碰到的一些错误集合! [错误信息] [2011-01-19 16:39:10 - ApiDemos] WARNING: Appl ...
最新文章
- 计算机显示网络地址,u盘装系统win7打开电脑显示正在获取网络地址怎么处理
- 静态路由实验 +http+dns_华为静态路由配置实验
- 在vs2005中使用Com连接SAP系统(一)
- 【机器学习基础】浅谈为什么L2正则化有效
- api 数据gzip压缩_如何使用GZip和Jersey压缩Java REST API中的响应
- 关于TCP/IP协议及网络通信相关问题
- 用 Excel+VBA 与 SQL Server 数据库交互
- 新增了归并数组的方法!
- vsftpd pam_mysql_vsftpd+mysql+pam虚拟用户无法登录ftp服务器,请给位大侠帮忙!
- AlwaysOn业务IP和高可用IP分开使用(四)
- 如何在 Mac 中对文档进行签名?
- 前端操作复制粘贴板(clicpboardData )
- 串口数据的抓取与监视
- 安卓版teamview15.5.3
- Linux服务器发包
- 手机号中间四位变成****
- Android Databinding 与 RecycleView mvvm的运用
- 07-----给音视频文件添加字幕流
- 接口加密(TokenSpringCloud项目中进行token认证)
- pt函数html,pt是什么元素?