編程雜記 —— Git、ADB、Android Studio 的疑難雜症彙總

文章目錄

簡介

工作、學習中總會遇到各種各樣的問題,本篇文章筆者將親歷的一些問題記錄下來,以便日後查閱。

不定期更新。

一、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了。

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

15.cmder 設置默認打開目錄

在設置中,修改 Startup → Task → {cmd::Cmder}

cmd /k "%ConEmuDir%\..\init.bat"  -new_console:d:D:\

其中,D:\就代表默認打開目錄。

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 protected]"

生成 RSA 公鑰:

ssh-keygen -t rsa -b 4096 -C "你的郵箱地址,如:[email protected]"

21.git 清除所有untracked file

git clean -f

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

24. git 恢復刪除的文件

git reset HEAD 文件路徑

或者恢復全部刪除的文件

git reset HEAD .

二、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
    }
    ...
}

三、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

四、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

3.Office已阻止訪問一下對象,以便保護你的安全

在“我的電腦”中輸入%temp%,然後回車,按時間排序,最近的文件就是被攔截的文件,點擊運行即可。

4.Win10 卡在鎖屏頁面,不顯示密碼輸入框

同時按下Ctrl + Alt + Delete就可以顯示密碼輸入框,然後輸入密碼即可。(智障 Windows,毀我青春)

五、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 框到上下左右即可。

六、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

2.忽略警告 “Access can be private” 或者 “Access can be package-only”

在方法前添加註解

@SuppressWarnings({"WeakerAccess"})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章