Android Studio高效開發技巧(持續更新)

1.1 常用快捷鍵

本文所述快捷鍵基于AS設置"Setting-Keymap"中選擇"Eclipse"

操作 Window快捷鍵
刪除當前行 Ctrl + D
復制當前行 Ctrl + Alt + ↓
全局改名 Shift +Alt + R
當前文件查找 Ctrl+ F
全局查找 Ctrl + H
查看引用 Ctrl + G
代碼層級折疊 Ctrl + Shift + .
方法body折疊 Ctrl + .
格式化代碼 Ctrl + Alt + L
局部變量提取為成員變量 Ctrl + Alt + F
優化當前類導包 Ctrl + Alt + O
從光標當前開始選擇 Shift + 方向箭頭
自動代碼生成 Alt + Insert
Build Project Ctrl + B
Forward前進 Alt + →
Back后退 Alt + ←
注釋當前行 Ctrl + /
注釋塊 Ctrl + Shift + /
包裹代碼塊 Shift + Alt + Z

可以在AS的設置中查看快捷鍵,快捷鍵支持自定義修改

快捷鍵設置

還可以根據鍵盤按鍵快速搜索,直接按住快捷鍵便可搜索

快捷鍵搜索

1.2 后綴代碼補全

AS預定義了很多根據后綴名進行代碼補全的規則,在設置Settings - Editor - General - Postfix Completion中可以查看已有規則,目前支持Java/Kotlin,但是不支持自定義和修改。

下面舉幾個栗子。

  • .var / .field - 快速定義局部變量/成員變量
  • .null / . nn - 判空/判非空
  • .if / .else - 快速寫if表達式
  • .for / .fori / .forr - 循環遍歷

1.3 常用Menu功能

  • 代碼對比

debug的時候總有想把某個類的當前代碼和歷史某分支某提交的代碼比較一下的需求,AS自帶的git便提供了這樣的功能。打開需要比較的類,然后在菜單欄選擇VCS - Git - Compare with(或者來類文件里直接右鍵選擇git再選Compare with),等待AS加載當前類的歷史提交記錄,之后選擇某個提交記錄進行對比便可。

AS還支持當前代碼與剪貼板中代碼進行對比,先復制需要比對的代碼,然后選中類中需要被比對的部分,右鍵選擇Compare with Clipboard


  • 代碼折疊

業務邏輯復雜的情況下,類長度可能會很長,上下滾動看代碼的時候會很累,這時候可以把無關代碼折疊起來,代碼看起來會更加清晰。在類文件中直接右鍵選擇Folding - Collapse All把代碼塊全數折疊(包括變量聲明、方法體、jdoc注釋等),如下圖

image.png

右鍵選擇Folding - expend doc comments可以把jdoc注釋打開,這樣看方法定義會更清晰,其他折疊功能類似。


  • 從歷史拷貝中粘貼

有時候為了研究一段代碼的效率,改來改去,復制粘貼了若干次,后面發現之前的寫法可能更好,想把代碼找回來,但是靠Ctrl + Z快捷鍵返回已經回不去之前的代碼了,這時候可以從歷史拷貝中粘貼之前的代碼。如下圖

劃重點!重啟之后AS的歷史拷貝記錄會被清空,也就沒法使用上述方式找回歷史代碼了。所以還是建議用//或/***/暫時注釋關鍵的代碼,這樣便于后面找回。


  • 省電模式

省電模式顧名思義是為了電池續航時間更長,使用于筆記本電腦,開啟之后AS會關閉一系列的耗電操作,包括錯誤突出顯示和動態檢查、自動彈出式代碼完成和自動增量式后臺編譯等。這簡直是喜歡在星巴克看代碼的程序員們的福音。在菜單欄中選擇File - Power Save Mode


1.4 常用配置

Live Templates 動態模板

AS自定義好了很多動態模板,使用單詞縮寫快速填充代碼,比如使用“pfs”快速填充"public static final",使用"lwm"來快速填充android:layout_width="match_parent"等。使用范圍涵蓋Java/Kotlin/C++/xml/html/等絕大多數開發常用文件,用戶可自定義新的動態模板,也可修改AS已自定義好的模板。先來個gif圖感受下(修改局部變量為成員變量時用了快捷鍵)

在AS中已經預定義好了很多模板,使用范圍包括Java/xml/C/C++/Kotlin等,如下圖所示。

下面列舉幾個AS自定義好的模板。

  • psf / psfs / prsf - 常量定義
  • logd / logt - 快捷log輸出
  • itar / ritar - 快捷數組遍歷
  • iter - 快捷遍歷(數組/Collection/Map均支持)
  • itli / itco - 快捷Collection遍歷
  • lww / lhm - 快速填充布局代碼

AS還支持自定義模板,下面舉2個栗子。

  • 自定義簡單模板

找到Live Templates中的plain分組,在這里添加簡單模板,如下:

image.png

之后便可以使用psfb來快速填充public static final boolean

自定義類文件頭描述

1)在Settings - Editor - Code Style - Live Templates中找到右側的"+"號,點擊選擇Template Group然后自定義命名,比如"MyCustom"
2)選定剛才創建的模板分組MyCustom,再次點擊右上角的"+"號然后選擇Live Template,輸入AbbreviationDescriptionTemplate Text(可以定義變量)

3)看到提示"No applicable contexts yet.",點擊旁邊的Define,選定作用域

4)選定Edit variables,選擇AS自帶方法為變量賦值,賦值完畢之后點擊確定,之后就可以在文件中實踐檢驗了

給個效果gif圖

author.gif

這里$USER$默認取的是Windows賬號里的username,如果想要修改,可以在AS安裝目錄\bin\studio64.exe.vmoptions加入(32位的電腦則修改studio.exe.vmoptions)

-Duser.name=[your name]

  • 超字符自動換行

一行代碼如果太長,可讀性就會變得不太友好,AS中提供了超過多少字符之后自動換行的設置。比如設置一行超過120字符后自動換行,如下操作。

Settings - Editor - Code Style - Java - Wrapping and Braces中,將Hard wrap at更改為120,
Ensure right margin is not exceeded勾選上。

設置完畢后,使用格式化快捷鍵(Ctrl + Alt + L)便可使用,自動換行方便,但是有時候不太美觀,建議還是手動換行。


  • AS虛擬機設置

AS的虛擬機支持參數設定修改,在其安裝目錄下的\bin\studio64.exe.vmoptions下是其官方默認配置,如下圖

這里我們只關注對編譯運行影響較大的兩個參數,-Xms,-Xmx、

  • -xms JVM啟動的起始堆內存,用于分配給對象的內存
  • -Xmx AS使用的最大堆內存,可以根據電腦性能設置,如16g的電腦可設置4g,8g電腦設置2g

劃重點!不建議直接修改\bin\studio64.exe.vmoptions文件,一旦修改出錯AS會無法啟動,非要修改時請注意備份。最合適的操作是在菜單欄里選擇Help - Edit Custom VM Options,創建新的vmoptions文件(一般位于系統盤:\Users\用戶名.AndroidStudio3.1\config下)然后再修改,AS運行時會自動把修改內容合并到\bin\studio64.exe.vmoptions中,這樣修改內容就生效了,且一旦修改出現問題,直接把.AndroidStudio3.1\config下的vmoptions文件刪除即可。

此外,AS的參數配置還可以通過修改\bin\idea.properties實現,但凡修改請先做好備份,以便恢復原來的配置。
更多參數修改請參考:oracle官方vmoptions 參數說明


  • 方法排序

在Setting - Editor - Java - Arrangement
如果你總是調整自己寫的方法,以使互相調用或功能相關的方法能靠近,可以這樣設置。如第上一步的步驟,在標簽中選擇Arrangment,勾住Keep dependent methods together,后面可以自己選擇是按廣度排序還是按深度排序。


  • 干掉多余的tab和空格

Settings --> Editor --> Auto Import ,勾選 Optimize imports on the fly


  • 設置if{}代碼塊格式

每個程序員的碼字習慣不盡相同,有些人喜歡

if (2 < 3) return;
else if (2 > 3) return;
else Log.d("BUG", "我是強迫癥,我不喜歡方括號");

但也有人喜歡代碼喜歡加{},因為這樣顯得更加清晰,而且if{}else{}的代碼都被括起來了不易出錯,就如下面的

if (2 < 3) {
    return;
} else if (2 > 3) {
    return;
} else {
    Log.d("BUG", "我也是強迫癥,但我喜歡方括號");
}

AS默認是不強迫加方括號的,但為了滿足各類強迫癥患者,在設置里都提供了代碼格式設置。如果需要代碼強制加上方括號,在Setting - Editor - Java - Wrapping and Braces下找到'if()' statement,在Force braces選擇Always,然后再用快捷鍵格式化代碼,發現整個世界是那么美好!


  • Spelling單詞拼寫檢查

AS支持英文單詞拼寫檢查,絕大多數英文單詞都支持,但總有些單詞縮寫沒有支持到,或者工程用到了他國文字而AS本身不支持,這時候AS就會用下劃波浪線標記出單詞拼寫有誤,對于強迫癥患者來講這沒法忍受。所幸AS支持拼寫字典庫,在Settings - Editor - Spelling中可以設置特殊的單詞縮寫,以及導入某國字典庫。

  • 當AS標記一個單詞為拼寫錯誤時,可以用快捷鍵Alt+Enter選擇save xxx to dictionary將新單詞加入AS字典中,之后再出現同個單詞AS便不會再報拼寫錯誤。也可以在設置欄Accepted Words中點擊"+"手動加入新單詞。
  • 如果項目中需要支持到多國文字比如法語、丹麥語等特殊語種,可以在字典庫下載相應字典導入,便可支持多國文字拼寫檢查,下面以法語為例

圖中AS用波浪線標記單詞拼寫錯誤,是因為AS還不支持法語單詞拼寫檢查,在字典庫中下載French字典,下載完是個zip壓縮包,解壓,然后在AS的Settings - Editor - Spelling - Dictionary中點擊"+"號選擇剛解壓好的文件夾,再看下剛才的文件,波浪下劃線不見了。


  • 單詞駝峰選擇

使用快捷鍵"Ctrl + →" 和"Ctrl + ←"選擇單詞的時候,AS默認是不支持駝峰跳轉的,如下圖:

Settings - Editor - General - Smart Keys中勾選Use "CamelHumps" words,便可支持駝峰跳轉了,修改單個單詞時變得更加友好點。


  • 自動導包

Settings - Editor - General - Auto Import中將Optimize imports on the flyAdd unambiguous imports on the fly勾選上。勾選之后,當在類中使用新的類時會被自動導入,如下圖

自動導包很方便,但有時很容易鬧烏龍。比如類C在包A中被聲明為默認包內引用,但包同時也存在同名類C,第三方調用者在使用類C時AS可能會誤導包,開發者如果沒及時發覺就會被小坑一把。


  • 關閉安全連接

有時候發現某些資源總是下載不回來,但是梯子搭了,配置也是正確的,那可能是AS的安全訪問策略阻止了資源訪問,可以先關閉之后下完資源再打開。
Setting - Appearance & Behavior - System Settings - Update - Use secure connection,將"√"勾選去掉。


  • 并行編譯

gradle的任務支持并行執行,工程比較龐大的時候編譯速度會比較慢,可以打開并行編譯的開關,以獲取更快的編譯速度,但這需要更大的運行堆內存,對于性能好的機器(如內存16G)可以分配更大的堆內存。設置路徑如下:
Settings - Build, Execution, Deployment - compiler - Compile independent modules in parallel

實際上在AS創建項目的時候在項目根目錄下的gradle.properties文件就包含了并行編譯和最大堆內存配置。


  • 顯示實時內存

AS是吃內存大戶,編譯運行的時候如果內存不夠用就會很慢很慢,可以在設置里打開實時內存使用來查看編譯運行過程中到底使用了多少內存,然后再根據這個內存來調整AS的最大堆內存設置。
設置路徑: Settings - Appearance - Window Options - Show memory indicator

點擊內存占用顯示區域還可回收部分內存。


  • 啟動時選擇最近打開的項目

AS關閉后下次啟動會默認打開上次關閉前打開的項目(有多個則打開多個),但有些時候我們并不像這樣,可以在Settings - Appearance & Behavior - System SettingsReopen last project on startup的勾選去掉。

去掉之后重啟AS,再打開就可以選擇最近打開過的項目。


  • 修改默認工程結構

寫在最前面,Android Studio升級時會檢測plugin文件夾下為文件內容,如果你修改了文件夾內文件內容,AS會無法升級,所以在修改前請務必備份原文件,在升級時恢復舊配置,升級完畢后再使用修改后的配置。否則升級時肯定會報錯,如下

image.png

如果沒備份,那只能用大招了,重新下載安裝Android Studio,安裝時選用舊配置即可。

首先了解下FreeMaker,一款模板引擎: 即一種基于模板和要改變的數據, 并用來生成輸出文本(HTML網頁,電子郵件,配置文件,源代碼等)的通用工具。AS中用FreeMaker來自動生成一些文件,比如xml/Java/Android/Kotlin等,在新建文件的時候AS有引導頁面給我們添加自定義參數,生成文件的步驟則是用了FreeMaker(其文件以.ftl作為后綴)。

AS已經定義好了標準Android項目的文件結構,新建項目StructureDemo1,添加Empty Activity命名為MainActivity,AS生成的結構如下(為了排版,請手動旋轉圖片查看)

AS新建工程的結構模板位于\plugins\android\lib\templates\gradle-projects下,可以看到有很多項目類型的標準結構。

如果能修改新建項目的結構,是不是可以考慮把項目標準通用的

  • build.gradle
  • colors.xml
  • string.xml
  • .gitignore

等文件加入標準結構中,如此開發時可減少許多重復工作。下面以構建標準Android項目結構為例,以下操作的文件夾均位于\AS安裝根目錄\plugins\android\lib\templates\gradle-projects下。

友情提示:請在修改前備份所修改文件,以備出問題時恢復原有狀態

1)找到\NewAndroidProject\root\build.gradle.ftl,以管理員方式打開,然后加入如下配置

buildscript {
...
    ext {
        minSdkVersion = 21
        sdkVersion = 27
        compileSdkVersion = 28
        targetSdkVersion = 22
        buildToolsVersion = '28.0.0'
        junitVersion = '4.12'
        supportLibraryVersion = '28.0.0'
        androidEspressoVersion = '3.0.2'
        androidTestVersion = '1.0.2'
    }
}

2) 找到\NewAndroidProject\root\gradle.properties.ftl,以管理員方式打開,修改如下(-Xmx可以根據個人電腦性能配置)

3) 找到\NewAndroidProject\root\project_ignore,將通用的gitignore配置加入

4))找到\NewAndroidModule\recipe.xml.ftl,加入如下修改

5)可在\NewAndroidModule\root\res\values中的color.xml/strings.xml等文件加入項目通用的內容

6)關于buile.gradle生成規則的修改可在\NewAndroidModule\root下的shared_macros.ftlbuild.gradle.ftl,只要遵循FreeMaker的語法即可。

修改完后重啟AS,之后再新建工程,驗證修改正確與否。附上修改后的工程結構。


修改之后的工程結構
添加自定義顏色
根build.gradle配置
自定義gitingore文件

1.5 注釋劃分

AS提供了Structure視圖查看類內部結構,當類比較復雜的時候尋找變量會變得比較麻煩,這時候可以使用關鍵字region進行注釋劃分,把功能相關的變量劃分在一起顯示,這樣再用Structure查看類試圖時會更加清晰明了。用法如下(可選中代碼然后用快捷鍵Shift+Alt+Z喚出Surround With功能選擇region)

// region 相機相關參數
    private final String TAG = getClass().getSimpleName();
    public RecogService.recogBinder mRecognizeBinder;
    private CameraTextureView mCameraTextureView;
    private int mPreviewWidth;
    private int mPreviewHeight;
// endregion

使用注釋劃分之后的Structure試圖

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容