文章目录
- 简介
- 一、Git篇
- 1.廖雪峰的 Git 教程
- 2.git 每次都需要输入账号密码
- 3.git 查看 stash 中的内容
- 4.git 添加别名
- 5.修改最近一次提交的描述
- 6.本地分支重命名
- 7.删除远程分支
- 8.拉取远程分支
- 9.强制合并不相关的 git 仓库
- 10.生成 ssh
- 11.git账号密码变动后,重置账户
- 12.git 配置邮箱和用户名
- 13.git 删除 stash 中的内容
- 14.git 每个 log 只显示一行
- 16.git 合并 commit
- 17.git 删除缓存中的文件 / 文件夹
- 18.git 本地分支和远程分支改名
- 19.git 查找 tag 对应的 commit
- 20.git 生成 ssh 公钥
- 21.git 清除所有untracked file
- 22.解决 MAC 从 Github git clone 很慢
- 23. git 关联远程库与取消关联
- 24. git 恢复删除的文件
- 25. git 删除除当前分支外的所有分支
- 26. 抓取字符串
- 27. git stash pop 冲突后撤销 pop 操作
- 28. git 打 diff,应用 diff
- 29.pull 或者 push 时出现 fatal: refusing to merge unrelated histories
- 30.提示 hint: Please, commit your changes before merging.
- 31.Git 提示 error setting certificate verify locations
- 32.Git 切换 tag
- 33. Unlink of file Failed. Should I try again?
- 34. git push 时输入账号密码后提示 Authentication failed
- 35. git reset --hard 之后,如何撤销
- 二、gradle篇
- 三、adb篇
- 1.adb 安装apk
- 2.adb 卸载app
- 3.adb 强制安装apk
- 4.adb远程联调
- 5.adb 查看已连接的设备
- 5.Android Studio 模拟器无法上网
- 6.adb 抓取 log
- 7.adb 终端输出 log
- 8.adb 查看 ip 地址
- 9. adb 启动 app
- 10. 打印当前屏幕正在运行的 app 的包名
- 11.打印 app 版本号
- 12.Logcat 频繁 "Unexpected EOF!"
- 13. Warning: debug info can be unavailable. Please close other application using ADB: Monitor, DDMS, Eclipse
- 14. adb 打开网页
- 四、Windows篇
- 五、Android Studio 篇
- 1.Android Studio给连接的设备截图
- 2.Live Templates
- 3.Logcat 栏的过滤栏不见了
- 4. Logcat 过滤 Log
- 5. Android Studio 报红但是可以运行
- 6.Debug 变得很卡,并提示 method breakpoints may dramatically slow down debugging
- 7. 在 Marketplace 中搜索插件时,不显示搜索结果。
- 8.中文乱码
- 9.修改 Logcat 输出日志的颜色
- 10. 工具栏不见了
- 11. "Launch succeeded" but not installed
- 12. 设置达到指定字符长度时自动换行
- 13. Android Studio 底部 行号:列号 不见了
- 14. SourceSet with name ‘main’ not found
- 15. Android Studio 全局 proxy 配置
- 16. Incompatible Gradle JVM 问题,Android Studio 设置 Gradle JDK
- 六、Kotlin 篇
- 七、Android 篇
- 八、命令行篇
- 九、Java 篇
- 十、开发篇
- 十一、Mac 篇
- 十二、Chrome 篇
简介
工作、学习中总会遇到各种各样的问题,本篇文章笔者将亲历的一些问题记录下来,以便日后查阅。
不定期更新。
一、Git篇
1.廖雪峰的 Git 教程
廖雪峰的 Git 教程应该是 Git 最好的入门教程:https://www.liaoxuefeng.com/wiki/896043488029600
2.git 每次都需要输入账号密码
git config --global credential.helper store
如果每次 push 的时候都需要指定分支名,则使用:
git push -u origin master
将 origin 和 master 分支关联上,以后主分支上的推送就可以直接使用 git push
了。
-u
是 upsteam
的缩写,也可以用全称:
git push origin master --set-upsteam
如果每次 pull 的时候都需要指定分支名,则使用:
git branch -u origin/master
merge 远程分支的同时,也更新对应 branch:
git pull origin master:master
3.git 查看 stash 中的内容
git stash show
4.git 添加别名
例如用 st 表示 status:
git config --global alias.st status
5.修改最近一次提交的描述
git commit --amend
然后会进入文本编辑界面,点击 i
开始插入文字,编辑完成后,点击 Esc
退出编辑模式,输入 :wq
将修改保存并退出。
6.本地分支重命名
git branch -m 旧的分支名 新的分支名
7.删除远程分支
git push --delete origin 分支名
8.拉取远程分支
git checkout -b 分支名 origin/分支名
此命令会在本地新建一个分支,并将远程的分支拉取到此新建的分支中。
9.强制合并不相关的 git 仓库
两个不相关的 git 仓库想要 pull 时,会提示 fatal: refusing to merge unrelated histories,这时可以使用以下命令强制 merge
git pull origin master --allow-unrelated-histories
10.生成 ssh
ssh-keygen -t rsa -C "你的电子邮箱地址"
然后命令行窗口会显示:Enter file in which to save the key:
输入保存 ssh 文件的地址即可,如:D:key
然后命令行窗口会显示:Enter passphrase (empty for no passphrase):
可以为 ssh 设置一个密码,不需要密码的话直接回车即可。
然后命令行窗口会显示:Enter same passphrase again:
再次输入密码。
这样就可以在之前设置的保存路径中找到两个 ssh 密钥,带 pub 后缀的是公钥,另一个是私钥。
11.git账号密码变动后,重置账户
git config --system --unset credential.helper
下次拉取时就会重新输入账号密码了。
12.git 配置邮箱和用户名
git config --global user.name "你的名字"
git config --global user.email 你的邮箱地址
查看 git 邮箱和用户名:
git config user.name
git config user.email
13.git 删除 stash 中的内容
例如,删除第一个:
git stash drop stash@{0}
删除所有:
git stash clear
14.git 每个 log 只显示一行
git 查看 log 时,为了方便查找以前的 log,可以让每个 log 只显示一行:
git log --oneline
16.git 合并 commit
git rebase -i commit的id
或者
git rebase -i HEAD~2
这里的 HEAD~2 表示前两个版本,也可以修改为任意数字。
输入命令后会看到如下界面:
pick aa6f553 improve PermissionUtil again
pick 37e7290 improve PermissionUtil
pick 2390238 add negative number logic in ChineseNumFormat
# Rebase 222340a..ebaf38b onto 222340a (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
点击 i 插入内容,然后将需要合并的 commit 前的 pick 改成 squash 即可。需要注意的是这样会将此 commit 的提交信息也合并(提交信息就是 git commit -m “这里的信息”),如果想要将丢弃不需要的 commit 的提交信息,将 pick 改成 fixup 即可。
修改完成后,点击 Esc 退出编辑,输入 :wq 将修改写入即可。
17.git 删除缓存中的文件 / 文件夹
在我们修改了 .gitignore 文件后,如果新增了需要忽略的文件,会发现修改没有生效, git 仍然会跟踪此文件,这是因为 git 的缓存中仍然存在此文件,所以 git 还会去跟踪它的修改。
这时,需要将此文件从缓存中删除,命令是:
git rm --cached 文件或文件夹路径
在某些情况,需要添加 -r,意思是递归移除选择的文件夹及其子文件夹:
git rm --cached -r 文件或文件夹路径
18.git 本地分支和远程分支改名
1.将本地分支进行改名
git branch -m old_branch new_branch
2.将远程分支的老分支删除
git push origin :old_branch
3.将改名后的分支push到远程
git push origin new_branch
19.git 查找 tag 对应的 commit
git show tag的名称
20.git 生成 ssh 公钥
生成 ED25519 公钥:
ssh-keygen -t ed25519 -C "你的邮箱地址,如:email@example.com"
生成 RSA 公钥:
ssh-keygen -t rsa -b 4096 -C "你的邮箱地址,如:email@example.com"
21.git 清除所有untracked file
git clean -f
连带清除所有 untracked 文件夹:
git clean -fd
22.解决 MAC 从 Github git clone 很慢
先 ping 出 github 的 ip 地址
ping github.global.ssl.fastly.net
ping github.com
将获取到的 IP 地址记录下来。例如:
PING github.global.ssl.fastly.net (67.228.102.32): 56 data bytes
PING github.com (13.250.177.223): 56 data bytes
编辑 hosts:
sudo vi /private/etc/hosts
在 hosts 文件底部增加刚刚保存的 IP 地址映射:
67.228.102.32 github.global.ssl.fastly.net
13.250.177.223 github.com
23. git 关联远程库与取消关联
关联:
git remote add origin 地址
取消关联:
git remote remove origin
git 关联分支:
git branch --set-upstream-to=origin/远程分支名 本地分支名
关联之后直接使用 git pull,git push,默认操作这两个分支,无需指定分支名
24. git 恢复删除的文件
git reset HEAD 文件路径
或者恢复全部删除的文件
git reset HEAD .
25. git 删除除当前分支外的所有分支
git branch | xargs git branch -D
其中用到的 xargs 是指将前一个命令的输出作为第二个命令的输入。所以这里的逻辑是先用 git branch 列出所有分支,然后将分支名依次传入 git branch -D 中,就达到了将所有分支删除的目的。由于当前分支前会有一个 *
号,所以运行这行命令会输出;
error: branch '*' not found.
并且当前分支不能被删除,所以运行这行命令还会输出:
error: Cannot delete branch '当前分支名' checked out at '项目地址'
这两个错误提示不会导致删除其他分支失败,所以不用管他们。
26. 抓取字符串
例如:抓取包含 test 的分支
git branch | grep "test"
抓取不含 test 的分支
git branch | grep -v "test"
注:这个技巧是 grep 命令,和 git 关系不是特别大,但顺手记到这里。
27. git stash pop 冲突后撤销 pop 操作
冲突后,先用
git add .
将冲突文件都放至暂存区;
再用
git reset .
将其从暂存区恢复到工作区;
再用:
git checkout .
将工作区修改撤销。此时就回到了 git stash pop 之前的状态。
注:git stash pop 一般情况下会将 stash 中的修改内容弹出并将这次的修改内容从 stash 中删除。但如果 pop 时出现冲突,则这次的修改内容不会被删除。
28. git 打 diff,应用 diff
git diff > test.diff
应用:
git apply test.diff
相当于将此次的修改备份,然后就可以放心的 checkout 丢弃修改,需要时再将此次的修改加载出来。
29.pull 或者 push 时出现 fatal: refusing to merge unrelated histories
push 和 pull 时都可能出现这个错误,是因为远程 git 库和本地 git 库没有关联。最好是先检查一下当前远程库地址是否正确:
git config -l
查看 remote.origin.url
的值是否正确。如果确认地址是正确的,在操作命令后加上--allow-unrelated-histories
强制合并即可。例如:
git pull --allow-unrelated-histories
git push --allow-unrelated-histories
30.提示 hint: Please, commit your changes before merging.
有时候,明明没有内容需要 merge ,但 git 提示 commit your changes before merging。这是因为之前的操作导致当前正在 merge 过程中,所以无法进行其他操作,只要将之前的 merge 中止了就可以了。
git merge --abort
31.Git 提示 error setting certificate verify locations
这个问题是因为证书文件路径变了,将其修改为正确路径即可。
方案 1:
git config http.sslcainfo “C:\Program Files (x86)\git\bin\curl-ca-bundle.crt”
后面的路径就是当前的证书路径。
方案 2:
git config http.sslverify false
将证书先重置,再重新设置证书。
32.Git 切换 tag
git checkout tag的名称
33. Unlink of file Failed. Should I try again?
当操作 git 时,如果某个文件正在被其他程序占用,就会报这个错。
查看哪个程序在用这个文件,然后关掉那个程序就可以了。
查看哪个程序在用这个文件的步骤:
- (Windows + R) 打开 Run 窗口
- 输入 resmon 回车,打开 Resource Monitor
- 在 Associated Handles 右边的输入框输入文件名
- 找到正在用这个文件的程序之后,可以直接右键 End Process 关掉这个程序。
参考链接:https://stackoverflow.com/questions/4389833/unlink-of-file-failed-should-i-try-again
在 Android Studio 中,报这个错的原因一般是 GradleDaemon 在使用这个文件,可以先用 jps
命令查看 GradleDaemon 进程的 ID,然后用 taskkill /PID 进程ID
杀掉 GradleDaemon 进程。
注:后来发现这是由于 gradle 打开了这个文件,但没有 close inputStream 导致的泄露问题。关闭 inputStream 之后就再没出现过这个问题了。
34. git push 时输入账号密码后提示 Authentication failed
控制台还会有这样的提示信息:
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/xxx'
这是 github 为了安全起见,不再支持账号密码 push 了。需要在 github 账号中,点击 Settings → Developer settings → Personal access tokens &arr; 创建一个新的 token。
创建完成后将这个 token 字符串保存下来,在 push 时,输入账号和 token 就能正常 push 了。(也就是在以前输入密码的位置,输入 token)
笔者建了一个永久有效、支持所有功能的 token,这是 github 不推荐的,因为这样不安全,但这样使用的时候很方便,况且我也没有什么机密代码。
35. git reset --hard 之后,如何撤销
当我们使用 git reset --hard 回退版本之后,有时会发现回退错了,不应该回退,想要撤销这次 reset 操作,重新回到 HEAD。这时,我们可以使用 reflog 命令,这个命令会输出 HEAD 的历史,当执行 reset,checkout 等操作时,这些操作会被记录在 reflog 中。
git reflog
然后从 HEAD 历史中找到需要回到的 HEAD 的 commit id,再次调用 git reset --hard 即可:
git reset --hard 需要回到的HEAD的commitID
二、gradle篇
1.将 library 打包成 aar 导入另一个项目
1.1.打包 aar
点击 Android Studio 侧边栏 Gradle → 点击需要打包的 library → 点击 Tasks → 点击assembleRelease
切换到 Project 视图 → 在"对应的library\build\outputs\aar"目录下,可以看到打包出来的 aar 文件
1.2.将 aar 导入另一个项目
方法一
将 aar 文件放入项目的 app\libs 文件夹下
在 app 模块的 build.gradle 中添加:
...
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
...
implementation(name: 'aar的文件名称,不带后缀,如library-release', ext: 'aar')
}
方法二
直接导入 libs 文件夹下的所有 aar
implementation fileTree(include: ['*.aar'], dir: 'libs')
一般 gradle 中已经有一行类似的导入所有 jar 包的代码:
implementation fileTree(include: ['*.jar'], dir: 'libs')
我们也可以直接在这一行代码中添加 aar :
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
2.配置jks
在 app 模块的 build.gradle 文件中,添加:
android {
...
signingConfigs {
// 这里的 key 指签名配置的名字,可以任意取,只要后面与其保持一致
key {
storeFile file('密钥库路径,也就是jks文件路径,其中文件路径分隔符 \ 需要使用转义字符 \\ ,如 D:\\keys\\xxx.jks')
storePassword '密钥库密码'
keyAlias = '密钥名'
keyPassword '密钥密码'
}
}
buildTypes {
debug {
...
// 表示 debug 版本使用签名,这里的 key 需要和上面的 signingConfigs 中保持一致
signingConfig signingConfigs.key
}
release {
// 表示 release 版本使用签名,这里的 key 需要和上面的 signingConfigs 中保持一致
signingConfig signingConfigs.key
}
}
}
Android app签名的作用:
- app中对签名进行校验,可以防止代码被盗后被别人重新打包
- 系统要求被系统的签名文件签名后的应用才能正确获取系统级权限
3.查看 gradle 依赖树
gradlew :app:dependencies
查看 gradle 依赖树并导出到文件中:
gradlew :app:dependencies >dependencies.txt
4.添加Java8支持
app模块下的 build.gradle 中,添加
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
...
}
5. gradle 缓存的 library 保存在哪里?
有时候 gradle 下载 library 会失败,这时候我们可以去手动下载 aar 或 jar,下载后存到哪里呢?
存到这个位置:
C:\Users\你的用户名\.gradle\caches\modules-2\files-2.1
或者直接用这个路径:
C:\Users\%USERNAME%\.gradle\caches\modules-2\files-2.1
%USERNAME%
表示名为 USERNAME 的环境变量,Windows 系统自带这个环境变量。
这个文件夹中有许多的包名,点击对应包名的文件夹就能看到这个 aar 或 jar 了,这些文件都放在一个名字很奇怪的文件夹中,比如 7b823157de0b185ceab43e948e3088adb928532d
之类的。这个文件夹名其实是这个文件的 SHA1 值。
计算文件 SHA1 值的命令:
certutil -hashfile 需要计算的文件 SHA1
查看这个命令的帮助文档:
certutil -hashfile -?
6. 使用阿里云镜像下载依赖库
有时候网络不好,下载 library 时频频报 Read Timeout,这时候可以通过阿里云镜像提升下载速度。
maven { url "https://dl.google.com/dl/android/maven2/" }
maven { url "https://maven.aliyun.com/repository/google" }
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
maven { url "https://maven.aliyun.com/repository/public" }
maven { url "https://maven.aliyun.com/repository/central" }
maven { url "https://maven.aliyun.com/repository/jcenter" }
有的 gradle 可能是用 kotlin 写的,所以顺便贴上 kotlin 版:
maven("https://dl.google.com/dl/android/maven2/")
maven("https://maven.aliyun.com/repository/google")
maven("https://maven.aliyun.com/repository/gradle-plugin")
maven("https://maven.aliyun.com/repository/public")
maven("https://maven.aliyun.com/repository/central")
maven("https://maven.aliyun.com/repository/jcenter")
其中,第一个地址 https://dl.google.com/dl/android/maven2/
不是阿里
感谢阿里!
三、adb篇
1.adb 安装apk
adb install apk路径
2.adb 卸载app
adb uninstall app包名
3.adb 强制安装apk
adb install -r -g apk路径
其中,-r 指 reinstall (覆盖安装),-g 指保留之前的权限
4.adb远程联调
(1)连接 USB 数据线,命令行中输入:
adb tcpip 5037
这里的5037是指端口号,其他数字也可以。
(2)命令行中输入:
adb connect 设备ip:5037
设备 ip 指的是连接的 Android 设备的 ip 地址,如192.168.xx.xx,5037仍然是指端口号,需要和第一步中保持一致。
(3)拔掉 USB 数据线即可。
5.adb 查看已连接的设备
adb devices
如果远程联调设备显示offline,重连解决。也就是先:
adb disconnect 设备ip:端口
再:
adb connect 设备ip:端口
如果 adb 连接了多个设备,指定对其中的某个设备使用 adb 命令的方式为:
adb -s 设备名称 命令
5.Android Studio 模拟器无法上网
(1)Mac Android Studio模拟器无法上网,网络偏好设置中添加DNS: 8.8.8.8
(2)Windows Android Studio模拟器无法上网:Tools → SDK Manager→ Http Proxy → 勾选 Auto-detect proxy settings.
6.adb 抓取 log
(1)先清除之前的log
adb logcat -c
(2)设置最多抓取20M
adb logcat -G 20m
(3)输出到指定位置
adb logcat -v threadtime > 输出路径,如D:\log.txt
7.adb 终端输出 log
Mac:
adb logcat -v threadtime | grep "需要筛选的字符串"
Windows 系统:
adb logcat -v threadtime | findstr "需要筛选的字符串"
其中的字符串表示筛选包含指定字符串的 log,直接在终端输出。
8.adb 查看 ip 地址
adb shell ifconfig
9. adb 启动 app
启动 Settings:
adb shell am start com.android.settings/com.android.settings.Settings
10. 打印当前屏幕正在运行的 app 的包名
adb shell dumpsys window | findstr mCurrentFocus
11.打印 app 版本号
adb shell dumpsys package 包名| findstr versionName
12.Logcat 频繁 “Unexpected EOF!”
这是由于 Logcat 的缓存区写满了导致的
查看 Logcat 缓存区大小:
adb logcat -g
修改 Logcat 缓存区大小:
adb logcat -G 4M
这里我将其指定为 4M,这个值可根据自己的需要设置。
参考:分析解决logcat报read: Unexpected EOF!异常
13. Warning: debug info can be unavailable. Please close other application using ADB: Monitor, DDMS, Eclipse
有时候想要 Debug 却 Attach 不上,报这个错误。这时候可以通过在平板的开发者选项中,关闭/再打开 USB 调试解决。
14. adb 打开网页
adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com
四、Windows篇
1.环境变量
1.1.设置环境变量
在文件夹的 This PC
上点击右键,点击Properties
:
点击 Change settings
→ 在弹出的窗口中切换到 Advanced
标签 → 点击Environment Variables
→ 在 System variables
中设置环境变量。
1.1.Path 变量
Windows 环境变量中 Path 变量的作用:敲命令行时,除了会寻找当前路径下的 exe 程序外,还会去 Path 包含的路径中寻找对应的 exe 程序,(或写作PATH,path,Windows不区分大小写)
1.2.其他变量
点击New...
,可以自定义环境变量,引用自定义变量时,语法是%变量名%
如安装JDK时,Java要求我们自定义JAVA_HOME环境变量,值为Java安装路径。然后在Path中使用%JAVA_HOME%来表示此变量。
1.3.过时的CLASSPATH变量
CLASSPATH 的作用是指定类搜索的路径, JVM 是通过 CLASSPATH 来寻找 Java 类的。然而,JDK1.5 以上的版本会自动搜寻 Java 类,不再需要设置 CLASSPATH 了。
如果设置了此环境变量,则JRE将只按照此路径来搜索Java类,所以如果设置了一定要设置正确。
推荐不设置,笔者已经在环境变量中将CLASSPATH删除了
1.4.环境变量设置后不生效
重启命令行窗口,不行的话就重启电脑,缓存导致的。
2.命令行
2.1.命令行删除文件夹及其里面的内容
rmdir /s /q 文件夹路径
/s 表示删除文件夹里面的内容, /q 表示quite,安静删除,也就是删除时不要每次询问Yes/No。
文件夹路径分隔符用\
,如:D:\test
,下同。
2.2.命令行不删除文件夹,只清空里面的内容
del /q 文件夹路径
/q同样表示表示quite,安静删除,也就是删除时不要每次询问Yes/No
删除文件同样是使用此命令:
del 文件路径
2.3.从命令行打开文件夹
explorer 文件夹路径
易知,打开当前文件夹:
explorer .
打开上级文件夹:
explorer ..
2.4.查看电脑信息
dxdiag
查看注册表信息:
regedit
2.5. 添加账户
control userpasswords2
2.6. 连接 ftp 服务器
文件夹连接 ftp:
文件夹中输入 ftp://地址/
,输入账号密码即可。
命令行连接 sftp:
sftp 用户名@服务器地址
然后输入 密码即可。
将远程的文件下载到本地,使用 get
命令:
get 文件名
默认下载目录就是连接 sftp 时,所在的文件夹。
将本地的文件上传到 sftp 服务器,使用 pull
命令:
put 文件名
3.Office已阻止访问以下对象,以便保护你的安全
在“我的电脑”中输入%temp%
,然后回车,按时间排序,最近的文件就是被拦截的文件,点击运行即可。
4.Win10 卡在锁屏页面,不显示密码输入框
同时按下Ctrl + Alt + Delete
就可以显示密码输入框,然后输入密码即可。(智障 Windows,毁我青春)
5. 窗口在屏幕外拉不回来
先确保窗口显示到前台
然后按 alt + space 键,激活控制菜单。
之后按 M 键,开启窗口移动控制,再用键盘上的上下左右按键,将窗口移到中央位置。
6. 网络可以用,但图标显示无 Internet
这个问题可能因设备而异,我的原因是使用了 Clash,所以需要在 Clash 的规则中添加这两个地址:
DOMAIN-SUFFIX,msftconnecttest.com,🚀 节点选择
DOMAIN-SUFFIX,msftncsi.com,🚀 节点选择
参考链接:https://github.com/vernesong/OpenClash/issues/2239
7.查看剪贴板历史
Win + V
五、Android Studio 篇
1.Android Studio给连接的设备截图
在 Logcat 左侧点击照相机图标即可。
2.Live Templates
Android Studio支持设置代码快捷输入模板,在 Setting → Live Templates 中:
(1)点击右上角的 +
号,新建 Live Template
(2)在 Abbreviation 中输入快捷键
(3)Description 指输入快捷键后显示的描述
(4)Template text 指快捷键入的内容。
(5)Define 表示此快捷键在哪些文件类型中生效,如 xml、java、kotlin
如上图定义的是一个输入ld,生成以下代码:
Log.d("~~~","")
的快捷方式。$变量名$
用来定义变量,这里定义了一个data
变量,作用是:在代码模板输入后,光标会自动移动到变量的位置。
(6)定义变量值
点击 Edit variables 可以定义变量值,如笔者定义了一个输入 head 便生成头注释的模板:
并且将date
变量的默认值设为date("yyyy-MM-dd")
,表示当前日期。并且勾选右侧的Skip if defined
,作用是:由于这个值已被定义,在代码模板输入后,光标就不会自动移到这个变量这里。
3.Logcat 栏的过滤栏不见了
尝试移动 logcat 框到上下左右即可。
4. Logcat 过滤 Log
在过滤栏填入此正则表达式,勾选右侧 Regex 框:
^(?!.*不需要的内容)(?!.*另一个不需要的内容)(.*需要的内容|.*另一个需要的内容)
其中不需要的内容
和需要的内容
自行替换即可,可以无限连缀。
5. Android Studio 报红但是可以运行
尝试一:clean project 、rebuild project
尝试二:File → Invalidate caches / Restart
尝试三:关闭 Android Studio,删除项目文件夹下的 .gradle、.idea 文件夹,重新打开 Android Studio,在设备上运行项目,安装一次 app。
6.Debug 变得很卡,并提示 method breakpoints may dramatically slow down debugging
查看所有断点:
取消勾选 Java Method Breakpoints
7. 在 Marketplace 中搜索插件时,不显示搜索结果。
点击 File -> Settings -> Plugins,点击 Installed 右边的齿轮,在下拉框中选择 Manage Plugin Repositories:
然后添加上这个 URL: https://plugins.jetbrains.com/
参考:Plugins inside Android Studio Marketplace not showing when browsing
8.中文乱码
点击 Help -> Edit Custom VM Options,如果没有这个文件的话,会提示让你创建这个文件。
编辑这个文件,在文件底部添加一行:
-Dfile.encoding=UTF-8
参考文章:
Android Studio 3.6.3 Logcat 状态栏输出出现中文乱码的问题——完全解决
注:有的文章中说修改 Android Studio 安装目录下 bin/ 文件夹中的 studio64.exe.vmoptions,的确也能用,但 Android Studio 更新时会提示这个文件被篡改了,然后让你替换掉这个文件,所以不是长久之计。而本文记录的这个方法看起来是 IDEA 给我们提供的自定义 VM Options 的渠道,在 Android Studio 更新时应该会保留,不过笔者暂未测试过。
9.修改 Logcat 输出日志的颜色
- 在 Setting 中搜索 Logcat
- 取消右侧 Inherit values from 的选择,即可在上方的 Foreground 中设置自己想要的颜色
- 最后点击 Apply → OK
附上图中各个级别的日志颜色值:
VERBOSE:#BBBBBB
DEBUG:#54CEE3
INFO:#55E350
WARN:#F8DA3F
ERROR:#FF5370
ASSERT:#FF9492
10. 工具栏不见了
有时候,Android Studi
11. “Launch succeeded” but not installed
在 StackOverflow 上有人说降级 gradle,笔者测的时候,戳一下 “Sync Project with Gradle Files” 就好了。不一定适合所有情况,但可以试试。
参考文章:“Operation Succeeded” in Android Studio 4.1, with no action
12. 设置达到指定字符长度时自动换行
在格式化的时候,代码过长会自动换行。但有时一行并不是很长,也触发了换行。这个问题可以通过修改自动换行的长度解决:
13. Android Studio 底部 行号:列号 不见了
在 Android Studio 底部有个行号:列号
,点击可以输入行号自动跳转至某行。这个功能还挺好用的。
在 View -> Status Bar Widgets -> Line: Column Number
中开启,如果不喜欢这个功能也是在这里关闭。需要注意的是,如果要开启这个功能,还需要保证 Status Bar Widgets
上方的 Status Bar
也是勾选上的。Status Bar
表示底部整个状态栏。
14. SourceSet with name ‘main’ not found
运行 Java 的 main() 方法时,有时 Android Studio 会报 SourceSet with name ‘main’ not found。
修复方案是在 .idea
文件夹下的 gradle.xml
文件中添加 <option name="delegatedBuild" value="false" />
15. Android Studio 全局 proxy 配置
单个项目中配置 proxy 的位置在项目的 gradle.properties
中。如果要清除代理设置,还需要检查全局是否设置了代理。全局 proxy 配置路径是:C:\Users\%USERNAME%\.gradle\gradle.properties
16. Incompatible Gradle JVM 问题,Android Studio 设置 Gradle JDK
Sync Project 时,有时候会遇到报 Incompatible Gradle JVM 错,例如:
Your build is currently configured to use incompatible Java 21.0.5 and Gradle 7.2. Cannot sync the project.
We recommend upgrading to Gradle version 8.10.
The minimum compatible Gradle version is 8.5.
The maximum compatible Gradle JVM version is 17.
Possible solutions:
- Upgrade to Gradle 8.10 and re-sync
- Upgrade to Gradle 8.5 and re-sync
这时候需要修改 Gradle JDK 版本或者 Gradle 版本。
File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle -> Gradle JDK
查看 Gradle 版本:
File -> Project Structure
六、Kotlin 篇
1.判断 lateinit 的变量是否已被初始化
private lateinit var dog: Dog
if (::dog.isInitialized) {
....
}
七、Android 篇
1. java.net.UnknownServiceException: CLEARTEXT communication to not permitted by network security policy
Android 9.0适配的问题,将 targetSdkVersion 降低到 27 或以下可以解决,也可以选择适配 Android 9.0
适配方式有两种:
在 AndroidManifest 中设置允许明文传输:
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
这是最简单的方式。
或者新建一个 res/xml/network_security_config.xml 文件,注意替换需要明文传输的域名:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">api.example.com(to be adjusted)</domain>
</domain-config>
</network-security-config>
在 AndroidManifest 中声明使用此文件作为网络安全配置:
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>
</manifest>
2.忽略警告 “Access can be private” 或者 “Access can be package-only”
在方法前添加注解
@SuppressWarnings({"WeakerAccess"})
3. 打印 Activity 堆栈信息
adb shell dumpsys activity activities
这个命令打印所有存活的 Activity及其堆栈信息
adb shell dumpsys activity activities >文件名
这个命令输出所有存活的 Activity及其堆栈信息到文件
4.values 资源文件夹匹配规则
以 strings 为例,比如匹配英国资源:
- 先寻找
values-en-rGB
中的 string 中是否有此资源 - 如果没有找到,则再找
values-en
文件夹下是否有此资源 - 如果还是没有找到,则在
values-en-XX
(XX指任意国家,如values-en-rFR
、values-en-rDE
)这一系列中,寻找此资源 - 如果还是没有找到,则在
values
文件夹中寻找默认的资源。 - 如果
values
文件夹中再找不到就会 crash 了。
八、命令行篇
1. 命令行网络请求
GET 请求:
curl -X GET 请求地址
如:
curl -X GET https://www.baidu.com/
POST 请求:
curl -X POST --data "{\"body\":\"This is a Message.\"}" 请求地址
Head 信息:
curl -X POST --data "{\"body\":\"This is a Message.\"}" -H "Content-Type: application/json" 请求地址
携带用户名密码:
curl -D- -u 用户名:密码 -X POST --data "{\"body\":\"This is a Message.\"}" -H "Content-Type: application/json" 请求地址
2.cmder 设置默认打开目录
Cmder,命令行神器。
在设置中,修改 Startup → Task → {cmd::Cmder}
cmd /k "%ConEmuDir%\..\init.bat" -new_console:d:D:\
其中,D:\
就代表默认打开目录。
3.Cmder 设置别名
编辑 安装目录\cmder_mini\config\user_aliases.cmd
文件,将别名添加到里面。如:
adbd=adb disconnect
传参:
commit=git commit -m "$*"
此时就可以使用:
commit message
效果等同于:
git commit -m "message"
多个参数:
printTest=echo $1 $2
此时,使用
printTest Hello World
就会在控制台输出
Hello World
组合命令,使用 &&
连接多个命令,每个命令会依次执行,后面的命令会等待前面的命令完全执行完毕后才执行。
例如:
sync=git add . && git commit -m "sync"
4. Windows 刷新 dns 缓存
ipconfig /flushdns
5. Windows 命令行打开网页
cmd /c start 网址
6. Cmd 输出到文件时乱码
在cmd中输入"chcp"命令,查看当前系统的默认编码格式,例如:
chcp // 输出结果为:当前代码页: 936
在cmd中输入以下命令,将系统的默认编码格式设置为UTF-8:
chcp 65001
九、Java 篇
9.1 String 存储位置
new 出来的 String 存储在堆区:
String a = new String("abc");
直接双引号写的 String 存储在元数据区:
String b = "abc";
两者的地址是不同的:
// 输出 false
System.out.println(a == b);
但 equal 方法是相等的:
// 输出 true
System.out.println(a.equals(b));
调用 intern 方法,可以将堆区的 String 转换为元数据区的引用:
String c = a.intern();
这时,c 和 b 就是指向的同一个地址:
// 输出 true
System.out.println(c == b);
十、开发篇
1. 打印 Log 与开发同样重要
在功能开发完成后,一定要专门抽出时间打印相关日志,日志务必做到详尽,包含正确流程的每一步,错误流程的每一步以及出错的原因,否则上线后如果出现问题,将很难追踪。
十一、Mac 篇
1. Mac 设置环境变量
mac 环境变量加载顺序:
/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc
一般设置到 ~/.bash_profile 中。
mac 设置环境变量的命令:
echo 'export 环境变量名=环境变量值' >> ~/.bash_profile && source ~/.bash_profile
例如:
echo 'export ANDROID_HOME=/Users/$USER/Library/Android/sdk' >> ~/.bash_profile && source ~/.bash_profile
这个命令包含两个指令,设置环境变量并使其生效。
查看环境变量:
echo $PATH
十二、Chrome 篇
1. 开启 Chrome 多线程下载
进入Chrome 实验功能的网址 chrome://flags/
搜索 Parallel downloading,将其设置为 enabled,再重启 Chrome 就能生效了。
或者直接输入这个网址:chrome://flags/#enable-parallel-downloading
2. 快速到达页面顶部、底部快捷键
快速到达页面底部:end 键
快速到达页面顶部:home 键