备忘录

Gradle

下载的依赖包在什么位置?

  • Mac系统默认下载到:/Users/(用户名)/.gradle/caches/modules-2/files-2.1
  • Windows系统默认下载到:C:\Users(用户名).gradle\caches\modules-2\files-2.1

也可在 External Libraries下找到需要查看的依赖包,
以oss为例,在Gradle:com.aliyun.dpa:oss-android-sdk:2.8.0 上右键->Libraries Properties 也可查看本地路径。 查看依赖包本地位置操作 查看依赖包本地位置

下载的插件包在什么位置

  • Mac系统默认下载到:/Users/(用户名)/.gradle/caches/modules-2/files-2.1/com.android.tools.build/gradle

Gradle离线下载配置

离线下载官方地址:https://services.gradle.org/distributions

点击对应项即可下载。

  1. 查看项目gradle版本

    打开项目的根目录下的 /gradle/wrapper/gradle-wrapper.properties,我的配置如下:

    1
    2
    3
    4
    5
    6
    #Tue Mar 12 16:38:29 CST 2019
    distributionBase=GRADLE_USER_HOME
    distributionPath=wrapper/dists
    zipStoreBase=GRADLE_USER_HOME
    zipStorePath=wrapper/dists
    distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

    使用的gradle版本为4.10.1,离线下载可以直接点击https://services.gradle.org/distributions,找到对应项 gradle-4.10.1-all.zip,或者在 https://services.gradle.org/distributions/后接上 gradle-4.10.1-all.zip即可下载。比如 https://services.gradle.org/distributions/gradle-4.10.1-all.zip。建议用迅雷下载。

  2. 找到gradle存放位置,将下载的gradle离线包放入对应文件夹内。

    Mac路径:/User/用户名/.gradle/wrapper/dists/dists文件夹下是以gradle版本为名称的文件夹。以小编4.10.1为例,打开 gradle-4.10.1-all文件夹,找到类似 455itskqi2qtf0v2sja68alqd这样的文件夹,直接将之前下载的zip包放入即可。

    下图中gradle-4.10.1-all.zip文件上方的三个为AS打开项目后自动解压生成的。

    gradle_list

    注:以gradle版本为名的文件夹及其里面的文件夹,需要先用Android Studio软件打开项目后才能自动生成。内部类似 455itskqi2qtf0v2sja68alqd这样的文件夹如果有多个,则按照时间,将对应的zip放入其中。

  3. 重新打开AS项目

gradle版本和插件版本对应关系

官网地址

Plugin version Required Gradle version
1.0.0 - 1.1.3 2.2.1 - 2.3
1.2.0 - 1.3.1 2.2.1 - 2.9
1.5.0 2.2.1 - 2.13
2.0.0 - 2.1.2 2.10 - 2.13
2.1.3 - 2.2.3 2.14.1+
2.3.0+ 3.3+
3.0.0+ 4.1+
3.1.0+ 4.4+
3.2.0 - 3.2.1 4.6+
3.3.0 - 3.3.2 4.10.1+
3.4.0 - 3.4.1 5.1.1+
3.5.0 5.4.1+

gradle命令

  1. 查看模块依赖详情

    1
    ./gradlew app:dependencies
  2. 查看模块依赖详情(指定configuration)

    1
    ./gradlew app:dependencies --configuration releaseUnitTestRuntimeClasspath

SSH

修改密码

  1. 终端进入目录 /Users/(用户名)/.ssh

  2. 输入 ssh-keygen -f id\_rsa -p

    -p 选项请求修改私钥的密码
    -f{filename} 选项去指定密钥的名称,比如其中的 id\_rsa 为指定的私钥文件名

  3. 原先有密码,则需输入old passphrase,旧密码; 原先没有密码,则直接输入新密码 new passphrase (empty for no passphrase)

Mac app打开问题处理

显示 “安全性与隐私”-“任何来源”

在 macOS Sierra 中,你会发现系统偏好设置的“安全性与隐私”中默认已经去除了允许“任何来源”的选项。 现在通过终端命令方式打开这个选项: 使用 spctl 命令:

1
sudo spctl --master-disable

OK!现在在 “安全性与隐私”中会多出“任何来源”这一选项。让我们愉快地使用app吧。

macOS 10.15 Catalina xxx.app已损坏,无法打开,你应该将它移到废纸篓解决方法

更新macOS 10.15 Catalina后,很多在10.14上可以使用的App都会提示提示【xxx已损坏,无法打开,你应该将它移到废纸篓解决办法】,哪怕你在【安全与隐私 》 通用】中已经开启了“任何来源”,但还是会这样提示,其实解决方法很简单。就是绕过macOS的公证。

绕过公证:

在终端中执行如下命令

1
sudo xattr -rd com.apple.quarantine /Applications/xxxxxx.app

将其中的 xxxxxx.app替换为您需要设置的app名称。

比如软件StarUML:

1
sudo xattr -rd com.apple.quarantine /Applications/StarUML.app

或者复制以下命令粘贴到终端后

1
sudo xattr -rd com.apple.quarantine

打开Finder(访达),点击左侧的 应用程序,将应用拖进终端中,然后按键盘的回车键(return),输入密码,再按回车键,完成。

注意 quarantine 后面必须有个空格

某个程序绕开公证。 想恢复公正许怎么做

重装应用

Mac下用Charles实现Android http和https抓包

Mac下用Charles实现Android http和https抓包

Mac更新系统后无法使用git

更新了系统后,进入到git工程目录,输入git命令,提示错误:

1
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

进入Android Studio后提示:

1
2
can't start git: /usr/bin/git 
probably the path to git executable is not valid . `fix it`.

解决方案:

在终端输入:

1
xcode-select --install

据说原因是因为每次更新系统之后xcode就被卸载了,因此需要重新安装一次。

adb

多设备在线时,指定设备

  1. 通过adb devices命令获取所有online设备的serial number
1
2
3
4
➜  ~ adb devices
List of devices attached
11ab03c3 device
emulator-5554 device

具体需要选择哪个设备,可以通过插拔其中的设备进行辨别。

  1. 通过adb -s <serial number> 命令向设备发送adb命令

比如我需要安装app

1
➜  ~ adb -s 11ab03c3 install test.apk

Git

删除分支(本地、远程)

  1. 查看分支,获取分支名称

    1
    git branch -a
  2. 删除本地分支

    1
    git branch -d <BranchName>
  3. 删除远程分支

    1
    git push origin --delete <BranchName>

修改分支名称

git修改分支名称

Sourcetree操作:(实例:将br_test_rename改为br_test_rename_new

  1. 修改本地分支名称(BRANCHES目录下的是本地分支,下面提到的 REMOTES是远程分支)
    选中需要修改的分支br_test_rename
    右键,点击 Rename,在弹出的对话框内输入新的分支名称br_test_rename_new,点击 OK 按钮确认修改。
  2. 推送新名称分支到远程仓库
    点击 push按钮;
    在弹出的对话框内购选中br_test_rename_new前的选择框;
    点击OK按钮进行推送;
    推送成功后,可以在 REMOTES目录下看到br_test_rename_new的新分支
  3. 删除远程br_test_rename名称的旧分支
    REMOTES目录下找到br_test_rename名称的分支;
    右键,点击 Delete…
    在弹出的确认对话框内点击 OK 按钮进行删除;
  4. 整个修改过程就完成了。
    主要流程归纳为:
    • 修改本地名称
    • 推送
    • 删除远程旧分支

回退

  1. 本地仓库回退到指定版本

    1
    git rest --hard <commit id | HEAD^> //HEAD^表示上一个版本,HEAD^^ 表示上上个版本
  2. 暂存区回退到工作区

    1
    git reset HEAD <file>...
  3. 丢弃工作区修改(回到最新一次add或commit的状态)

    1
    git checkout -- <file>...

ssh与https相互切换

从ssh切换到https

格式:git remote set-url 远程仓库名称(当只有一个远程仓库时可省略) https地址

git remote set-url origin https://github.com/nhtzj/Java.git

从ssh切换到https

格式:git remote set-url 远程仓库名称(当只有一个远程仓库时可省略) ssh地址

git remote set-url origin git@github.com:nhtzj/Java.git

其他

  1. 添加远程仓库地址

    1
    git remote add origin git@gitee.com:goldsea/gitlearn.git

    格式:git remote add + 自定义仓库命名 + 仓库ssh地址

  2. 第一次推送本地仓库内容到远程仓库

    1
    git push -u origin master

    -u 参数的添加可以让本地仓库和远程仓库进行绑定

  3. 查看本地ssh key

    1
    cat ~/.ssh/id_rsa.pub
  4. 修改最近一次提交的提交信息(commit 未push)

    1
    git commit --amend

    在文本编辑器内编辑提交信息,再保存

  5. 查看分支操作记录(带时间)

    1
    git reflog show --date=iso <branch name>

Iterm2

快捷键

Mac终端Iterm2快捷键大全

分屏

  • 垂直分屏:command + d
  • 水平分屏:command + shift + d
  • 切换屏幕:command + option + 方向键 或者 command + [ ]

命令

  • 查看历史命令:command + ;
  • 查看剪贴板历史:command + shift + h
  • 上一条命令:ctrl + p
  • 搜索命令历史:ctrl + r
  • 删除错误的密码:ctrl + u

行内

  • 清除当前行:ctrl + u
  • 到行首:ctrl + a
  • 到行尾:ctrl + e
  • 删除当前光标的字符:ctrl + d
  • 删除光标之前的字符:ctrl + h
  • 删除光标之前的单词:ctrl + w
  • 删除到文本末尾:ctrl + k
  • 交换光标处文本:ctrl + t

    其他

  • 清屏:command + k

Vim 命令

多行注释

  1. 进入命令行模式,按ctrl + v(windows ctrl + q)进入 visual block模式
  2. 按上键( 或者下键)选中多行,把需要注释的行标记起来
  3. 按大写“I”键(Shift+i)进入插入模式,输入“#”(或者 “//”),然后按下“ESC”键(一下或两下)

取消多行注释

  1. 进入命令行模式,按ctrl + v进入 visual block模式
  2. 选中要删除的行首的注释符号,注意”//“ 要选中两个
  3. 按”d”即可删除注释

Android Studio

快捷键

  • 类结构(方法和成员变量):command +fn + F12 、菜单Navigate -> File Structure

  • 优化导包:control+option+o

  • 显示注释:control+J (在settings对话框的搜索框中,输入“quick doc”进行搜索)

  • 导出为成员变量:option+command+F (在Refactor -> Extract 内也有)

  • 切换tab: (需要切换英文输入法,光标在编辑器内,在Window -> Edit Tabs 内也能看到)
    上一页 shift+command+[

    下一页 shift+command+]

  • 切换窗口:command+`

  • 返回上一浏览位置 (具体可在keymap内搜索back或forward查看)
    返回上一次浏览位置back: option+command+ ← 或 command+ [
    返回下一次浏览位置forward: option+command+ →或 command+ ]

国际化,检查代码内的中文字符

利用AS中的全局搜索+正则表达式,搜索。

正则表达式:

1
^((?!(*|//)).)+[\u4e00-\u9fa5]
  • 打开全局搜索,位于 Edit -> Find - > Fild in Path

  • 在输入框内输入正则表达式:^((?!(*|//)).)+[\u4e00-\u9fa5]

  • 钩上 Regex,也可钩上 File mask,用于查找指定文件后缀的文件

  • In ProjectModuleDirectoryScope用于指定查询路径

  • 点击 Open in Find Window,在Find标签内一直保存。因为 Fild in Path窗口在你点击其他地方后就会消失。

as_find_in_path

Fetch failed: Could not read from remote repository

今天兴致勃勃地将Mac上地Android Studio 3.0升级到了3.1。但是用AS自带地图形化按钮提交和更新代码时(使用Git),却一直提示 “Fetch failed: Could not read from remote repository”。这可真是郁闷啊。Add、Commit都可以,就时Push不行。Add、Commit是对本地仓库地操作。用终端命令push又是可以的,所以该问题可以断定是3.1地AS将git的某个或某些配置改掉了。 解决途径: AS下进入: Settings -> Version Control -> Git -> SSH Executable 如果SSH Executable选择的是Built-in,将它改为Native。 OK!大功告成!

AS直接安装apk提示:安装包有异常,无法安装

Android Studio 3.0会在debug apk的manifest文件application标签里自动添加 android:testOnly="true"属性,导致IDE中run跑出的apk在大部分手机上只能用adb install -t来安装,在oppo手机上甚至安装不了

解决方式

在主工程 /gradle.properties内加入如下:

1
2
# gradle.properties
android.injected.testOnly=false

AS禁用原因:大致就是安全性问题

Android Studio 3.0 and FLAG_TEST_ONLY

参考

Disable ‘testOnly’ mode for Android Studio 3.0

More than one file was found with OS independent path ‘META-INF/proguard/androidx-annotations.pro’

处理方式

app/build.gradle内加入如下:

1
2
3
4
5
android {
packagingOptions {
exclude 'META-INF/proguard/androidx-annotations.pro'
}
}

android节点内添加packagingOptions`的内容

参考

More than one file was found with OS independent path ‘META-INF/proguard/androidx-annotations.pro’

Invoke-customs are only supported starting with Android O (–min-api 26)

Invoke-customs are only supported starting with Android O (--min-api 26)

处理方式

app/build.gradle内加入如下:

1
2
3
4
5
6
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

在`android节点内添加compileOptions的内容

参考

Invoke-customs are only supported starting with android 0 –min-api 26

Mac 快捷键

  • 全屏/退出全屏:control+command+F
  • Finder(访达)显示/隐藏 隐藏的文件或文件夹: shift + command + .

绘制圆图

  • drawCircle() + BitmapShader
  • Paint.setXfermode()

subLime

  • 设置不换行

    Preferences-->Settings-User

    添加 "word_wrap" : false,

权限

修改文件或文件夹拥有者

使用权限 : root

语法

1
2
chown [-fhv] [-R [-H | -L | -P]] owner[:group] file ...
chown [-fhv] [-R [-H | -L | -P]] :group file ...

参数 :

  • user : 新的文件拥有者的使用者 ID
  • group : 新的文件拥有者的使用者组(group)
  • -c : 显示更改的部分的信息
  • -f : 忽略错误信息
  • -h :修复符号链接
  • -v : 显示详细的处理信息
  • -R : 处理指定目录以及其子目录下的所有文件
  • –help : 显示辅助说明
  • –version : 显示版本

事例:

1
sudo chown -R $(whoami) ~/.ssh

修改 ~/.ssh目录及目录下的所有文件拥有者为 $(whoami)

$(whoami): 表示当前登录的用户

Android 开发注意事项

不能在 Activity 没有完全显示时显示 PopupWindow 和 Dialog

说明:

Android Activity 创建时的生命周期,按照 onCreate() -> onStart() -> onResume() -> onAttachedToWindow() -> onWindowFocusChanged() 的 顺 序 , 其 中 在Activity#onAttachedToWindow() 时,Activity 会与它的 Window 关联,这时 UI 才 会开始绘制,在 Activity#onWindowFocusChanged() 时,UI 才变成可交互状态,可以提示用户使用。如果在 Window 未关联时就创建对话框,UI 可能显示异常。 推荐的做法是在 Activity#onAttachedToWindow() 之后(其实最好是Activity#onWindowFocusChanged() 之后)才创建对话框。

坚持原创技术分享,您的支持是对我最大的鼓励!