Tcp/IP通信也是不安全的,在传输的时候也可能出现漏洞
查看正在运行的进程
adb shell ps -A
|grep "messaging"
adb shell logcat -b
events |grep proc_died
(random accessmemory) RAM=运行内存,(Read-Only Memory) ROM=储存内存=EMMC(闪存)
手机的运行内存是指运行程序时存储或者暂时存储的地方,而CPU是用来计算的。
RAM:运行内存。RAM越大,手机可运行的APP应用程序越多,RAM越大手机运行速度越流畅(目前基本是2GB够用、3GB流畅、4GB用的更爽)。
ROM:储存空间。ROM越大,手机储存的文件数量越多,ROM的大小(16GB、32GB、64GB等)不影响手机运行速度。
ROM一般包括:系统空间+用户安装程序空间+用户储存空间三个部分。
cpu当前频率节点
adb shell cat
proc/cpufreq/MT_CPU_DVFS_LL/cpufreq_freq
adb logcat |grep -iE"gcm|gms" --color //过滤关键字,并且颜色标记显示
——修改前[pm.dexopt.boot]: [verify] [pm.dexopt.ab-ota]:[speed-profile] [pm.dexopt.shared]: [speed] [pm.dexopt.install]:[quicken] [pm.dexopt.inactive]: [verify] [pm.dexopt.bg-dexopt]:[speed-profile] [pm.dexopt.first-boot]: [quicken] ——修改后[pm.dexopt.boot]: [speed] [pm.dexopt.ab-ota]:[speed-profile] [pm.dexopt.shared]: [speed] [pm.dexopt.install]:[speed] [pm.dexopt.inactive]: [verify] [pm.dexopt.bg-dexopt]:[speed-profile] [pm.dexopt.first-boot]: [speed]
浅谈Android内存管理https://www.cnblogs.com/lianghe01/p/6617275.html
adb shell getprop |grepdalvik.vm.heapsize当java进程申请的java空间超过阈值时,就会抛出OOM异常(这个阈值可以是48M、24M、16M等,视机型而定)
应用程序如何绕过dalvikvmheapsize的限制?
对于一些大型的应用程序(比如游戏),内存使用会比较多,很容易超超出vmheapsize的限制,这时怎么保证程序不会因为OOM而崩溃呢?
(1)、创建子进程
创建一个新的进程,那么我们就可以把一些对象分配到新进程的heap上了,从而达到一个应用程序使用更多的内存的目的,当然,创建子进程会增加系统开销,而且并不是所有应用程序都适合这样做,视需求而定。创建子进程的方法:使用android:process标签
(2)、使用jni在nativeheap上申请空间(推荐使用)
nativeheap的增长并不受dalvikvm heapsize的限制,从图6可以看出这一点,它的nativeheap size已经远远超过了dalvikheap size的限制。
只要RAM有剩余空间,程序员可以一直在nativeheap上申请空间,当然如果RAM快耗尽,memorykiller会杀进程释放RAM。大家使用一些软件时,有时候会闪退,就可能是软件在native层申请了比较多的内存导致的。比如,我就碰到过UCweb在浏览内容比较多的网页时闪退,原因就是其nativeheap增长到比较大的值,占用了大量的RAM,被memorykiller杀掉了。
(3)、使用显存(操作系统预留RAM的一部分作为显存)
使用OpenGL textures等API,texture memory不受dalvik vm heapsize限制,这个我没有实践过。再比如Android中的GraphicBufferAllocator申请的内存就是显存。
adb shell
screenrecord /sdcard/test.mp4
提MTKcase时务必提供log,如果log太大不能在ALM系统中放入,需通过如下的MTK网址上传log,注意下面红框的部分
https://transfer.mediatek.com/Default/ShareFile
adb logcat |grep"proposedRotation \| Screen"过滤多个关键字,要加转义字符
adb logcat |grep -iE"gcm|gms" --color //过滤关键字,并且颜色标记显示
SystemProperties.getBoolean("ro.config.remove.focusmode",false);如果取不到ro.config.remove.focusmode择默认值就为false.反之为ro.config.remove.focusmode的值
systrace抓取方法:
external/chromium-trace
python systrace.py
-l
python systrace.py
-t 10 -o chrome.taobao.html gfx input view webview wm am sm hal app
res dalvik rs hwui perf bionic power pm ss database network adb pdx
sched freq idle load memreclaim binder_driver binder_lock
参考范例:https://www.cnblogs.com/yezhennan/p/5442031.html
adb shell dumpsyswindow ->寻找focus关键词,看当前在那个进程上面
mtk项目
“应用/系统”crash/anr导log方法:
1.获取dropbox.txt查看crash/anr
adb shell
dumpsys dropbox --print > dropbox.txt
2.获取bugreport.zip查看
adb bugreport
3.pull aee_exp文件
adb shell
cd
/data/aee_exp
ls -al
check db.xx.xx
退出adb
adb pull
/data/aee_exp/db.xx.xx .
通过adbshell am force-stop包名 来杀掉这个程序
测量脚本:http://developer.tclcom.com/knowledgeshare/KMS/cd_swd2/performance/common_tool_set/android_go_check_req_tool/
测试需求:http://developer.tclcom.com/knowledgeshare/KMS/cd_swd2/performance/GOOGLE_Document/android_go/GMS-Go-Requirements-draft-20171215.pdf
由于AOSPphone在这个版本上移除了,所有MMIcode更新如下:
版本查询:*#7223#->*#*#7223#*#*
MMI测试:*#2886#->*#*#2886#*#*
disable GMS:
###666#->*#*#666#*#*
HW查询:*#28#->*#*#28#*#*
Regulatory&Saftely:*#07#->*#*#07#*#*
SVN查询保持不变: *#06#
MTKLOG:*#*#3646633#*#*
一般来说一个APK中的各个组件(Activity,Service,Provider,Receiver)都是运行在同一个进程中,进程名通过一下两种方式确定:
(1)通过AndroidManifest.xml中的application标签中android:process指定;
(2)如果(1)中没有指定,那么进程名就是APK的包名
另一种方式:启动apk,然后打logcat,在log日志中搜索"pkg=",即可定位
WindowManager: in
isMMITestTop, pkg=com.android.chrome
也可以用adbshell dumpsys window,然后搜focus,即可定位
1:给MTK提case时在summary里务必按照如下格式填写,这样可以让MTK更容易甄别公司名和项目名,模块也更清晰。
[Company][Porject][Test]
· [TCL]A3A
VF][CTS]…
· [TCL][U5A
PLUS VF][Performance]…
·
[TCL][U50A PLUS TF][WIFI]…
2:提MTKcase时务必提供log,如果log太大不能在ALM系统中放入,需通过如下的MTK网址上传log,注意下面红框的部分
https://transfer.mediatek.com/Default/ShareFile
常用的内存调优分析命令:
dumpsys meminfo
procrank
cat /proc/meminfo
free
showmap
vmstat
top命令是看cpu占用率的
Proportional SetSize——实际物理内存(PSS)
//
dumpsys meminfo--package //输出指定包名的进程,可能包含多个进程
例如
要查看 com.android.systemui的内存使用情况
adb shell dumpsys -t
20 meminfo com.android.systemui
adb shell dumpsysprocstats --hours 3输出最后3小时收集的内存信息
//
*
com.google.android.apps.magazines / u0a59:
TOTAL:3.6% (10MB-10MB-10MB/8.7MB-9.0MB-9.0MB over 6) //注释 minPss-avgPss-maxPss/ minUss-avgUss-maxUss
Imp Bg:
0.03%
Service:
3.6% (10MB-10MB-10MB/8.7MB-9.0MB-9.0MB over 6)
(Cached):
17% (9.9MB-10MB-10MB/8.7MB-8.9MB-9.0MB over 5)
查看手机的进程等信息
ps -A/-a/..
-A All processes
-a Processes with
terminals that aren't session leaders
-d All processes
that aren't session leaders
-e Same as -A
-g Belonging to
GROUPs
-G Belonging to real
GROUPs (before sgid)
-p PIDs (--pid)
-P Parent PIDs
(--ppid)
-s In session IDs
-t Attached to
selected TTYs
-T Show threads
-u Owned by USERs
-U Owned by real
USERs (before suid)
[Root Cause]:产生该问题的根本原因是什么
[Solution]:对所提交的方案进行描述
[SelftestAction]:针对提交的方案,方案提交者做过哪些测试进行验证,验证结果如何
[Testsuggestion]:针对这个问题本身,从开发的角度给出测试建议,并给出所提交的修改方案可能会产生的影响的测试建议。
.
查询手机里的属性
adb shell getprop
|grep "api"
CTS/GTS FingerPrint信息不一致解决方案:
[DESCRIPTION]
Settings中AboutPhone的Modelnumber等信息的修改
[SOLUTION]
修改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,可改变显示的Firmwareversion
-但是做上述修改时需要注意,某些属性是跟fingerprint相关的,如果修改了跟fingerprint相关的属性,那么ro.build.fingerprint也要做出相应修改
原始状态下ro.product.fingerprint属性设置如下:echo“ro.build.fingerprint=$BUILD_FINGERPRINT”
其中$BUILD_FINGERPRINT=$(PRODUCT_BRAND)/$(PRODUCT_NAME)/$( TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER):$(TARGET_BUILD_TYPE)/$( BUILD_VERSION_TAGS)
=>[ro.build.brand]/[ro.product.name]/[ro.product.device]:[ro.build.version.release]/[ro.build.id]/[ro.build.version.incremental]:[ro.build.type]/[ro.build.tags]
所以,如果修改了ro.build.brand、ro.product.name、ro.product.device、ro.build.version.release、ro.build.id、ro.build.version.incremental、ro.build.type、ro.build.tags这些属性
那么,ro.product.fingerprint的属性设置需要做出修改
假如贵司修改了”echoro.product.name=test_name”,那么ro.product.fingerprint的属性设置需要修改为:
echo
"ro.build.fingerprint=${PRODUCT_BRAND}/test_name/${TARGET_DEVICE}:${PLATFORM_VERSION}/${BUILD_ID}/
${BUILD_NUMBER}:${TARGET_BUILD_TYPE}/${BUILD_VERSION_TAGS}"
grep -nri A ./
meld A路径B路径
(对比两个文件)
Git鼓励大量使用分支:
查看分支:gitbranch
创建分支:gitbranch
切换分支:gitcheckout
创建+切换分支:gitcheckout -b
合并某分支到当前分支:gitmerge
删除分支:gitbranch -d
也可以在命令后面跟程序的包名或进程id来查看某个程序的内存使用情况:
$adb shell dumpsys
meminfo $package_name or $pid
ACTIVITY MANAGERRECENT TASKS列出了最近打开的Task的信息,最上面的一行是最新打开的Task信息,下面依次为更早时候打开的Task的信息。
ACTIVITY MANAGERACTIVITIES列出了每个task的详细信息,即这个Task包含哪些Activity,他们的显示顺序是什么样的等
子命令说明命令格式
meminfo内存adnshell dumpsys meminfo
cpuinfo CPU adn
shell dumpsys cpuinfo
gfxinfo帧率adnshell dumpsys gfxinfo
display显示adnshell dumpsys display
power电源adnshell dumpsys power
batterystats电池状态adnshell dumpsys batterystats
battery电池adnshell dumpsys battery
alarm闹钟adnshell dumpsys alarm
location位置adnshell dumpsys location
run cts -c
android.security.cts.StagefrightTest -m testStagefright_bug_21443020
--skip-preconditions
手机内部搜索值:
adb shell getprop
|grep "Face"
编译问题:
Out of memory error
(version 1.2-rc4 'Carnac' (298900
f95d7bdecfceb327f9d201a1348397ed8a843843 by
GC overhead limit
exceeded.
Try increasing heap
size with java option '-Xmx'.
1.import environment
variables
exportJACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8-XX:+TieredCompilation -Xmx4096m" ---添加在你的.bashrc里
2.kill jack
server
./prebuilts/sdk/tools/jack-admin kill-server ----编译前执行
3.start jack
server
./prebuilts/sdk/tools/jack-admin start-server ---编译前执行
4.Turn off unused
programs as much as possible in order to make more memory available
参考:http://172.26.35.213/wiki/index.php/SIMBA6_CRICKET
冲突解决:
本地新开终端:
repo init -u
[email protected]:MSM8909/manifests_cd.git -m
MSM8909.LA.2.0.1-cert.xml
repo sync冲突路径
git checkout -t
origin/buzz6t4gtfumts_dint_upgrade_branch
git grep "<<<<<
HEAD"
使用vi修改,
如遇二进制冲突,请邮件说明
git commit -m "clone
coding for A502DL"
git add . &&
git commit -m "int merge code:Post-CS 0.0.036.1"
git push ssh://
name>@172.26.32.15:29418/MSM8909/
HEAD:refs/for/buzz6t4gtfumts_dint_upgrade_branch
git push
ssh://[email protected]:29418/mtk6763/kernel-4.4.git
HEAD:refs/for/mtk6763-o1-v1.0-dint_1A6A-5
git pull同步代码
切换分支
NOTE :
1. Must use
command "git cherry-pick " to get modified
files firstly, you can get the commit id from every patch link.
2. If no
conflict, MUST use command "git reset HEAD^" to roll back
commit info and use patch delivery tool to submit modifications.
3. If have
conflicts, MUST use command "git reset HEAD" to roll back
commit info and use patch delivery tool to submit modifications.
查看项目git信息
git remote -v
01-08 13:22:23.509
2373 2373 D stl : ViewRootImpl 2373 Thread: 2373
01-08 13:22:25.929
4027 4027 D stl : ViewRootImpl 4027 Thread: 4027
01-08 13:22:26.979
4168 4168 D stl : ViewRootImpl 4168 Thread: 4168
01-08 13:22:27.949
3825 3825 D stl : ViewRootImpl 3825 Thread: 3825
01-08 13:22:28.069
3825 3825 D stl : ViewRootImpl 3825 Thread: 3825
前面一个号是进程id,后面一个号是线程id
打开当前文件 nautilus+路径 比如:nautilus./
打patch,谈bug号框,需要手动删除文件
/local/Projects/ELSA6_NA/.repo/repo/hooks$
rm patch-delivery-gui
repo forall -c
"pwd;git status;echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~'"
查找修改的路径
搜索路径的方式
find -name
*package.mk*
通过locate查找类
lqyuan@SW2-YUANLIQI-D1:~/local/Tools/apktool$
locate ResizeableActivity
/data/home/lqyuan/local/Projects/Buzz6t-4g-tf-umts/cts/hostsidetests/services/activitymanager/app/src/android/server/app/NonResizeableActivity.java
/data/home/lqyuan/local/Projects/Buzz6t-4g-tf-umts/cts/hostsidetests/services/activitymanager/app/src/android/server/app/ResizeableActivity.java
/data/home/lqyuan/local/Projects/Buzz6t-4g-tf-umts/cts/tests/app/app/src/android/app/stubs/PipNotResizeableActivity.java
/data/home/lqyuan/local/Projects/Buzz6t-4g-tf-umts/cts/tests/app/src/android/app/cts/PipNotResizeableActivityTest.java
Android开发--在Eclipse中使用android.support.v7
1、项目右键--> import --> Android --> ExistingAndroid Code Into workspace
-->选择..\sdk\extras\android\support\v7\appcompat(根据自己的文件存放路径先择)
-->勾选copyprojects into workspace --> finish
(若出现unableto resolve target 'android-16',修改project.properties)
2、在项目中引用android.support.v7
项目右键--> properties --> Android --> Library--> Add --> OK
assertEquals([Stringmessage],Object target,Object result) target与result不相等,中断测试方法,输出message
获取手机是什么版本useruserdebug daily
getprop
ro.build.type
查看三方应用或是系统应用签名
用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERT.RSA文件,通过keytool-printcert -file META-INF/CERT.RSA命令打印证书
信息
---------------------------------------------------------------------------------------------------------------
我们来分析Android的PackageManagerService,后面简称PMS。PMS用来管理所有的package信息,包括安装、卸载、更新以及解析AndroidManifest.xml以组织相应的数据结构,这些数据结构将会被PMS、ActivityMangerService等等service和application使用到。PMS有几个比较重要的命令可以用于我们debug中:
adb shell dumpsyspackage (dump出系统中所有的application信息)
adb shell dumpsyspackage “com.android.contacts" p (dump出系统中特定包名的application信息)
---------------------------------------------------------------------------------------------------------------
boot log分析
adb shell cat
/proc/bootprof
从mainlog里面看一下,搜索dex2oat,会发现,其实这个时候,大部分的时间是在做编译apk的动作
lqyuan@SW2-YUANLIQI-D1:~/Desktop/4DB2/CTS/android-cts-6.0_r13/android-cts/tools$
adb shell cat /proc/bootprof
-------------start---------------------------
0 BOOT PROF
(unit:msec)
---------------------------------------------
13336.654571 :
BOOT_Animation:START
19606.061309 :
Zygote:Preload Start
23074.968351 :
Zygote:Preload 4158 classes in 3214ms
23522.002883 :
Zygote:Preload 114 obtain resources in 444ms
23541.512206 :
Zygote:Preload 41 resources in 18ms
23846.541843 :
Zygote:Preload End
25165.138201 :Android:PackageManagerService_Start //此阶段为pms对各种路径下的apk包进行扫描
26464.511174 :
Android:PMS_scan_START
35536.057816 :
Android:PMS_scan_done:/system/framework
38521.889231 :
Android:PMS_scan_done:/system/app
38640.165273 :
Android:PMS_scan_done:/system/vendor/app
38644.640377 :
Android:PMS_scan_data_start
42646.532317 :
Android:PMS_scan_data_done:/data/app
42648.217942 :
Android:PMS_scan_data_done:/data/app-private
42650.476796 :
Android:PMS_scan_data_done:/data/app-ephemeral
42721.348411 :
Android:PMS_scan_END
45559.652742 :
Android:PMS_READY
48898.794002 :
AP_Init:[service]:[com.google.android.inputmethod.latin]:[com.google.android.inputmethod.latin/com.android.inputmethod.latin.La
48952.401242 :
AP_Init:[service]:[com.android.systemui]:[com.android.systemui/.ImageWallpaper]:pid:3575:(PersistAP)
49172.442962 :
AP_Init:[]:[WebViewLoader-armeabi-v7a]:pid:3609
50618.419476 :
AP_Init:[added
application]:[com.jrdcom.jrdwfcmanager]:[com.jrdcom.jrdwfcmanager]:pid:3807:(PersistAP)
50652.964477 :
AP_Init:[added
application]:[com.tcl.dmvzwclient]:[com.tcl.dmvzwclient]:pid:3821:(PersistAP)
50697.041404 :
AP_Init:[added
application]:[com.android.phone]:[com.android.phone]:pid:3845:(PersistAP)
50770.493175 :
AP_Init:[activity]:[com.android.settings]:[com.android.settings/.FallbackHome]:pid:3866
52518.083441 :
AP_Init:[service]:[com.qualcomm.qcrilmsgtunnel]:[com.qualcomm.qcrilmsgtunnel/.QcrilMsgTunnelService]:pid:3971
52964.551046 :
AP_Init:[broadcast]:[org.codeaurora.ims]:[org.codeaurora.ims/.ImsServiceAutoboot]:pid:4062
55030.651105 :
BOOT_Animation:END
--------------end--------------------------
获取手机项目名:
adb shell cat
/system/build.prop
ro.product.brand=TCL
ro.product.name=A576CC
ro.product.device=Mickey6CC
抓取更多log
adb shell dumpsys
activity log a on
adb logcat -v time
-b all > log.tx
adb shell dumpsys >
dumpsys.txt
adb shell bugreport
> bugreport.txt
python正则表达式
http://blog.csdn.net/smilelance/article/details/6529950
cat /proc/zoneinfo
编译boot_image的命令
./makeTcl -t
Mickey6TFUMTS kernel
实践中发现还有某些同学不清楚如何检查字符串问题.再补充一下:
1.处理翻译bug,先根据测试提供的字符串找出stringid
2.根据stirngid到 wimdata_ng/wlanguage/src/string.xls 搜索,看string.xls中的内容是否符合预期.如果符合预期就说明
现在翻译是对的,不用再转到chengqiang处理.
3.string.xls中是对的,有可能是测试报bug的时候string.xls是KO的,现在string.xls更新后已经好了.那么在
最新版本上验证是否OK.如果还是有问题则按照xinxin方法检查模块是否加入翻译.
4.string.xls中没有搜索到相应字串或相应字串有问题,则说明是翻译有问题,根据实际情况到MSGM网站进行相应处理后将stringid加到bugcomment转到chengqiang处理.
注:因为MSGM网站是与很多项目共用,如某个字符串是需要更改原始英文的,更改后会影响到其他项目.请加强注意,与测试确认清楚是否必须更改,
把握不准的邮件抄上我.
cat .git/config
查看url= ssh://[email protected]/MSM8909/platform/frameworks/base.git
ifneq
($(TARGET_BUILD_VARIANT), user)
如何将android程序的权限提升到system权限?方法是这样的:
1、在AndroidManifest.xml中,在manifest加入android:sharedUserId="android.uid.system"。
2、在Android.mk中,將LOCAL_CERTIFICATE:= XXX修改成LOCAL_CERTIFICATE:= platform。
经过以上两步就可以把ap的权限提升到system权限了。
但是用这种方法提升权限有两个弊端,
如下:1、程序的拥有都必须有程序的源码;2、程序的拥有都还必须有android开发环境,就是说自己能make整个android系统。
adb logcat *:E打印出错log
df -h查硬盘空间
free -m查内存,按兆为单位输出内存的已用,未用,总共等结果
cat /proc/cpuinfo输出各处理器的详细信息
CLID网站用来查询plf中sdmid配的perso值
http://172.26.32.35/clid/software/clid/php/main.html账号密码都是read
git commit -m
"Initial commit of gittutor reposistory"
Git log
查看历史日志,包含每次的版本变化。每次版本变化对应一个commitid。
Git log -1
-1的意思是只显示一个commit,如果想显示5个,就-5。不指定的话,gitlog会从该commit一直往后显示。
Git log--stat –summary(显示每次版本的详细变化)
adb shell setenforce0关闭selinux
adb shell setenforce1开启selinux
getenforce获取当前selinux状态,permissive是关闭状态
同步代码出现错误时的操作:
git reset
88511c49765d947385c0dee06969d89bdd32abaa
git checkout -f &&
git clean -fd
repo sync -j8
查询对应的POP455C,
如:ifneq ($(filter POP455C POP455CTMOPixi445Cricket Pixi445CAN Pixi464GCricket,$(TARGET_PRODUCT)),)
需要在当前项目执行sourcebuild/envsetup.sh再执行choosecombo即可看到可选择的项目
MAC Address:
F4:8E:92:18:B4:25
password: quidway!@
将编译好的img烧入手机out/target/product/Mickey6TFUMTS
adb reboot
bootloader
fastboot devices
fastboot flash aboot
emmc_appsboot.mbn
fastboot flash boot
boot.img
fastboot flash
system system.img
fastboot flash
persist persist.img
fastboot flash
recovery recovery.img
fastboot flash cache
cache.img
fastboot flash
userdata userdata.img
fastboot flash
custpack custpack.img
fastboot flash
usbmsc usbdisk.img
fastboot reboot
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
out/target/product/A3A_VF/system/framework
本地拷贝cp -rf A B
创建txt文件:touch A.txt
更改文件名:mvfull_k39tv1_bsp.mk A502DL.mk
scp -rp services.jar
[email protected]:/home/lqyuan/Desktop/fc/false
scp -rp
services.jar.prof [email protected]:/home/lqyuan/Desktop/fc/false
从服务器拷贝命令:scpbuild.log [email protected]:/home/lqyuan/Desktop/log
scp -rp A3A_VF
[email protected]:/home/lqyuan/Desktop/liqing_A3A
冲突解决步骤:
1.在终端执行命令[email protected],密码为testonly,在/data/Idole4-bell目录下找到待合并冲突的git库;
2.执行命令:git grep '<<<<<<< HEAD' ,查找有冲突的文件;
3.用vi编译有冲突的文件,解决冲突,直至所有冲突解决完;
4.执行exit退出
查询服务器编译问题
在jenkins网站http://172.26.35.81:8080/上查询对应编译失败的版本
查找该版本填写的Parameters,找到对应的ip,然后在终端输入[email protected](对应IP),密码是:testonly,然后在cd进入/local/src然后寻找
编译的项目
查询apk是否安装成功:adbshell dumpsys package com.tct.camera
adb shell dumpsyspackage包名
查询apk安装的路径:adbshell pm path包名
lqyuan@SW2-YUANLIQI-D1:~$
adb shell pm path com.tct.camera
package:/system/priv-app/Camera_GApp/Camera_GApp.apk
查询源码所在分支:在根目录下cd.repo即在.repo下面
打开 manifest.xml文件即可查看分支
终端输入:$xdg-open strings.xls会选择默认的程序打开指定文件,跟双击打开效果一样。
终端启动Activity:adb shell am start -ncom.android.settings(package包名)/com.android.settings.Settings(待启动activity)&
adb shell am start
-n xxx/xxx &
反编译:
java -jar
/data/TOOLS/apktools/apktool_2.0.0rc3.jar d -s Elabel-overlay.apk
本机路径:
java -jar
/home/lqyuan/local/Tools/apktool_2.0.0rc3/apktool_2.0.0rc3.jar d -s
/home/lqyuan/Desktop/findapk/appcloud_oobe_telus-release_V2.11_with_logs.apk
在Linux终端执行命令:
ps x显示没有控制终端地进程(无响应的进程)
ps -e显示所有进程,环境变量
kill -9 [pid] -9表示强迫进程立即停止,通常用ps查看进程PID,用kill命令终止进程
git命令
回退:
git reset --hard HEAD^(回退到修改前的版本)
禁止apk运行
adb shell pm disablecom.mediatek.camera(包名)
启动apk运行
adb shell pm enable
com.mediatek.camera
跑MonkeyTest:
adb shell monkey -p
com.mediatek.camera --throttle 500 -s 10 -v -v -v 15000
搜索apk或者压缩包是否包含
zipinfo
Gallery_Global_v7.1.3.0.0494.0_signed_platformkey_alldpi.apk |grep
dcs_ver
全局搜:find/grep
grep "extends
IBluetooth" * -R
引号里是待搜索的字段,前提是进入该项目中
adb logcat -v time*:e抓错误日志
定向抓LOG,保存在文件夹中
adb logcat -v
threadtime >/local2/log/log.txt
修改数据库
cd
/data/data/com.android.providers.settings/databases/
sqlite3 settings.db
.help
select * from global
;
update global set
value="wifi" where name="airplane_mode_toggleable_radios";
MTK online
http://online.mediatek.com
网站用户名和密码:
1qaz2wsx
查看项目资讯是否正确:
/local2/projects/mtk82_92-kk-v1.0/mediatek/config/diabloxplus_kk/ProjectConfig.mk文本最后MTK_BUILD_VERNO= ALPS.KK1.MP1.V2.10
可以搜索:#CREATE_PROJECT_INFO
用adb连接上设备。如果是连接真实设备,需要有设备的root权限。
cd data/data
在这个目录下,可以看到每个应用程序都有自己的目录,目录名就是应用程序在AndroidManifest.xml文件中定义的包。
在每个目录下,一般有这么几个子目录:
databases :存放数据库
cache :存放缓存数据
files :存放应用程序自己控制的文件
lib :存放使用的包
对于Bluetooth而言主要关注如下两个路径:
/data/data/com.android.bluetooth,当要看里面的文档时
使用cat文档名
进行查看
/data/@btmtk dev_cache已配对列表中的蓝牙名
host_cache本地主机的蓝牙名
adbshell过后,可以通过输入cat/proc/cpuinfo查看CPU的信息
frameworks层的都是API,被package层的函数调用!
以Handler、Callback、Listener这三个词结尾的,都是利用callback机制来实现的
什么是aidl:aidl是Android Interface definition language的缩写,
一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口
应用程序使用AIDL的地方,几乎都和Service有关
find命令可以查看代码片段的位置(进入项目中去使用):
1、find.|xargs grep -i "mDeviceName"
2、sgrep-Inr "mDeviceName"
3、在命令中用“!”表示。该运算符表示查找不满足所给条件的文件
。例如: find ! –name ’tmp’
4、查找n天以前被访问过的所有文件:find-atime n(-aminn查找n分钟以前被访问过的所有文件。-atimen查找n天以前被访问过的所有文件。-cminn查找n分钟以前文件状
态被修改过的所有文件。-ctime n查找n天以前文件状态被修改过的所有文件。-mminn查找n分钟以前文件内容被修改过的所有文件。-mtimen查找n天以前文件内容被修改过的所有文件。)
5、在以下命令中,find将开始在当前目录(用“.”表示)中查找任何扩展名为“java”的文件:find. -name "*.java"
adb shell getprop
""
获取系统属性
将/local2/projects/predev-mt6582ll-dint/out/target/product/pop3_55中的所有的文件拷贝到公共机,就可以烧机了
(选择scatter)
66:c3:2c:a7:1a:b9
66:c3:3d:21:8b:73
66:24:2d:3d:35:62
66:c1:3d:7c:e2:6b
eclipse:
高亮度显示:shift+alt+o
pm命令
在system/bin目录下,是对于包名的显示及其他操作
pm path
com.zhaopin.social
pm list package
提Log给MTK的网站
https://fex.mediatek.com/LoginWebUser.aspx?ReturnUrl=%2fDownloadList.aspx
帐
号:Jrdcom-58
密
码:19991474lv
查看Linux系统版本:lsb_release-a或者cat/proc/version
截图命令:gnome-screenshot-a
全边:
Global ./makeMtk -t
-o=TARGET_BUILD_MDTYPE=fdd,TARGET_BUILD_VARIANT=eng hero2 new
CMCC ./makeMtk -t
-o=TARGET_BUILD_MDTYPE=cmcc,TARGET_BUILD_VARIANT=eng hero2 new
单边后Push到手机中:
1.AndroidL以前的操作
684 ./makeMtk -t
mm packages/apps/Bluetooth
685 adb remount
686 adb push
./out/target/product/hero8/custpack/JRD_custres/app/Bluetooth-res.apk
custpack/JRD_custres/app/
687 adb push
out/target/product/hero8/system/app/Bluetooth.apk system/app
2.AndroidL的操作
source
build/envsetup.sh
lunch选择分支
mmmpackages/apps/Bluetooth(路径)单边后再push到手机中
AndroidL全边的操作:
6582L软件分支的代码下载和编译如下:
1 . code download :
repo init -u
[email protected]:alps/manifest -m predev-mt6582ll-dint.xml
2编译:
a).编译modem:
cd modem/
./jrd_modem_build
b) .编译android,参
考附件的aosp
– Eng
version
• source
build/envsetup.sh
• lunch
full_pop3_55-eng
– Or you
could use lunch to choose combo
• make -j36
2>&1 | tee build.log
– User
version
• source
build/envsetup.sh
• lunch
full_pop3_55-user
– Or you
could use lunch to choose combo
• make -j36
2>&1 | tee build.log
– Userdebug
version
• source
build/envsetup.sh
• lunch
full_pop3_55-userdebug
– Or you
could use lunch to choose combo
• make -j36
2>&1 | tee build.log
jdk版本配置(开一个控制台输入一次仅对当次开的控制台有效)
export
PATH=/opt/jdk1.6.0_37/bin:$PATH
./makeMtk -t mm
frameworks/base/packages/SettingsProvider
1.KOA:请假等。http://koa.jrdcom.com/
2.Gerrit:http://gitweb.tcl-ta.com:8081/
3.Gitweb:http://gitweb.tcl-ta.com/
4.Bugzilla:http://bugzilla.tcl-ta.com/
5.epas:http://skillmatrixsh.cn.ta-mp.com/
6.Manpower:http://scmweb.tcl-ta.com/mpwt/
7.staffsearch:http://itcenter.cn.ta-mp.com/StaffInfo_Index.asp/
8.doc
tree:http://172.24.61.76/dx3/swd/
文件查找命令:
find .|xargs grep加字符串
拉代码命令:
repo init -u
[email protected]:alps/manifest.git -m .xml
单拉某个版本的代码repo init -u [email protected]:alps/manifest -mint/名字(项目名字)/版本.xml
repo init -u
[email protected]:alps/manifest -m int/yarisxl/vAG5.xml
路经http://gitweb.tcl-ta.com/gitweb-alps/?p=manifest.git;a=summary
-》tree
->mtk6589-mr1-global.xml
repo sync
全编译命令:
croo
jrdm
jrdm n
单独编译某个模块:在整个工程的根目录下找到packages/apps某个模块
单编译前也要执行sourcebuild/envsetup.sh
jrdmmm **模块名称
显示细节的编译命令:
source
build/envsetup.sh
./makeMtk -t
-o=TARGET_BUILD_VARIANT=eng,JRD_GEMINI_SUPPORT=yes,JRD_CU_SUPPORT=no,JRD_BUILD_MODEM=no
jrdsz89_we_jb2 new
./makeMtk -t
-o=TARGET_BUILD_MDTYPE=fdd,TARGET_BUILD_VARIANT=eng hero2 new
./makeMtk -t
-o=TARGET_BUILD_MDTYPE=cmcc,TARGET_BUILD_VARIANT=eng hero2 new
本地编译后的版本:
进行单编后,各个模块输出都在out/target/
共享机子上把lk.bin修改为uboot.img
直接拷贝到手机上
adb remount
adb push
./out/target/product/diablox/custpack/JRD_custres/app/TCLWatchDog-res.apk
custpack/JRD_custres/app/;
adb push
out/target/product/diablox/system/app/custpack/TCLWatchDog.apk
system/app/
zip /local/abc.zip`find . -maxdepth 1 ! -type d`本地打包命令,便于本地刷机用
上传代码
在mediatek目录下/local/scm_tools/tools/patch_delivery_cli.php -pmtk6589-cmcc-td-v1.0-dint -fFMRadio/src/com/mediatek/FMRadio/FMRadioActivity.java
Bug Number:
patch comments:
.
Module_Impact:
.
Test_Suggestion:
.
Solution:.
Test_Report:
.
.
.
git push
ssh://[email protected]:29418/mtk6592/packages/apps/Bluetooth.git
HEAD:refs/for/mt6592-android4.4-fsr-v1.0
MTK_FM_SHORT_ANTENNA_SUPPORT有的为yes有点为no需要查看一下
1.在根目录下
执行 .repo查看关于版本的和分支的信息
2.提交代码前,想查看
修改的文件 使用 git status | grep文件关键字
git diff文件名
查看修改的地方
回退时
执行 git reset HEAD^命令删除上传的log后再
进行重复上传操作
3.在mediatek目录下patch_delivery_cli.php -p <分支名>-f <更新的文
件绝对路经>
例如:patch_delivery_cli.php-p mtk6589-cmcc-td-v1.0-dint -fFMRadio/src/com/mediatek/FMRadio/FMRadioActivity.java
4、用git上传代码。输入:gitpush ssh://[email protected]:29418/<模块名在根目录下用.repo查看>.gitHEAD:refs/for/<分支名>。模块
名可在.repo/manifest.xml中的name中查到,为离该模块最近的一个路径的name。例如在diabloXTD提交代码git pushssh://[email protected]:29418/mtk6589/mediatek.git HEAD:refs/for/mtk6589-cmcc-td-v1.0-dint。
5、上传成功后,Gerrit中可以看到状态的改变,然后cc给teamleaderreview。
6、review完后,点击submit。
从user模式到开发者模式
*#*#212018#*#*root一下
查看软件的版本:
*#3228#
提代码(patch)详细步骤:
liqing.yuan@aclgcl-ubnt:/local2/projects$
cd mt6592-android4.4-fsr-v1.0/
liqing.yuan@aclgcl-ubnt:/local2/projects/mt6592-android4.4-fsr-v1.0$
cd packages/apps/Bluetooth/
liqing.yuan@aclgcl-ubnt:/local2/projects/mt6592-android4.4-fsr-v1.0/packages/apps/Bluetooth$
ls
AndroidManifest_test.xml
AndroidManifest.xml AndroidManifest.xml~ Android.mk CleanSpec.mk
jni res src test_apps tests
liqing.yuan@aclgcl-ubnt:/local2/projects/mt6592-android4.4-fsr-v1.0/packages/apps/Bluetooth$
/local2/scm_tools/tools/patch_delivery_cli.php -p
mt6592-android4.4-fsr-v1.0 -f AndroidManifest.xml
Bug Number:877621
patchcomments:[Force close][3rd Evernote_v 5.8]Share the video file viabluetooth,MSprompt forcibly closed.
.
Please chose the bug
root cause:
1-Unknown_Today
2-Architecture
3-Specification
4-Design
5-Coding
6-Regression
7-Evolution
Your choise:5
Module_Impact:bluetooth
.
Test_Suggestion:test
ok
.
Solution:add
permission
.
Test_Report:test ok
.
Please chose the Bug
category:
1-MTK platform
issue
2-Android
platform issue
3-3rd party
issue
4-JRD bug
Your choise:2
[detached HEADed1e3f6] ###%%%comment:[Force close][3rd Evernote_v 5.8]Share thevideo file via bluetooth,MSprompt forcibly closed. ###%%%bug number:877621 ###%%%productname:mt6592-android4.4-fsr-v1.0 ###%%%root cause:Coding ###%%%Bugcategory:Android platform issue ###%%%Module_Impact:bluetooth###%%%Test_Suggestion:test ok ###%%%Solution:add permission###%%%Test_Report:test ok ###%%%VAL Can Test:Yes
1 file changed, 3
insertions(+)
liqing.yuan@aclgcl-ubnt:/local2/projects/mt6592-android4.4-fsr-v1.0/packages/apps/Bluetooth$
git push
ssh://[email protected]:29418/mtk6592/packages/apps/Bluetooth.git
HEAD:refs/for/mt6592-android4.4-fsr-v1.0
Counting objects: 5,
done.
Delta compression
using up to 8 threads.
Compressing objects:
100% (3/3), done.
Writing objects:
100% (3/3), 653 bytes, done.
Total 3 (delta 2),
reused 0 (delta 0)
remote: Resolving
deltas: 100% (2/2)
remote: Processing
changes: new: 1, refs: 1, done
remote: (W) ed1e3f6:
commit subject >65 characters; use shorter first paragraph
remote:
remote: New
Changes:
remote:
http://gerrit.tcl-ta.com:8081/203928
remote:
To
ssh://[email protected]:29418/mtk6592/packages/apps/Bluetooth.git
* [new branch]
HEAD -> refs/for/mt6592-android4.4-fsr-v1.0
How to download
the view from github :
repo init -u
[email protected]:alps/manifest -m
repo sync
can be one of the following list:
mt6735-android5.0-dint-v1.0.xml // arm 64
bit dint branch, share folder : Pop3-5.5, Pop3-5
mt6735-android5.0-dev-v1.0.xml // arm 64
bit dev branch for custpack, share folder : Pop3-5.5, Pop3-5
mt6735-android5.0-arm32-dint-v1.0.xml // arm 32 bit dint
branch, share folder : Pop3-5.5, Pop3-5
Sample for
pop3-5.5 known version :
repo
init -u [email protected]:alps/manifest -m int/pop3_55/vAA1.xml
repo
init -u [email protected]:alps/manifest -m int/pop3_55/vAA1-W-EU.xml
Sample for
pop3-5.5 known version :
repo
init -u [email protected]:alps/manifest -m int/pop3_5/vCA1.xml
repo
init -u [email protected]:alps/manifest -m int/pop3_5/vCA1-D-EU.xml
How to build :
i).
firstly, build modem
cd
modem/
./jrd_modem_build -p projectname -b bandname -m buildmode
parameter list :
-p projectname
value can be [ pop3_55 | pop3_5]
-b bandname
value can be [ EU | US ]
-m buildmode
value can be [ eng | user ]
ii) .
secondly, four steps to build android
1. cd
code_path
2. source
build/envsetup.sh
3.
jrd_choosemmitest
run this cmd
if build mini version, or skip it.
4 . lunch
select
project when lunch :
full_pop3_55-eng : for build eng version
full_pop3_55-userdebug : for build userdebug version
full_pop3_55-user : for build user version
full_pop3_5-eng : for build eng version
full_pop3_5-userdebug : for build userdebug version
full_pop3_5-user : for build user version
lunch
parameter :
1) user2root
: switch between user mode and eng mode, only used on user
version.
value can be [ yes | no | ignore ].
yes :
support user2root switch
no : not
support user2root switch
ignore:
use default value in source code
5.
to build
all:
make
-j32 2>&1 | tee build.log
to build
preloader:
make
-j32 pl 2>&1 | tee pl.log
to build lk:
make
-j32 lk 2>&1 | tee lk.log
to build
kernel:
make
-j32 kernel 2>&1 | tee kernel.log
Git的Patch功能
UNIX世界的软件开发大多都是协作式的,因此,Patch(补丁)是一个相当重要的东西,因为几乎所有的大型UNIX项目的普通贡献者,都是通过Patch来提交代码的。作为最重要的开源项目之一,Linux,也是这样的。普通开发者从软件仓库clone下代码,然后写入代码,做一个Patch,
最后用E-mail发给LinuxKernel的维护者就好了。Git最初作为Linux的版本控制工具,提供了透明、完整、稳定的Patch功能。
我们先介绍一下Patch是什么。如果一个软件有了新版本,我们可以完整地下载新版本的代码进行编译安装。然而,像LinuxKernel这样的大型项目,代码即使压缩,也超过70MB,每次全新下载是有相当大的代价的。然而,每次更新变动的代码可能不超过1MB,因此,我们只
要能够有两个版本代码的diff的数据,应该就可以以极低的代价更新程序了。因此,LarryWall开发了一个工具:patch。它可以根据一个diff文件进行版本更新。
不过在git中,我们没有必要直接使用diff和patch来做补丁,这样做既危险又麻烦。git提供了两种简单的patch方案。一是用gitdiff生成的标准patch,二是gitformat-patch生成的Git专用Patch。
1.gitdiff生成的标准patch
我们可以首先用gitdiff制作一个patch。本文示例的工作目录里最初有一个文件a,内容是“Thisis the file a.”,放置在master分支中。为了修改代码,我们一般的做法是建立一个新分支:
sweetdum@sweetdum-ASUS:~/GitEx$
git branch Fix
sweetdum@sweetdum-ASUS:~/GitEx$
git checkout Fix
Switched to branch
'Fix'
接下来我们在a文件里面追加一行,然后执行gitdiff。
sweetdum@sweetdum-ASUS:~/GitEx$
echo 'Fix!!!'>>a
sweetdum@sweetdum-ASUS:~/GitEx$
git diff
diff --git a/a b/a
index
4add65f..0d295ac 100644
--- a/a
+++ b/a
@@ -1 +1,2 @@
This is the file a.
+Fix!!!
我们看到了Gitdiff的输出,这是一个非常典型的Patch式diff。这样我们可以直接把这个输出变为一个Patch:
sweetdum@sweetdum-ASUS:~/GitEx$
git commit -a -m "Fix"
[Fix b88c46b] Fix
1 files changed, 1
insertions(+), 0 deletions(-)
sweetdum@sweetdum-ASUS:~/GitEx$
git diff master > patch
sweetdum@sweetdum-ASUS:~/GitEx$
git checkout master
Switched to branch
'master'
我们现在有一个patch文件,并且签出了master,接下来我们可以使用gitapply来应用这个patch。当然了,实际应用中,我们不会这样在一个分支建patch,到另一个分支去应用,因为只有merge一下就好了。我们现
在权当没有这个Fix分支。一般情况下,为了保护master,我们会建立一个专门处理新交来的patch的分支:
sweetdum@sweetdum-ASUS:~/GitEx$
git branch PATCH
sweetdum@sweetdum-ASUS:~/GitEx$
git checkout PATCH
Switched to branch
'PATCH'
sweetdum@sweetdum-ASUS:~/GitEx$
git apply patch
sweetdum@sweetdum-ASUS:~/GitEx$
git commit -a -m "Patch Apply"
[PATCH 9740af8]
Patch Apply
1 files changed, 1
insertions(+), 0 deletions(-)
看,现在我们在PATCH分支中应用了这个补丁,我们可以把PATCH分支和Fix比对一下,结果肯定是什么也没有,说明PATCH分支和Fix分支完全一样。patch应用成功。即使有多个文件gitdiff也能生成一个patch。
2.gitformat-patch生成的git专用补丁。
我们同样用上面那个例子的工作目录,这次,我们在Fix分支中的a添加了新行之后,用gitformat-patch生成一个patch。
sweetdum@sweetdum-ASUS:~/GitEx$
git checkout Fix
Switched to branch
'Fix'
sweetdum@sweetdum-ASUS:~/GitEx$
echo 'Fix!!!'>>a
sweetdum@sweetdum-ASUS:~/GitEx$
git commit -a -m "Fix1"
[Fix 6991743] Fix1
1 files changed, 1
insertions(+), 0 deletions(-)
sweetdum@sweetdum-ASUS:~/GitEx$
git format-patch -M master
0001-Fix1.patch
gitformat-patch的-M选项表示这个patch要和那个分支比对。现在它生成了一个patch文件,我们看看那是什么:
sweetdum@sweetdum-ASUS:~/GitEx$
cat 0001-Fix1.patch
From
6991743354857c9a6909a253e859e886165b0d90 Mon Sep 17 00:00:00 2001
From: Sweetdumplings
Date: Mon, 29 Aug
2011 14:06:12 +0800
Subject: [PATCH]
Fix1
---
a | 1 +
1 files changed, 1
insertions(+), 0 deletions(-)
diff --git a/a b/a
index
4add65f..0d295ac 100644
--- a/a
+++ b/a
@@ -1 +1,2 @@
This is the file a.
+Fix!!!
--
1.7.4.1
看,这次多了好多东西,不仅有diff的信息,还有提交者,时间等等,仔细一看你会发现,这是个E-mail的文件,你可以直接发送它!这种patch,我们要用gitam来应用。
sweetdum@sweetdum-ASUS:~/GitEx$
git checkout master
Switched to branch
'master'
sweetdum@sweetdum-ASUS:~/GitEx$
git branch PATCH
sweetdum@sweetdum-ASUS:~/GitEx$
git checkout PATCH
sweetdum@sweetdum-ASUS:~/GitEx$
git am 0001-Fix1.patch
Applying: Fix1
sweetdum@sweetdum-ASUS:~/GitEx$
git commit -a -m "PATCH apply"
在提交了补丁之后,我们可以再看看目前文件a的情况:
sweetdum@sweetdum-ASUS:~/GitEx$
cat a
This is the file a.
Fix!!!
果然,多了一个Fix!!!
不过要注意的是,如果master与Fix分支中间有多次提交,它会针对每次提交生成一个patch。
3.两种patch的比较:
兼容性:很明显,gitdiff生成的Patch兼容性强。如果你在修改的代码的官方版本库不是Git管理的版本库,那么你必须使用gitdiff生成的patch才能让你的代码被项目的维护人接受。
除错功能:对于gitdiff生成的patch,你可以用gitapply --check查看补丁是否能够干净顺利地应用到当前分支中;如果gitformat-patch生成的补丁不能打到当前分支,gitam会给出提示,并协助你完成打补丁工作,你也可以使用gitam -3进行三方合并,详细的做法可以参考git手册或者《Progit》。从这一点上看,两者除错功能都很强。
版本库信息:由于gitformat-patch生成的补丁中含有这个补丁开发者的名字,因此在应用补丁时,这个名字会被记录进版本库,显然,这样做是恰当的。因此,目前使用Git的开源社区往往建议大家使用format-patch生成补丁。