1、用adb命令启动apk:
在某些情况下预置到源码的apk没有图标显示在Luancher上,我们可以用反编译工具获取apk的包名和启动activity,然后用adb命令:命令中的包名类名换成对应的apk的包名类名
$ adb shell $ am start -n {包(package)名}/{包名}.{活动(activity)名称}
adb shell am start -n com.android.otaupdater/com.android.otaupdater.MainActivity
通过命令行执行adb shell am broadcast发送广播通知。
adb shell am broadcast 后面的参数有:
[-a <ACTION>]
[-d <DATA_URI>]
[-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
[-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
[-n <COMPONENT>]
[-f <FLAGS>] [<URI>]
2、用adb获取SetitingsProvider数据库文件
Android L (5.1)及以前的版本
Settings参数保存在 /data/data/com.android.providers.settings/databases/settings.db里,里面有三个表global, system, secure.
通常这样查看数据
adb shell sqlite3 data/data/com.android.providers.settings/databases/settings.db “select * from secure”
或者adb pull settings.db到本地,然后用sqlite expert打开即可。
Android M (6.0)开始出现变化
adb shell 进入设备
不同用户放不同的路径下,如果没有创建新用户,则在**/data/system/users/0**下
settings_global.xml, settings_system.xml, settings_secure.xml
我们可以直接通过cat命令去查看也可以adb pull 到本地。
3、用prop命令得到系统的属性值
$ adb shell
getprop persist.sys.cam.has.flash //查看手机内部的值
setprop persist.sys.cam.has.flash false //设置手机内部的值
4、用adb 查看并解决5037端口被占用
一、首先打开cmd命令行,用netstat -aon|findstr 5037
命令查看占用5037端口的进程
比如我的是:
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 3676
二、接下来查看这个占用端口进程执行的任务用命令tasklist /fi "PID eq 3676"
原来是这个任务占用了我的端口
svchost.exe 3676 Services 0 13,800 K
三、干掉这个进程,使用命令taskkill /pid 3676 /f
,然后你会发现adb 可以正常使用了
5、使用adb命令截图
adb shell /system/bin/screencap -p /sdcard/screenshot.png
6、查看当前界面运行在哪个Acitivity上
adb shell dumpsys activity | grep "Running activities" -A 7
7、展讯平台制作差分包的命令
6.0系统:
./build/tools/releasetools/ota_from_target_files --block -i old.zip -k build/target/product/security/release/releasekey new.zip update.zip
7.0系统:
./build/tools/releasetools/ota_from_target_files -i old.zip -k build/target/product/security/release/releasekey new.zip update.zip
差分包编译生成的位置在:
out\target\product\sp9832a_2h11\obj\PACKAGING\target_files_intermediates
8、导出代码中所有的语言资源文件
find ./ -name '*string*.xml' -or -name 'array*.xml' -or -name 'numeric_operator.xml' | xargs -i cp --parents -rf {} ./res_xml_all/
导出俄语的:
find <folder name>/ -regex ".*res\(_.*\)?\/values\(-\(ru\).*\)?\/.*\(string\|array\).*.xml" | xargs -I % cp --parents % <output folder>
9、快速查找代码中的字符
find ./packages/apps/ -name "*.xml" | xargs grep --color "多模式"
10、给apk 签名
一般的系统签名:
java -jar out/host/linux-x86/framework/signapk.jar platform.x509.pem platform.pk8 test.apk test2.apk
展讯平台7.0系统签名需要多引用一个lib文件
java -Xmx2048m -Djava.library.path="out/host/linux-x86/lib64" -jar out/host/linux-x86/framework/signapk.jar -w build/target/product/security/platform.x509.pem build/target/product/security/platform.pk8 vendor/sprd/partner/prebuilt_apps/TouchPal/TouchPal_5.8.4.4.20170405143955_Global_OEM.aligned.apk xx_sign.apk
11、根据包名显示apk 的路径
pm -p com.android.packagename