Long Luo's Life Notes

每一天都是奇迹

代码检索工具

codota

http://www.codota.com/

SearchCode

Proguard

Proguard项目地址:

http://proguard.sourceforge.net/

Proguard自动生成工具:

http://proguard.herokuapp.com/

gitignore

gitignore自动生成工具:

https://www.gitignore.io/

Android

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

# Created by https://www.gitignore.io/api/android

### Android ###
# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# Intellij
*.iml
.idea/workspace.xml
.idea/libraries

# Keystore files
*.jks

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

### Android Patch ###
gen-external-apklibs
阅读全文 »

Java基础:

计算机基础:

http://www.cnblogs.com/swiftma/

https://course.tianmaying.com/all

图像识别:

http://www.cnblogs.com/Imageshop/

http://blog.csdn.net/lmj623565791

https://drakeet.me/

http://blog.piasy.com/archive/

http://www.infoq.com/cn/

http://yanbober.github.io/

http://blog.csdn.net/zhangerqing?viewmode=contents

Java Image Process

http://www.jhlabs.com/index.html

Design Patterns

http://www.runoob.com/design-pattern/observer-pattern.html

http://androidxref.com/

http://weishu.me/archives/

http://www.blogjava.net/

http://blog.piasy.com/archive/

http://www.cnblogs.com/Imageshop/

阅读全文 »

史铁生的《我与地坛》是我很喜欢的一篇文章,每次我感到低谷和失望时,就会拿出这篇文章来读一读,积蓄力量,奋力前行!

我在好几篇小说中都提到过一座废弃的古园,实际就是地坛。许多年前旅游业还没有开展,园子荒芜冷落得如同一片野地,很少被人记起。

地坛离我家很近。或者说我家离地坛很近。总之,只好认为这是缘分。地坛在我出生前四百多年就坐落在那儿了,而自从我的祖母年轻时带着我父亲来到北京,就一直住在离它不远的地方——五十多年间搬过几次家,可搬来搬去总是在它周围,而且是越搬离它越近了。我常觉得这中间有着宿命的味道:仿佛这古园就是为了等我,而历尽沧桑在那儿等待了四百多年。

它等待我出生,然后又等待我活到最狂妄的年龄上忽地残废了双腿。四百多年里,它剥蚀了古殿檐头浮夸的琉璃,淡褪了门壁上炫耀的朱红,坍圮了一段段高墙又散落了玉砌雕栏,祭坛四周的老柏树愈见苍幽,到处的野草荒藤也都茂盛得自在坦荡。这时候想必我是该来了。十五年前的一个下午,我摇着轮椅进入园中,它为一个失魂落魄的人把一切都准备好了。那时,太阳循着亘古不变的路途正越来越大,也越红。在满园弥漫的沉静光芒中,一个人更容易看到时间,并看见自己的身影。

自从那个下午我无意中进了这园子,就再没长久地离开过它。我一下子就理解了它的意图。正如我在一篇小说中所说的:“在人口密聚的城市里,有这样一个宁静的去处,像是上帝的苦心安排。”

两条腿残废后的最初几年,我找不到工作,找不到去路,忽然间几乎什么都找不到了,我就摇了轮椅总是到它那儿去,仅为着那儿是可以逃避一个世界的另一个世界。我在那篇小说中写道:“没处可去我便一天到晚耗在这园子里。跟上班下班一样,别人去上班我就摇了轮椅到这儿来。园子无人看管,上下班时间有些抄近路的人们从园中穿过,园子里活跃一阵,过后便沉寂下来。”“园墙在金晃晃的空气中斜切下一溜荫凉,我把轮椅开进去,把椅背放倒,坐着或是躺着,看书或者想事,撅一杈树枝左右拍打,驱赶那些和我一样不明白为什么要来这世上的小昆虫。”“蜂儿如一朵小雾稳稳地停在半空;蚂蚁摇头晃脑捋着触须,猛然间想透了什么,转身疾行而去;瓢虫爬得不耐烦了,累了祈祷一回便支开翅膀,忽悠一下升空了;树干上留着一只蝉蜕,寂寞如一间空屋;露水在草叶上滚动,聚集,压弯了草叶轰然坠地摔开万道金光。”“满园子都是草木竞相生长弄出的响动,窸窸窣窣片刻不息。”这都是真实的记录,园子荒芜但并不衰败。

除去几座殿堂我无法进去,除去那座祭坛我不能上去而只能从各个角度张望它,地坛的每一棵树下我都去过,差不多它的每一米草地上都有过我的车轮印。无论是什么季节,什么天气,什么时间,我都在这园子里呆过。有时候呆一会儿就回家,有时候就呆到满地上都亮起月光。记不清都是在它的哪些角落里了,我一连几小时专心致志地想关于死的事,也以同样的耐心和方式想过我为什么要出生。这样想了好几年,最后事情终于弄明白了:一个人,出生了,这就不再是一个可以辩论的问题,而只是上帝交给他的一个事实;上帝在交给我们这件事实的时候,已经顺便保证了它的结果,所以死是一件不必急于求成的事,死是一个必然会降临的节日。这样想过之后我安心多了,眼前的一切不再那么可怕。比如你起早熬夜准备考试的时候,忽然想起有一个长长的假期在前面等待你,你会不会觉得轻松一点?并且庆幸并且感激这样的安排?

剩下的就是怎样活的问题了,这却不是在某一个瞬间就能完全想透的、不是一次性能够解决的事,怕是活多久就要想它多久了,就像是伴你终生的魔鬼或恋人。所以,十五年了,我还是总得到那古园里去,去它的老树下或荒草边或颓墙旁,去默坐,去呆想,去推开耳边的嘈杂理一理纷乱的思绪,去窥看自己的心魂。十五年中,这古园的形体被不能理解它的人肆意雕琢,幸好有些东西是任谁也不能改变它的。譬如祭坛石门中的落日,寂静的光辉平铺的一刻,地上的每一个坎坷都被映照得灿烂;譬如在园中最为落寞的时间,一群雨燕便出来高歌,把天地都叫喊得苍凉;譬如冬天雪地上孩子的脚印,总让人猜想他们是谁,曾在哪儿做过些什么、然后又都到哪儿去了;譬如那些苍黑的古柏,你忧郁的时候它们镇静地站在那儿,你欣喜的时候它们依然镇静地站在那儿,它们没日没夜地站在那儿,从你没有出生一直站到这个世界上又没了你的时候;譬如暴雨骤临园中,激起一阵阵灼烈而清纯的草木和泥土的气味,让人想起无数个夏天的事件;譬如秋风忽至,再有一场早霜,落叶或飘摇歌舞或坦然安卧,满园中播散着熨帖而微苦的味道。味道是最说不清楚的,味道不能写只能闻,要你身临其境去闻才能明了。味道甚至是难于记忆的,只有你又闻到它你才能记起它的全部情感和意蕴。所以我常常要到那园子里去。

阅读全文 »

Android Asset Packaging Tool

AAPT命令格式

./appt

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
E:\Android\SDK\build-tools\24.0.1>aapt
Android Asset Packaging Tool

Usage:
aapt l[ist] [-v] [-a] file.{zip,jar,apk}
List contents of Zip-compatible archive.

aapt d[ump] [--values] [--include-meta-data] WHAT file.{apk} [asset [asset ...]]
strings Print the contents of the resource table string pool in the APK.
badging Print the label and icon for the app declared in APK.
permissions Print the permissions from the APK.
resources Print the resource table from the APK.
configurations Print the configurations in the APK.
xmltree Print the compiled xmls in the given assets.
xmlstrings Print the strings of the given compiled xml assets.

aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \
[-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \
[--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] \
[--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \
[--rename-manifest-package PACKAGE] \
[--rename-instrumentation-target-package PACKAGE] \
[--utf16] [--auto-add-overlay] \
[--max-res-version VAL] \
[-I base-package [-I base-package ...]] \
[-A asset-source-dir] [-G class-list-file] [-P public-definitions-file] \
[-D main-dex-class-list-file] \
[-S resource-sources [-S resource-sources ...]] \
[-F apk-file] [-J R-file-dir] \
[--product product1,product2,...] \
[-c CONFIGS] [--preferred-density DENSITY] \
[--split CONFIGS [--split CONFIGS]] \
[--feature-of package [--feature-after package]] \
[raw-files-dir [raw-files-dir] ...] \
[--output-text-symbols DIR]

Package the android resources. It will read assets and resources that are
supplied with the -M -A -S or raw-files-dir arguments. The -J -P -F and -R
options control which files are output.

aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]
Delete specified files from Zip-compatible archive.

aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]
Add specified files to Zip-compatible archive.

aapt c[runch] [-v] -S resource-sources ... -C output-folder ...
Do PNG preprocessing on one or several resource folders
and store the results in the output folder.

aapt s[ingleCrunch] [-v] -i input-file -o outputfile
Do PNG preprocessing on a single file.

aapt v[ersion]
Print program version.

Modifiers:
-a print Android-specific data (resources, manifest) when listing
-c specify which configurations to include. The default is all
configurations. The value of the parameter should be a comma
separated list of configuration values. Locales should be specified
as either a language or language-region pair. Some examples:
en
port,en
port,land,en_US
-d one or more device assets to include, separated by commas
-f force overwrite of existing files
-g specify a pixel tolerance to force images to grayscale, default 0
-j specify a jar or zip file containing classes to include
-k junk path of file(s) added
-m make package directories under location specified by -J
-u update existing packages (add new, replace older, remove deleted files)
-v verbose output
-x create extending (non-application) resource IDs
-z require localization of resource attributes marked with
localization="suggested"
-A additional directory in which to find raw asset files
-G A file to output proguard options into.
-D A file to output proguard options for the main dex into.
-F specify the apk file to output
-I add an existing package to base include set
-J specify where to output R.java resource constant definitions
-M specify full path to AndroidManifest.xml to include in zip
-P specify where to output public resource definitions
-S directory in which to find resources. Multiple directories will be scanned
and the first match found (left to right) will take precedence.
-0 specifies an additional extension for which such files will not
be stored compressed in the .apk. An empty string means to not
compress any files at all.
--debug-mode
inserts android:debuggable="true" in to the application node of the
manifest, making the application debuggable even on production devices.
--include-meta-data
when used with "dump badging" also includes meta-data tags.
--pseudo-localize
generate resources for pseudo-locales (en-XA and ar-XB).
--min-sdk-version
inserts android:minSdkVersion in to manifest. If the version is 7 or
higher, the default encoding for resources will be in UTF-8.
--target-sdk-version
inserts android:targetSdkVersion in to manifest.
--max-res-version
ignores versioned resource directories above the given value.
--values
when used with "dump resources" also includes resource values.
--version-code
inserts android:versionCode in to manifest.
--version-name
inserts android:versionName in to manifest.
--replace-version
If --version-code and/or --version-name are specified, these
values will replace any value already in the manifest. By
default, nothing is changed if the manifest already defines
these attributes.
--custom-package
generates R.java into a different package.
--extra-packages
generate R.java for libraries. Separate libraries with ':'.
--generate-dependencies
generate dependency files in the same directories for R.java and resource package
--auto-add-overlay
Automatically add resources that are only in overlays.
--preferred-density
Specifies a preference for a particular density. Resources that do not
match this density and have variants that are a closer match are removed.
--split
Builds a separate split APK for the configurations listed. This can
be loaded alongside the base APK at runtime.
--feature-of
Builds a split APK that is a feature of the apk specified here. Resources
in the base APK can be referenced from the the feature APK.
--feature-after
An app can have multiple Feature Split APKs which must be totally ordered.
If --feature-of is specified, this flag specifies which Feature Split APK
comes before this one. The first Feature Split APK should not define
anything here.
--rename-manifest-package
Rewrite the manifest so that its package name is the package name
given here. Relative class names (for example .Foo) will be
changed to absolute names with the old package so that the code
does not need to change.
--rename-instrumentation-target-package
Rewrite the manifest so that all of its instrumentation
components target the given package. Useful when used in
conjunction with --rename-manifest-package to fix tests against
a package that has been renamed.
--product
Specifies which variant to choose for strings that have
product variants
--utf16
changes default encoding for resources to UTF-16. Only useful when API
level is set to 7 or higher where the default encoding is UTF-8.
--non-constant-id
Make the resources ID non constant. This is required to make an R java class
that does not contain the final value but is used to make reusable compiled
libraries that need to access resources.
--shared-lib
Make a shared library resource package that can be loaded by an application
at runtime to access the libraries resources. Implies --non-constant-id.
--app-as-shared-lib
Make an app resource package that also can be loaded as shared library at runtime.
Implies --non-constant-id.
--error-on-failed-insert
Forces aapt to return an error if it fails to insert values into the manifest
with --debug-mode, --min-sdk-version, --target-sdk-version --version-code
and --version-name.
Insertion typically fails if the manifest already defines the attribute.
--error-on-missing-config-entry
Forces aapt to return an error if it fails to find an entry for a configuration.
--output-text-symbols
Generates a text file containing the resource symbols of the R class in the
specified folder.
--ignore-assets
Assets to be ignored. Default pattern is:
!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~
--skip-symbols-without-default-localization
Prevents symbols from being generated for strings that do not have a default
localization
--no-version-vectors
Do not automatically generate versioned copies of vector XML resources.
--private-symbols
Java package name to use when generating R.java for private resources.
阅读全文 »

By Long Luo

ADB(Android Debug Bridge) 工具是Android开发中使用很频繁也是非常重要的一个工具,用于手机与电脑的通信。

安装 ADB 工具:

在计算机上安装 Android SDK 或者仅安装 ADB 工具。从 Android 官方网站或者其他可信赖的来源获取它们。

  • 如果你使用 macOS 或 Linux,你可以通过终端使用系统包管理器或 Homebrew 安装 ADB。
  • 如果你使用 Windows,你可以下载 Android Studio ,它包含了 ADB 工具。

连接 Android 设备:

使用 USB 线将 Android 设备连接到计算机上。

在 Android 设备上打开开发者选项。这通常需要在设备设置中多次点击“关于手机” -> “版本号”或者类似的选项。一旦开启,返回设置菜单并找到“开发者选项”。

在“开发者选项”中,启用“USB 调试”。

查看当前设备

1
adb devices

显示已连接设备的列表。

1
2
List of devices attached
192.168.20.198:5555 device

连接设备

通过TCP端口连接

1
adb connect 192.168.20.168:5555

断开连接

1
adb disconnect 

查看设备连接IP地址

1
adb shell ifconfig wlan0

wlan0 Link encap:Ethernet HWaddr 40:80:e1:18:07:79 Driver rtl8852bu inet addr:192.168.20.210 Bcast:192.168.23.255 Mask:255.255.252.0 inet6 addr: fe80::f1f2:d9b0:957f:fbc6/64 Scope: Link inet6 addr: 240e:3b3:30b0:be81:2dd0:f286:b5b9:9462/64 Scope: Global inet6 addr: 240e:3b3:30b0:be81:6594:53f2:16ad:26f8/64 Scope: Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:87307 errors:0 dropped:28 overruns:0 frame:0 TX packets:149859 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:32578487 TX bytes:60666878

adb shell netcfg

/system/bin/sh: netcfg: inaccessible or not found

设备 ID

ANDROID_ID

1
adb shell settings get secure android_id

查看系统信息

读取系统的各种文件配置信息,比如 /data/anr/traces.txt

1
adb shell cat /system/build.prop
1
adb shell getprop

比如:

1
2
3
4
adb shell getprop ro.product.model //获取设备型号
adb shell getprop ro.build.version.release //系统版本
adb shell getprop ro.product.board //CPU型号
adb shell getprop ro.serialno //序列号

查看设备信息

屏幕

屏幕信息

1
adb shell dumpsys display
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DISPLAY MANAGER (dumpsys display)
mOnlyCode=false
mSafeMode=false
mPendingTraversal=false
mViewports=[DisplayViewport{type=INTERNAL, valid=true, isActive=true, displayId=0, uniqueId='local:0', physicalPort=0, orientation=0, logicalFrame=Rect(0, 0 - 3840, 2160), physicalFrame=Rect(0, 0 - 3840, 2160), deviceWidth=3840, deviceHeight=2160}]
mDefaultDisplayDefaultColorMode=0
mWifiDisplayScanRequestCount=0
mStableDisplaySize=Point(3840, 2160)
mMinimumBrightnessCurve=[(0.0, 0.0), (2000.0, 50.0), (4000.0, 90.0)]


Display States: size=1
Display Id=0
Display State=ON
Display Brightness=0.7992125
Display SdrBrightness=0.7992125

分辨率

1
adb shell wm size
1
Physical size: 3840x2160

屏幕密度 density

1
adb shell wm density

Physical density: 320

CPU 信息

1
adb shell cat /proc/cpuinfo

processor : 0 BogoMIPS : 48.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x2 CPU part : 0xd05 CPU revision : 0

processor : 1 BogoMIPS : 48.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x2 CPU part : 0xd05 CPU revision : 0

内存信息

1
adb shell cat /proc/meminfo

MemTotal: 7996532 kB MemFree: 2505308 kB MemAvailable: 4238664 kB

查看已安装应用

列出已经安装的应用程序

1
adb shell pm list packages

如果你想筛选出包含特定关键词的应用程序,可以使用以下命令:

1
adb shell pm list packages | grep keyword

adb shell pm list packages adb shell pm list packages -s //系统应用 adb shell pm list packages -3 //第三方应用 adb shell pm list packages | grep qq //过滤查找qq应用

卸载普通应用程序

卸载应用程序:

1
adb uninstall package_name

将 package_name 替换为你想要卸载的应用程序的包名。你可以通过之前提到的 adb shell pm list packages 命令来获取应用程序的包名列表。

示例:

假设你想卸载名为 “com.example.app” 的应用程序,命令将如下所示:

1
adb uninstall com.example.app

确认卸载:

执行命令后,ADB 会尝试卸载该应用程序。等待一段时间,命令提示符/终端会显示成功或失败的信息。 这个指令卸载系统自带应用可以能会遇到 Failure [DELETE_FAILED_INTERNAL_ERROR] 错误提示

卸载系统自带应用程序

清除应用程序数据:

在卸载应用之前,尝试先清除该应用的数据。使用以下命令:

1
adb shell pm clear package_name

将 package_name 替换为应用程序的包名。

强制停止应用程序:

如果应用程序正在运行,尝试通过 ADB 强制停止应用程序再进行卸载:

1
adb shell am force-stop package_name

将 package_name 替换为应用程序的包名。

确保设备有足够的存储空间来完成卸载操作。有时设备存储空间不足可能会导致卸载失败。

使用 ADB shell 运行命令:

adb shell

pm uninstall -k –user 0 package_name

安装 APK 文件

将要安装的 APK 文件复制到计算机上,并记住它的路径,使用以下命令安装 APK 文件到设备:

1
adb install /path/to/your/app.apk

将 /path/to/your/app.apk 替换为实际 APK 文件的路径。

查看appInfo

1
adb shell dumpsys package packageName

Activity

查看当前界面的Activity

1
adb shell "dumpsys activity top | grep ACTIVITY | tail -n 1"

打印顶层Activity信息

查看栈顶的activity

1
2
adb shell dumpsys activity top
adb shell dumpsys activity top | findstr ACTIVITY

查看当前活动窗口

1
adb shell dumpsys window | findstr mCurrentFocus

Service

查看所有的系统service

1
adb shell service list

根据上一行查询出的package,查找该App的launcher Activity

1
adb shell "dumpsys package <packageName> | grep -A 4 'MAIN'"
1
adb shell "dumpsys package org.videolan.vlc | grep -A 4 'MAIN'"
  android.intent.action.MAIN:
    6aeb5fb org.videolan.vlc/.StartActivity filter ef82618
      Action: "android.intent.action.MAIN"
      Category: "android.intent.category.LAUNCHER"
      Category: "android.intent.category.LEANBACK_LAUNCHER"
    443aa2e org.videolan.vlc/.gui.SendCrashActivity filter c3da9cf
      Action: "android.intent.action.MAIN"
      Category: "android.intent.category.LAUNCHER"
    1643b3a org.videolan.vlc/.widget.MiniPlayerConfigureActivity filter a9513eb
      Action: "android.intent.action.MAIN"
      Action: "android.appwidget.action.APPWIDGET_CONFIGURE"
  com.google.android.gms.actions.SEARCH_ACTION:
    6aeb5fb org.videolan.vlc/.StartActivity filter f01a030
      Action: "com.google.android.gms.actions.SEARCH_ACTION"

– Action: “android.intent.action.MAIN” Action: “android.appwidget.action.APPWIDGET_CONFIGURE” android.media.action.MEDIA_PLAY_FROM_SEARCH: 6aeb5fb org.videolan.vlc/.StartActivity filter 7a004a9

查看当前界面的Fragment

1
adb shell "dumpsys activity top | grep '#[0-9]: ' | tail -n 1"

查看所有在运行的任务栈

1
adb shell dumpsys activity activities

查看Activity任务栈(仅适用android11以及以上)

1
adb shell "dumpsys activity activities | grep '* ActivityRecord{'"

查看正在运行的 Services

1
adb shell dumpsys activity -p <packageName>

指定 package 的所有state

1
adb shell dumpsys activity package <packageName>
1
2
adb shell dumpsys activity -p com.xx.xxx s[ervices]
adb shell dumpsys activity b[roadcasts] <packageName>

service state

1
adb shell dumpsys activity s[ervices] [COMP_SPEC ...]

service client-side state

1
adb shell dumpsys activity service [COMP_SPEC]

获取通知信息

1
adb shell dumpsys notification

获得手机里面某个apk的应用信息、版本信息

1
adb shell dumpsys package <packagename>
1
adb shell dumpsys package "org.videolan.vlc" 

Activity Resolver Table: Full MIME Types: application/3gpp: 6aeb5fb org.videolan.vlc/.StartActivity filter 4558bc4 Action: “android.intent.action.VIEW” Category: “android.intent.category.DEFAULT” Category: “android.intent.category.BROWSABLE” Scheme: “” Scheme: “file” Scheme: “ftp” Scheme: “ftps” Scheme: “sftp” Scheme: “content” Scheme: “http” Scheme: “https” Scheme: “smb” StaticType: “video” StaticType: “audio” StaticType: “/rmvb” StaticType: ”/avi” StaticType: “/mkv” StaticType: ”application/3gpp” StaticType: “application/mp4” StaticType: “application/mpeg” StaticType: ”application/ogg” StaticType: ”application/sdp” StaticType: ”application/vnd.3gp” StaticType: “application/vnd.apple.mpegurl” StaticType: “application/vnd.dvd” StaticType: ”application/vnd.dolby” StaticType: “application/vnd.rn-realmedia” StaticType: “application/x-iso9660-image” StaticType: “application/x-extension-mp4” StaticType: “application/x-flac” StaticType: “application/x-matroska” StaticType: “application/x-mpegURL” StaticType: “application/x-ogg” StaticType: “application/x-quicktimeplayer” StaticType: “application/x-shockwave-flash” StaticType: “application/xspf+xml” StaticType: “misc/ultravox” mPriority=0, mOrder=0, mHasStaticPartialTypes=true, mHasDynamicPartialTypes=false

1
adb shell dumpsys deviceidle whitelist

查看wifi密码,root权限

adb shell cat /data/misc/wifi/*.conf

读取系统的各种文件配置信息,比如/data/anr/traces.txt

adb shell cat /system/build.prop

adb shell getprop

比如:

adb shell getprop ro.product.model //获取设备型号 adb shell getprop ro.build.version.release //系统版本 adb shell getprop ro.product.board //CPU型号 adb shell getprop ro.serialno //序列号

列出所有安装的APP

adb shell pm list packages adb shell pm list packages -s //系统应用 adb shell pm list packages -3 //第三方应用 adb shell pm list packages | grep qq //过滤查找qq应用

查看设备连接IP地址

adb shell ifconfig wlan0 adb shell netcfg

关闭USB debug模式

1
adb shell settings put global adb_enabled 0

打开的话 [设置」-「开发者选项」-「Android 调试」

ANDROID_ID adb shell settings get secure android_id IMEI Android 4.4 : adb shell dumpsys iphonesubinfo Android 5.0+: adb shell service call iphonesubinfo 1 windows执行 adb shell “service call iphonesubinfo 1 | grep -o ‘[0-9a-f]{8}’ | tail -n+3 | while read a; do echo -n \u\({a:4:4}\\u\){a:0:4}; done”

linux执行

adb shell ‘service call iphonesubinfo 1 | grep -o “[0-9a-f]{8}” | tail -n+3 | while read a; do echo -n “\({a:4:4}\u\){a:0:4}”; done’

模拟按键和输入 adb shell input –help

电源键: adb shell input keyevent 26 HOME 键: adb shell input keyevent 3 返回键: adb shell input keyevent 4 点亮屏幕: adb shell input keyevent 224 熄灭屏幕: adb shell input keyevent 223 输入文本: adb shell input text xxxxx

keycode 含义 3 HOME 键 4 返回键 5 打开拨号应用 6 挂断电话 24 增加音量 25 降低音量 26 电源键 27 拍照(需要在相机应用里) 64 打开浏览器 82 菜单键 85 播放/暂停 86 停止播放 87 播放下一首 88 播放上一首 122 移动光标到行首或列表顶部 123 移动光标到行末或列表底部 126 恢复播放 127 暂停播放 164 静音 176 打开系统设置 187 切换应用 207 打开联系人 208 打开日历 209 打开音乐 210 打开计算器 220 降低屏幕亮度 221 提高屏幕亮度 223 系统休眠 224 点亮屏幕 231 打开语音助手 276 如果没有 wakelock 则让系统休眠

截屏

1
adb exec-out screencap -p >  C:\Users\Administrator\Desktop\face\aaa.png

adb shell am start

启动 activity component

1
adb shell am start -n com.xx.xxx/com.xx.xxx.xxActivity

启动 系统 <设置>

adb shell am start -a android.settings.SETTINGS

1:打开 开发者选项 0: 关闭开发者选项

adb shell settings put global development_settings_enabled 1

-a action_str -d uri

开发者模式 设置

1
adb shell am start -a android.settings.APPLICATION_DEVELOPMENT_SETTINGS

package为com.xx.xxx的详细设置

1
adb shell am start -a android.settings.APPLICATION_DETAILS_SETTINGS -d package:com.xx.xxx

example:权限管理设置

1
adb shell am start -a android.settings.action.MANAGE_OVERLAY_PERMISSION -d package:com.xx.xxx

电池优化 白名单

1
adb shell am start -a android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS

查看电池优化白名单

1
adb shell dumpsys deviceidle whitelist

#存储空间管理

1
adb shell am start -a android.os.storage.action.MANAGE_STORAGE

启动service

adb shell am startservice -n com.some.package/.someService adb shell am broadcast 模拟广播 adb shell am broadcast

[-a ] [-d ] [-t ] [-c [-c ] …] [-e|–es …] [–ez …] [-e|–ei …] [-n ] [-f ] []

adb shell am broadcast -a android.intent.action.EDIT –es test_string “this is test string” –ei test_int 100 –ez test_boolean true

刷新 媒体库,注意:有时必须指定 {file_name},否则有时无效

adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard/DCIM/Camera/{file_name}

// 递归 刷新 媒体库

adb shell “find /sdcard/Video/ | while read f; do   am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE   -d "file://${f}"; done”

adb shell am kill

/* 关闭package指定的应用程序 */

adb shell am force-stop com.some.package

/* kill与package相关联的所有process */

adb shell am kill com.some.package

/* 杀死所有后台进程process */

adb shell am kill-all

查看APP内存限制

/* 单个APP heap size限制 */

adb shell getprop | findstr dalvik.vm.heapgrowthlimit adb shell cat /system/build.prop | findstr dalvik.vm

Packages.xml应用信息

adb root

/data/system/

1
adb pull /data/system/packages.xml C:\Users\Administrator\Desktop

backup备份

-apk 应用和数据 -noapk 只有数据

adb backup -f “F:*.ab” -apk com.xx.xx

还原

adb restore f:*.ab 查看网络

ping[1] adb shell

查看网络接口 wlan0:无线网络接口 rmnet_data:移动网络接口

ls /sys/class/net/

#查看指定网络接口的配置

ifconfig rmnet_data0

#关闭指定网口

ifconfig rmnet_data0 down

打开指定网口

ifconfig rmnet_data0 up

查看所有网口的IP地址

ip -f inet addr

查看指定网口的IP地址

ip -f inet addr show wlan0

ping 一个地址 4此次

ping -c 4 baidu.com

#查看DNS

getprop | grep dns

修改DNS,使用上面getprop获得的DNS名称,设置方式飞行模式、开关机失效

setprop net.dns1 223. 控制台文件描述符stdout和stderr adb shell stop adb setprop log.redirect-stdio true adb shell start

普通操作

拨打电话

adb shell am start -a android.intent.action.CALL tel:10010

打开网页

adb shell am start -a android.intent.action.VIEW -d http://www.baidu.com

Settings adb shell settings help

是否自动获取时间

adb shell settings get global auto_time

settings

电源、网络、USB控制 adb shell svc

关机

adb shell svc power shutdown

关闭移动数据

adb shell svc data disable

image.png

获取网口MAC地址

adb shell

cd sys/class/net

根据 networkInterface进入相应的网络接口

cat eth0/address cat wlan0/address

查看进程线程所在的CPU核心

ps的命令参数:-t -x,-P,-p,-c [pid|name]

-t显示进程下的线程列表 -x 显示进程耗费的用户时间和系统时间,单位s -P 显示调度策略,通过是bg or fg ,当获取失败将会un和er比之前打印的内容多出了一列PCY,表示进程的调度等级 +-p 显示进程的优先级和nice等级 -c 显示进程耗费的CPU时间 [PID]过滤指定进程PID,[name]过滤指定进程NAME adb shell ps -P -t -c -x PID MTK:

找出自己APP进程的PID, 关键字模糊匹配app的packageName

adb shell ps | findstr “PID player”

查看help,有哪些fields可以被打印

adb shell ps –help

-T 显示线程名, -o 执行显示哪些fields, 我们要显示CPU

adb shell ps -T -o UID,PID,CPU,%CPU,%MEM,NI,PSR,TIME,CMD -p 2912 CPU : 线程、进程在哪个cpu processor上执行 %CPU: 使用CPU时间的百分比 %MEM: 占用物理内存的百分比 NI: 线程的nice值,对应线程的优先级设置(static 19 to -20) CMD: 线程名称

ps-cpu 修改系统时间 Windows (PowerShell)

Windows (PowerShell)

$currentDate = Get-Date -Format “MMddHHmmyyyy.ss”

adb shell “date $currentDate;am broadcast -a android.intent.action.TIME_SET”

查看Android系统时间

date +“%Y-%m-%d %H:%M:%S”

批处理

set dateYYYY=%date:~0,4% set dateMM=%date:~5,2% set dateDD=%date:~8,2% set timeHH=%time:~0,2% set timeMM=%time:~3,2% set timeSS=%time:~6,2%

adb shell date %dateMM%%dateDD%%timeHH%%timeMM%%dateYYYY%.%timeSS% adb shell am broadcast -a android.intent.action.TIME_SET tasksetCPU绑定

查看pid 4069

taskset -p 4069

把 我们的pid 加入到进程组

echo 347 > /dev/cpuset/foreground/task

修改进程组的background的CPU调度策略

echo 0-3 > /dev/cpuset/background/cpus

taskset

查看指定进程的内存使用

adb shell dumpsys meminfo $package_name or $pid 查看系统内核

uname -a 获取IP地址

adb shell ip route | awk ‘{print $9}’ adb授予权限

adb shell pm grant com.ts.player android.permission.READ_EXTERNAL_STORAGE adb shell pm grant com.ts.player android.permission.WRITE_EXTERNAL_STORAGE 查看媒体提取器

adb shell dumpsys media.extractor 禁止弹出 沉浸式提示窗口 Viewing full screen. To exit, swipe down from the top

查看 secure namespace 下所有的值

adb shell settings list secure

是否已确认过

adb shell settings list secure | findstr immersive

删除此值

adb shell settings delete secure immersive_mode_confirmations

查看此值

adb shell settings secure get immersive_mode_confirmations

修改此值 disable 弹窗

adb shell settings put secure immersive_mode_confirmations confirmed

修改文件访问权限 chmod

修改文件权限

chmod [option] filename

给文件 加 运行 权限

chmod ugo+x

可以用二进制位表示:3个字节,每个字节代表一个用户组,每个字节的后3位由高到低代表 r、w、x,读写权限 rw= 100 | 010 = 110 = 6

chmod 777

[option]表示各种权限选项:

r(或4100):读取权限 w(或2010):写入权限 x(或1001):执行权限

还可以指定权限的获取者,三个部分的左中右:

u:文件所有者 g:文件所有者所在的组的用户 o:其他组的用户

权限的授予可采用操作符“+”,而“-”表示收回权限:

给其他组用户赋予read权限

chmod o+r

此用户无法使用开发者选项

adb shell settings put secure user_setup_complete 1 adb shell settings put global device_provisioned 1

Help

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
E:\Tools>adb shell pm help
Error: unknown command 'help'
usage: pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
pm list permission-groups
pm list permissions [-g] [-f] [-d] [-u] [GROUP]
pm list instrumentation [-f] [TARGET-PACKAGE]
pm list features
pm list libraries
pm list users
pm path PACKAGE
pm dump PACKAGE
pm install [-lrtsfd] [-i PACKAGE] [--user USER_ID] [PATH]
pm install-create [-lrtsfdp] [-i PACKAGE] [-S BYTES]
[--install-location 0/1/2]
[--force-uuid internal|UUID]
pm install-write [-S BYTES] SESSION_ID SPLIT_NAME [PATH]
pm install-commit SESSION_ID
pm install-abandon SESSION_ID
pm uninstall [-k] [--user USER_ID] PACKAGE
pm set-installer PACKAGE INSTALLER
pm move-package PACKAGE [internal|UUID]
pm move-primary-storage [internal|UUID]
pm clear [--user USER_ID] PACKAGE
pm enable [--user USER_ID] PACKAGE_OR_COMPONENT
pm disable [--user USER_ID] PACKAGE_OR_COMPONENT
pm disable-user [--user USER_ID] PACKAGE_OR_COMPONENT
pm disable-until-used [--user USER_ID] PACKAGE_OR_COMPONENT
pm hide [--user USER_ID] PACKAGE_OR_COMPONENT
pm unhide [--user USER_ID] PACKAGE_OR_COMPONENT
pm grant [--user USER_ID] PACKAGE PERMISSION
pm revoke [--user USER_ID] PACKAGE PERMISSION
pm reset-permissions
pm set-app-link [--user USER_ID] PACKAGE {always|ask|never|undefined}
pm get-app-link [--user USER_ID] PACKAGE
pm set-install-location [0/auto] [1/internal] [2/external]
pm get-install-location
pm set-permission-enforced PERMISSION [true|false]
pm trim-caches DESIRED_FREE_SPACE [internal|UUID]
pm create-user [--profileOf USER_ID] [--managed] USER_NAME
pm remove-user USER_ID
pm get-max-users

pm list packages: prints all packages, optionally only
those whose package name contains the text in FILTER. Options:
-f: see their associated file.
-d: filter to only show disbled packages.
-e: filter to only show enabled packages.
-s: filter to only show system packages.
-3: filter to only show third party packages.
-i: see the installer for the packages.
-u: also include uninstalled packages.

pm list permission-groups: prints all known permission groups.

pm list permissions: prints all known permissions, optionally only
those in GROUP. Options:
-g: organize by group.
-f: print all information.
-s: short summary.
-d: only list dangerous permissions.
-u: list only the permissions users will see.

pm list instrumentation: use to list all test packages; optionally
supply <TARGET-PACKAGE> to list the test packages for a particular
application. Options:
-f: list the .apk file for the test package.

pm list features: prints all features of the system.

pm list users: prints all users on the system.

pm path: print the path to the .apk of the given PACKAGE.

pm dump: print system state associated with the given PACKAGE.

pm install: install a single legacy package
pm install-create: create an install session
-l: forward lock application
-r: replace existing application
-t: allow test packages
-i: specify the installer package name
-s: install application on sdcard
-f: install application on internal flash
-d: allow version code downgrade
-p: partial application install
-g: grant all runtime permissions
-S: size in bytes of entire session

pm install-write: write a package into existing session; path may
be '-' to read from stdin
-S: size in bytes of package, required for stdin

pm install-commit: perform install of fully staged session
pm install-abandon: abandon session

pm set-installer: set installer package name

pm uninstall: removes a package from the system. Options:
-k: keep the data and cache directories around after package removal.

pm clear: deletes all data associated with a package.

pm enable, disable, disable-user, disable-until-used: these commands
change the enabled state of a given package or component (written
as "package/class").

pm grant, revoke: these commands either grant or revoke permissions
to apps. The permissions must be declared as used in the app's
manifest, be runtime permissions (protection level dangerous),
and the app targeting SDK greater than Lollipop MR1.

pm reset-permissions: revert all runtime permissions to their default state.

pm get-install-location: returns the current install location.
0 [auto]: Let system decide the best location
1 [internal]: Install on internal device storage
2 [external]: Install on external media

pm set-install-location: changes the default install location.
NOTE: this is only intended for debugging; using this can cause
applications to break and other undersireable behavior.
0 [auto]: Let system decide the best location
1 [internal]: Install on internal device storage
2 [external]: Install on external media

pm trim-caches: trim cache files to reach the given free space.

pm create-user: create a new user with the given USER_NAME,
printing the new user identifier of the user.

pm remove-user: remove the user with the given USER_IDENTIFIER,
deleting all data associated with that user
阅读全文 »
0%