| Markdown版本筆記 | 我的GitHub首頁 | 我的博客 | 我的微信 | 我的郵箱 |
|---|---|---|---|---|
| MyAndroidBlogs | baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com |
AS 功能 設置 SDK AVD 簡介 MD
目錄
AS 基本使用
安裝及首次運行
Android SDK Manager
模擬器加速器
AVD Manager
AS項目的目錄結構
AS中項目的展示方式
AS 斷點調試
基本介紹
上側工具欄
左側工具欄
變量面板
模板 Templates
文件模板 File and Code Templates
文件模板
文件頭 Includes【重要】
預定義的變量
代碼模板 Live Templates【重要】
AS 進行單元測試
簡介
Java測試用例
Android測試用例
AS 基本使用
AS下載地址
SDK下載地址
SDK基礎工具包
離線幫助文檔
官方安卓示例離線版
CPU虛擬化檢測軟件
安裝及首次運行
安裝AS前,請先安裝JDK 8環境,並正確使用 JAVA_HOME 來配置環境變量
安裝時,注意選擇 Android Studio 和 Android SDK 的安裝目錄時,盡量放在同一個位置,並保證磁盤空間足夠大,因為后續這個目錄占用的空間非常大(10G+)。另外路徑中千萬不要有中文。
除此之外,安裝過程沒啥需要注意的,大約3分鍾就可以安裝完畢。
首次運行前,要先做以下最重要的事情!
在Android Studio安裝目錄下的 bin 目錄下,找到 idea.properties 文件,在文件最后追加disable.android.first.run=true
如果不這么搞的話,有人會卡很長時間,並最終彈出以下界面:

出現這個問題原因就是:網絡連接有問題(防火牆的問題)。我們可以通過以上配置跳過這一步。
首次運行時,會讓你選擇是否導入Android Studio的配置文件,如果你以前使用過Android Studio,可以選擇導入以前的版本。
除此之外,也沒啥可注意的。
但是一定要有個心理准備,啟動后會各種提示你更新AS、更新Gradle、更新SDK、更新......這一套下來,在網絡不好的情況下,可能一天就過去了(毫不誇張)。
Android SDK Manager
Android SDK Manager 是Android軟件開發工具包的管理器,用於從服務器下載安卓開發所需工具到本地。
AVD Manager 是Android虛擬驅動管理器,用來創建安卓模擬器,安卓模擬器所需的鏡像也是通過SDK Manager來下載的。
打開Android SDK Manager后,其列出的各工具作用如下:
━━Tools目錄(必須的工具):
┣ ━━Android SDK Tools(必須,只需下載一個版本,一般選最新版本):基礎工具包,版本號帶rc字樣的是預覽版。
┣ ━━Android SDK Platform-tools(必須,只需下載一個版本,一般選最新版本):從android2.3開始划出此目錄,存放公用開發工具,比如adb、sqlite3等,被划分到了這里。
┗━━ Android SDK Build-tools(必須,可以安裝多個版本):Android項目構建工具。
━━Android xxx(API xx)目錄(可選的各平台開發工具):
┣ ━━Documentation for Android Sdk(可選):安卓開發者官網的一些離線文檔,不過下載下來打開也很慢,后面會提供另外一個離線版。
┣ ━━SDK Platform(必須):對應平台的開發工具,需要在哪個版本的平台下開發就下載哪個。
┣ ━━Samples for SDK(可選,此項在高版本tools中已不提供,需要在IDE里通過Import Sample引入,當然也可以下載離線版):內置的安卓示例程序,推薦安裝。
┣ ━━Sources for Android SDK(可選):安卓API的源代碼,推薦安裝。
┗━━ xxxxxxxx Image(可選):各個以Image結尾的東西是支持相應平台的模擬器(使用真機調試或使用其它模擬器的話不需要安裝)
━━Extras目錄(可選的擴展):
┣ ━━Android Support Libraries(需要,高版本tools中已不見了,應該是集成到了別的地方):在低版本平台實現高版本平台控件效果時提供支持。
┣ ━━Android Support Repository(需要):主要是方便在gradle中使用Android Support Libraries,因為Google並沒有把這些庫發布到maven center或者jcenter去,而是使用了Google自己的maven倉庫。
┗━━ Intel x86 Emulator Accelerator(HAXM installer)(一般需要,但需要CPU支持虛擬化技術支持):windows平台的Intel x86模擬器加速工具,配合Intel x86 atom/atom_64 System Image使用可加快模擬器的運行速度。
如果獲取不到工具列表,或下載不了工具,請設置代理或翻牆,或百度一下……
Google開頭的文件一般用不到,而且使用需FQ。
模擬器加速器
最后那個模擬器加速器的使用,其只支持Intel x86架構系列模擬器,且下載后還需單獨安裝一次。
首先下載個小軟件 CPU虛擬化檢測軟件,監測你的CPU是否支持加速,如果檢測成功且已開啟,則會提示:此處理器支持虛擬化技術,BIOS中已啟用。
如果提示你的CPU支持虛擬化但未開啟,那么請自行開啟虛擬化即可,至於如何開啟,不同的主板進入BIOS的設置方式不一樣,但都大同小異,自行搜索即可。
注意,有些殺毒軟件會利用CPU虛擬化技術對電腦進行防護,比如360的核晶防護功能,這會造成虛擬機啟動失敗。所以如果你有類似的軟件開啟了類似的功能,請先關閉此類防護功能並重啟電腦。

如果Intel系列模擬器無法使用,就改用ARM模擬器。ARM模擬器缺點是慢....
AVD Manager
模擬器器參數設置:

啟動模擬器

avd默認位置是在【C:\Users\用戶名.android】,更改AVD存儲位置的方法:
- 在你希望存放到的路徑下建立【.android】文件夾,在.android文件夾下建立avd文件夾。
可以將原路徑下的.android文件夾及avd文件夾拷貝到新的路徑下,將【.ini】文件下的原路徑更改為新的路徑。

新建名稱為【ANDROID_SDK_HOME】的系統環境變量,將值設為你剛才建立的路徑。

設置完后,打開AVD Manager-->Tools-->Optaions可以看到如下信息

AS項目的目錄結構
新建工程項目后AS項目的目錄結構如下所示:

各目錄(文件)的作用如下:

app目錄下各目錄(文件)的作用如下:

AS中項目的展示方式
Project方式:用於瀏覽項目文件, Project 面板會顯示當前的所有的 module,android application module會顯示一個手機圖標,android library module會顯示一個書架圖標;java library module會顯示一個咖啡圖標。這種方式的展示更類似於Eclispe,開發時一般都是采用這種方式。Android方式:以app形式展示,manifests文件夾存放清單文件。這種方式相比Project方式減少了很多層級,有利於快速找到java和res目錄下的文件。這是新建一個工程后使用的默認的展示方式。- Project File方式:以和在window資源管理器中相同的樣式展示。
- Package方式:自己看圖吧,感覺沒啥卵用。
- Production:產量,產品,生產,制作。沒啥卵用。
- Tests、Local Unit Tests、Android Instrument Tests:和測試相關的展示方式,平時沒啥卵用
AS 斷點調試
基本介紹
此種調試方式是通過凍結應用運行的狀態,仿佛時間停止了一般,然后我們逐一觀察此時程序的各個參數是否符合我們的預期。
這種調試方法適用於對時間不敏感的程序。也就是說被調試的程序線程不需要依賴別的線程,即使暫時停止工作也不會影響別的工作線程或者受別的工作線程影響。
在希望代碼暫停運行的地方打斷點,在代碼前點擊一下,出現一個紅色的圓點,如果想取消,再點擊一次即可。
點擊頂部工具欄圖標開啟調試模式。
Frame區域是程序的方法調用棧區,這個區域中顯示了程序執行到斷點處所調用過的所有方法,越下面的方法被調用的越早。
由此順序可了解Android系統啟動流程,也即是怎么一步步調用到Activity的onCreate方法的:

上側工具欄

調試時的正確姿勢是:
- 如果想一步步監測程序的運行過程,就一直點擊【step over】
- 如果只想監測運行到某幾行關鍵代碼時的狀態,就設置多個斷點,然后一直點擊【run to cursor】
- 如果想看看某個方法里面的運行過程,就點擊一次【step into】或【force step into】
- 如果想跳出這個方法,就點擊一次【step out】
命令解釋:
- step over:【一步步往下走】程序向下執行一行,如果當前行有方法調用,這個方法將被執行完畢返回,然后到下一行。
- step into:【看到方法往里走】程序向下執行一行,如果該行有自定義方法,則運行進入自定義方法(不會進入官方類庫的方法)。
- force step into:【所有方法看完整】能進入任何方法,這個可以看到你所調用的所有方法的實現,研究源碼使用非常方便,平時使用不到。
- step out:【下一個斷點或跳出方法】
- 如果在調試的時候你進入了一個方法,並覺得該方法沒有問題,你就可以使用 step out 跳出該方法,返回到該方法被調用處的下一行語句;注意該方法已執行完畢。
- 如果后面有斷點則走到下一個斷點;如果后面沒有斷點,而是在一個調用的方法當中,則會跳出這個方法,並繼續走。
- run to cursor:【下一個斷點】和 step out 中的【下一個斷點】功能相同,但是因為功能專一,所以不容易出現莫名其妙的跳轉。
- drop frame:【回退到上一個調用的方法】返回到當前方法的調用處重新執行,並且所有上下文變量的值也回到那個時候。只要調用鏈中還有上級方法,可以跳到其中的任何一個方法。所謂的Frame,其實對應的就是一次方法調用壓棧的信息。
左側工具欄

- resume program:程序繼續往下執行,直到遇到下一個斷點(感覺和 run to cursor 沒任何區別呀)
- pause program:程序暫停往下執行
- stop app:停止調試,App會關閉,你再次打開時不再是調試模式
- view breakpoints:查看所有設置的斷點及其位置,也可以設置斷點的一些屬性
- mute breakpoints:暫時使所有斷點失效
- get thread dump:獲取線程堆棧信息
- restore layout:恢復調試版本為默認的布局
變量面板
1、直接在代碼中就可以看到代碼執行到當前位置時各個變量的值
2、在Variables面板中也能查看

左邊幾個圖標代表的功能分別是:添加、刪除變量,上下移動變量的位置,復制(duplicate),將要觀察的變量放在另一個tab欄,如下效果:

3、如果我們僅僅想觀察指定幾個變量的值的變化,可以點擊Watches,點擊+號,然后輸入變量的名稱回車就OK了。
- 如果變量名比較長我們可以選擇Variables中的變量名然后右鍵,選擇[Add to Watches],然后Watches面板中就有了
- 我們可以通過快速設置變量的值來加快調試速度,選擇[Variables]中的變量名右鍵,選擇[Set Value..]。
- 比如,我們在一次100次的for循環中,想觀察第90次循環后的執行情況,就可以將循環次數手動改為90,這樣就不用將循環控制變量從0點到90了。
模板 Templates
文件模板 File and Code Templates
文件模板:Settings –> Editor –>【File and Code Templates】,或者在右鍵new時選擇子菜單【Edite File Templates...】
文件模板
–> 【Files】,可用來修改、添加新建某類型文件(比如Class、Interface、C++)時的文件模板
此文件保存位置【C:\Users\Administrator.AndroidStudio2.3\config\fileTemplates\internal】
以下為新建Class文件的模板:
#if (${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#if (${IMPORT_BLOCK} != "")${IMPORT_BLOCK}
#end
#parse("File Header.java")
#if (${VISIBILITY} == "PUBLIC")public #end #if (${ABSTRACT} == "TRUE")abstract #end #if (${FINAL} == "TRUE")final #end class ${NAME} #if (${SUPERCLASS} != "")extends ${SUPERCLASS} #end #if (${INTERFACES} != "")implements ${INTERFACES} #end {
}
注意:上面代碼中的【File Header.java】文件即為下面的文件頭

This is a built-in template used each time you create a new Java class, by selecting New | Java Class | Class from the popup menu in one of the project views. The template is editable. Along with Java expressions and comments, you can also use predefined variables (listed below) that will then be expanded like macros into the corresponding values. It is also possible to specify an arbitrary number of custom variables in the format ${
這是每次創建新的Java類時使用的內置模板,方法是選擇New | Java類| 一個項目視圖中的彈出菜單中的類。該模板是可編輯的。 除了Java表達式和注釋外,您還可以使用預定義的變量(如下所示),然后將其擴展為宏類型到相應的值。 也可以以 $ {
文件頭 Includes【重要】
–> 【Includes】,可添加、修改文件頭
此文件保存位置【C:\Users\Administrator.AndroidStudio2.3\config\fileTemplates\includes】
/**
* Desc:
* @author <a href="http://www.cnblogs.com/baiqiantao">白乾濤</a><p>
* @date ${DATE} ${HOUR}:${MINUTE} <p>
*/
This is a built-in template 內置的模板. It contains a code fragment片段 that can be included into file templates (Templates tab) with the help of the #parse directive指令. The template is editable. Along with除了 static text, code and comments注釋, you can also use predefined預定義的 variables變量 that will then be expanded like macros宏 into the corresponding相應的 values.
預定義的變量
Predefined variables will take the following values:
${PACKAGE_NAME} //name of the package in which the new file is created
${USER} //current user system login name
${DATE} //current system date
${TIME} //current system time
${YEAR} //current year
${MONTH} //current month
${MONTH_NAME_SHORT} //first 3 letters of the current month name. Example: Jan, Feb, etc.
${MONTH_NAME_FULL} //full name of the current month. Example: January, February, etc.
${DAY} //current day of the month
${HOUR} //current hour
${MINUTE} //current minute
${PROJECT_NAME} //the name of the current project
例如:${DATE} ${HOUR}:${MINUTE}的結果為2017/9/20 10:28
代碼模板 Live Templates【重要】
Setting->Editor->【Live Templates】
此文件保存位置【C:\Users\Administrator.AndroidStudio2.3\config\templates】目錄下,文件名和你在AS中設置的名字一樣,但是會忽略掉名字中的中文。
添加步驟
1、Setting->Editor->【Live Templates】->點擊+,選擇【Template Group】創建一個自定義模板組
2、選中剛剛創建的group,點擊+,選擇【Live Template】創建一個自定義模板
- Abbreviation:表示這個模板的快捷方式,你敲這些【字符+回車】后,模板就自動輸出了
- Description:表示這個模板描述
- Template text:模板的內容
3、點擊下面藍色的字"change",設置你這個快捷鍵在哪里生效,一般把java或XML勾上就行了
4、點擊右側的按鈕"Edit variables",編輯模板信息中的變量
如我的Template text中定義了四個變量 bqt、date、name、bqt2,變量名字可以隨意定義(只能是字母或數字)

- bqt:可將鼠標定位在此位置
- date、name:點擊下三角【選擇】合適的方法,可自動生成日期和類名
- skip if defined:表示當自動生成的值不為空時,光標不停留在此方法處。建議選中
5、如上例,當我輸入【快捷鍵+回車】后輸出的內容為:

- 焦點首先在定位的第一個方法處,即bqt處;當我輸入內容后按下回車,或不輸入內容直按回車
- 焦點轉移到下一個定義的方法處,即date處;當按下回車
- 這時焦點應該會轉移到name處,但因為勾選了skip if defined,且此處有自動生成內容,所以焦點移到下一方法處
- 即轉移到bqt2處,此時我再按下回車鍵,則焦點轉移到整個模板的最后(不會添加換行符)
AS 進行單元測試
以下為本人在AndroidStudio 2.0 上實測后得出的結論,不像網上那一堆堆的誤人子弟的文章,都是過時的或者根本就是不對的。
簡介
和eclipse需要配置清單文件不同,AndroidStudio自帶的單元測試功能是不需要修改AndroidManifest.xml或gradle文件的,直接編寫測試用例即可。
使用AS新建一個工程時,在src目錄下會自動創建三個目錄:

mian目錄下為項目代碼,androidTest目錄下為編寫Android測試用例使用,test目錄下為編寫Java測試用例使用。
gradle文件默認也已配置【testCompile 'junit:junit:4.12'】

Java測試用例
默認test目錄下有一個現成的ExampleUnitTest類,我們稍加修改
/**
* To work on unit tests, switch the Test Artifact in the Build Variants view.
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
int sum = 2 + 2;
System.out.println("結果為:" + sum);
assertEquals(4, sum);
}
}
打開測試用例類,切換到Structure面板,鼠標選中要測的方法,右鍵–Run [方法名],即可進行Java用例測試。

如果運行結果正確,Run面板會是綠色的

否則是紅色的,比如我們將其中一行代碼修改為:assertEquals(5, 2 + 2);

我們也可以添加自己的測試類或測試方法,只不過我們的測試方法上要滿足以下條件
- 方法要為【public】訪問權限
- 要添加【@org.junit.Test】的注解
- 方法不能帶參數(因為你沒辦法傳遞參數啊)
Android測試用例
同樣,默認androidTest目錄下有一個現成的ApplicationTest類,我們稍加修改
/**
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
*/
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}
//方法名必須以test開頭,並且方法不能帶參數
public void testSimple() {
int width = getScreenWidth(getContext());
Log.i("bqt", "屏幕寬:" + width);
Toast.makeText(getContext(), "屏幕寬:" + width, Toast.LENGTH_SHORT).show();
//assertEquals(4, 2 + 2);//可以沒有聲明語句
}
/**
* 獲取屏幕寬
*/
private int getScreenWidth(Context context) {
DisplayMetrics metric = new DisplayMetrics();
((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(metric);
return metric.widthPixels;
}
}
運行后

並且可以生成與運行環境(即Context)有關的日志(這才是最重要的用途,我們可以在不運行APP的情況下獲取App所有數據)

不過,很遺憾,我們不能直接操作UI(吐司沒有彈出來)
我們的測試方法上要滿足以下條件
- 方法要為【public】訪問權限
- 所有的測試方法必須以test作為前綴(上面的Java測試用例是要求有@Test的注解)
- 方法不能帶參數(因為你沒辦法傳遞參數啊)
不過很奇怪的是,ApplicationTestCase類提示過時了,但是又沒提示用哪個替換……而且這是你自動幫我生成的呀……

2018-1-6
