Google官方的Android集成開發環境(IDE = Integrated Development Environment),Eclipse + Adt插件的代替者。
實用設置:
android studio是單工程的開發模式 android studio中的application相當於eclipse里的workspace概念 android studio中的module相當於eclipse里的project概念


中文亂碼—–在窗口中,找到IDE Settings->Appearance,在右側勾選上“Override default fonts by”,然后在第一個下拉框中選擇字體為“simsun”,然后apply,重啟IDE,就好了。
設置快捷鍵—–在settings窗口中,找到IDE Settings->keymap,右側打開的就是快捷鍵了。右鍵單擊要修改的快捷鍵,會彈出一個菜單,選擇“Add keyboard shortcut”就可以修改快捷鍵了。刪除的話,在彈出的菜單中選擇remove XXX即可。特別說明,在AS的快捷鍵設置里可以直接設置使用Eclipse快捷鍵還是別的IDE快捷鍵。如果你熱衷Eclipse那么也可設置成Eclipse的快捷鍵。
修改主題—–在IDE Settings->Appearance,右側的Theme選擇自己喜歡的主題即可。個人比較喜歡Darcula主題,也就是如上截圖樣式。
如何將Eclipse工程導入AS使用—–選擇File->Import Project,在彈出的菜單中選擇要導入的工程即可,選擇好以后就直接next,在第二個窗口中也選擇默認的第一個選項就可以。需要注意的是,在AS中,有兩種工程,一個是Project,一個是Module,上面已經細說過了。
導入jar包—–選擇File->Projcet Structure,在彈出的窗口中左側找到Libraries並選中,然后點擊“+”,並選擇Java就能導入Jar包了。或者直接拷貝jar文件到項目的libs文件夾下,然后運行:Sync Project with Gradle Files。然后clean project重新編譯。
刪除項目—–AS對工程刪除做了保護機制,默認你在項目右鍵發現沒有刪除選項。你會發現你的module上面會有一個小手機,這是保護機制。刪除的第一步就是去掉保護機制,也就是讓手機不見,具體做法就是鼠標放在工程上右鍵->open module setting,或者F4進入如圖界面,選中你要刪除的module,然后點擊減號,這樣就取消了保護機制,然后回到項目工程右鍵就可發現刪除選項。注意:刪除會將源文件刪除。
Android Studio目錄結構
新建工程項目后AS的Product目錄結構如下所示:
.idea://AS生成的工程配置文件,類似Eclipse的project.properties。
app://AS創建工程中的一個Module。
gradle://構建工具系統的jar和wrapper等,jar告訴了AS如何與系統安裝的gradle構建聯系。
External Libraries://不是一個文件夾,只是依賴lib文件,如SDK等。
新建工程項目后AS的Module目錄結構如下所示:
build://構建目錄,相當於Eclipse中默認Java工程的bin目錄,鼠標放在上面右鍵Show in Exploer即可打開文件夾,
編譯生成的apk也在這個目錄的outs子目錄,不過在AS的工程里是默認不顯示out目錄的,就算有編譯結果也
不顯示,右鍵打開通過文件夾直接可以看。
libs://依賴包,包含jar包和jni等包。
src://源碼,相當於eclipse的工程。
main://主文件夾
java://Java代碼,包含工程和新建是默認產生的Test工程源碼。
res://資源文件,類似Eclipse。
layout://App布局及界面元素配置,雷同Eclipse。
menu://App菜單配置,雷同Eclipse。
values://雷同Eclipse。
dimens.xml://定義css的配置文件。
strings.xml://定義字符串的配置文件。
styles.xml://定義style的配置文件。
......://arrays等其他文件。
......://assets等目錄
AndroidManifest.xml://App基本信息(Android管理文件)
ic_launcher-web.png://App圖標
build.gradle://Module的Gradle構建腳本
對比
| 對比項 | Eclipse + ADT | Android Studio |
|---|---|---|
| 基於 | IBM公司的Eclipse | JetBrains公司的 IDEA 社區版 |
| 運行速度 | 中 | 快 |
| 程序界面 | 中 | 漂亮 |
| 編碼速度 | 中 | 快(更智能的提示) |
| 插件 | 安裝繁瑣 | 安裝簡單,自帶很多插件 |
| 版本控制 | 需額外安裝 | 多 |
| 內存占用 | 中 | 大 |
| 編譯 | ANT | gradle |
| 依賴網絡 | 否 | 是 |
| 其他 | 內置終端; UI編輯支持多屏預覽;多APK打包 |
界面
- 整體

- 菜單 -File

-
菜單 - Build

-
快捷工具

-
Project視窗

-Structure視窗 
-
代碼編輯區域
-

-
代碼編輯- 布局文件的多屏預覽

-
Android 監控

-
Message

Gradle相關
概念
Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化建構工具。它使用一種基於Groovy的特定領域語言來聲明項目設置,而不是傳統的XML。當前其支持的語言限於Java、Groovy和Scala,計划未來將支持更多的語言。
編譯過程

Gradle相關文件
- 重要
project 中的 settings.gradle 說明
// 這個Project中有2個Moduleinclude ':app', ':percent-23.1.0'
project 中的build.gradle說明
// 構建腳本buildscript {// 倉庫repositories {// 中央倉庫 https://bintray.com/bintray/jcenter// 通過jar包的字符串包名,就可以下載到jar包了// 成熟的公司可能會有自己的倉庫服務器,需要在此配置jcenter()}dependencies {// android gradle構建工具,用於處理module下的build.gradle文件,此版本與Gradle版本有配套關系,目前gradle已經到2.8了,但主要使用的是2.4classpath 'com.android.tools.build:gradle:1.3.0'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}}// 所有項目都依賴於jcenterallprojects {repositories {jcenter()}}// gradle在執行構建任務時的清理配置task clean(type: Delete) {delete rootProject.buildDir}
module中的build.gradle詳細說明
// 表示這個項目編譯完成后,是一個anrdoid應用程序apply plugin: 'com.android.application'// 表示這個項目編譯完成后,是一個anrdoid的庫//apply plugin: 'com.android.library'android {// 編譯的sdk版本,見sdk\platformscompileSdkVersion 23// 構建工具的版本,見sdk\build-toolsbuildToolsVersion "23.0.1"defaultConfig {// 包名:用於在市場上區分應用的唯一性的標示applicationId "cn.itcast.as.helloworld"// 最小sdk版本、目標sdk版,原先是放在清單文件中的minSdkVersion 15targetSdkVersion 23// 應用程序的版本號,和版本碼,原先是放在清單文件中的versionCode 1versionName "1.0"}// 構建類型buildTypes {// debug版默認有配置,沒有寫在這里// 發行版release {// 是否混淆minifyEnabled false// 混淆配置文件proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}}// 關鍵:項目的依賴dependencies {// 在項目中的libs中的所有的.jar結尾的文件,都是依賴compile fileTree(dir: 'libs', include: ['*.jar'])// 依賴於junit測試testCompile 'junit:junit:4.12'// 還依賴於appcompat-v7,23.1.0版本compile 'com.android.support:appcompat-v7:23.1.0'}
- 其他
| 所屬 | 文件 | 類型 | 作用 |
|---|---|---|---|
| Project | .gradle | 文件夾 | 配置文件,無需更改、關注 |
| Project | gradle | 文件夾 | 包含了gradle-wrapper相關文件,無需更改、關注 |
| Project | gradle.properties | 文件 | gradle啟動的配置,如java虛擬機的內存占用等,一般無需修改 |
| Project | gradlew/gradlew.bat | 文件 | 初始化gradle相關變量的腳本 |
文件和文件夾說明
- Project根目錄
| 文件/文件夾 | 說明 |
|---|---|
| .idea/ | IDE的Project相關設置 |
| app/ | 默認建立的module目錄 |
| build/ | 打包的臨時目錄 |
| gradle/ | gradle的相關目錄 |
| .gradle/ | gradle的相關目錄 |
| .gitignore | git同步時的忽略的文件 |
| builder.gradle | Project的gradle依賴 |
| gradle.properties | project的gradle配置 |
| gradlew | 執行gradle構建的腳本(un*x) |
| gradlew.bat | 執行gradle構建的腳本(windows) |
| local.properties | SDK目錄設置 |
| Project.iml | 存放module信息 |
| settings.gradle | Project下有哪些Module |
- module目錄
| 文件/文件夾 | 說明 |
|---|---|
| build/ | 編譯的中間數據、最終apk存放目錄 |
| build/source/r/debug/R.java | R文件 |
| build/outputs/apk/ | APK文件默認位置 |
| libs/ | 導入的jar包存放的位置 |
| src/ | 源碼(java、xml、..) |
| src/androidTest/ | 測試代碼存放位置 |
| src/main/java/your/package/name | java代碼 |
| src/main/jniLibs/ | 動態連接庫所在目錄 |
| src/main/assets/ | 資產文件存放目錄 |
| src/main/res/ | 資源目錄 |
| src/AndroidManifest.xml | 清單文件 |
| src/main/res/mipmap/ | 一般放置應用圖標 |
| app.iml | 存放module信息(由AS創建) |
| build.gradle | gradle的構建文件 |
| proguard-rules.pro | 混淆設置 |
設置
- 文件編碼

- 程序外觀

- 編輯區域外觀


- logcat外觀

快捷鍵
視窗快捷鍵

代碼補全

快捷鍵方案修改 && 編輯快捷鍵

活動模板

后綴補全

亂碼問題


- tasks.withType(Compile) {
- options.encoding = "UTF-8"
- }
dub常用快捷鍵
| 動作 | 按鍵 |
|---|---|
| 刪除行 | Ctrl + Y |
| 復制一行 | Ctrl + D |
| 上下移動代碼 | Alt + Shift + Up/Down |
| 格式化代碼 | Ctrl + Alt + L |
| 優化導導包 | Alt + Ctrl + O |
| 大小寫轉換 | Ctrl + Shift + U |
| 打開文件 | 兩次shift |
| 注釋代碼(//) | Ctrl + / |
| 注釋代碼(/**/) | Ctrl + Shift + / |
| 生成代碼 | Alt + Insert |
| 快速定位錯誤 | F2 |
| 查找 | Ctrl + F |
| 查看繼承關系 | Ctrl + H |
| 查找+替換 | Ctrl + R |
| 快捷覆寫方法 | Ctrl + O |
| 序號 |
功能 |
Eclipse快捷鍵 |
Android Studio 快捷鍵 |
|
|
快速修復 (實現接口方法、強制類型轉換、導包) |
Ctrl + 1 |
Alt + Enter |
|
|
刪除光標所在行(選中行) |
Ctrl + D |
Ctrl + Y Ctrl + X |
|
|
復制光標所在的行(選中行) |
Ctrl + Alt + Up/Down |
Ctrl + D |
|
|
格式化代碼(java、xml) |
Ctrl + Shift + F |
Ctrl + Alt + L |
|
|
快速創建局部變量 |
Ctrl + 2,L |
Ctrl + Alt + V |
|
|
局部變量變為成員變量 |
Ctrl + 1 |
Ctrl + Alt + F 或者 alt+enter 選擇 |
|
|
上下移動選中的行 |
Alt + Up/Down |
Ctrl + Shift + Up / Down |
|
|
重命名 |
Ctrl + Shift + R |
Shift + F6 |
|
|
方法參數提示 |
Alt + / |
Ctrl + P |
|
|
打印輸出 |
syso |
sout |
|
|
快速重寫方法 |
|
Ctrl + O輸入方法名上下方向鍵選擇后回車 |
|
|
快速定位到任意的文件 |
|
按兩次shift |
|
|
快速定位到某一個類或文件 |
|
Ctrl + N:查找類 Ctrl + Shift + N:查找文件 |
|
|
顯示類結構窗口(Outline) |
|
Alt + 7 |
|
|
快速定位到類中的方法或屬性 |
Ctrl + O |
Ctrl + F12 |
|
|
快速查看類繼承結構 |
Ctrl + T |
Ctrl + H |
|
|
快速查看方法在哪里被調用 |
|
Ctrl + Alt + H |
|
|
快速定位到當前類報錯或警告的地方 |
|
F2 或Shift+F2 |
|
|
快速定位到類或方法的定義 |
|
Ctrl+B |
|
|
代碼助手,自動補全 |
Alt + / |
Ctrl + Alt +空格:屬性名、類名或接口名提示 Ctrl + Shift +空格: 方法提示 |
|
|
窗口最大化 |
ctrl + M |
Ctrl +Shift + F12 |
|
|
快速選中字符串 |
雙擊 |
Ctrl + W |
|
|
最近編輯的文件列表 |
|
Ctrl + E |
|
|
搜索或替換 |
Ctrl + F |
Ctrl + F Ctrl + R |
|
|
全局搜索或全局替換 |
Ctrl + H --> File Search |
Ctrl + Shift + F 在選中的文件目錄里搜索 Ctrl + Shift + R 在選中的文件目錄里替換 |
|
|
導入包 |
Ctrl + Shift + O (導包並自動清除沒有用到的包) |
Alt+回車:導入當前包 Ctrl + Alt + O:刪除沒用到的包。 也可設置自動導包,勾選: Add unambiguous imports on the fly |
|
|
選中變量快速跳轉到下一個 |
Ctrl + K |
Alt + F3, F3 |
|
|
光標所在上一個 或下一個的位置 |
Alt + Left / Right |
Ctrl + Alt + Left / Right |
|
|
顯示JavaDoc(注釋文檔) |
|
Ctrl + Q |
|
|
生成 get/set方法、構造方法、toString() |
|
alt + insert |
|
|
撤銷 |
Ctrl + Z |
Ctrl+Z |
|
|
恢復 |
Ctrl + Y |
Ctrl+Shift+Z |
|
|
注釋 |
Ctr + / 單行 Ctrl + Shift + / 多行 |
同左 |
|
|
回車換行 (光標定位到下一行) |
Shift + Enter |
同左 |
|
|
回車換行 (光標定位到上一行) |
Ctrl + Shift + Enter |
Ctrl + Alt + Enter |
|
|
復制文件名 |
選中文件后Ctrl + C |
同左 |
|
|
復制類的全局路徑 (包名加類名) |
右擊--> Copy Qualified Name |
Ctrl + Shift + Alt + C (右擊--> Copy Reference) |
|
|
大寫/小寫 |
Ctrl + Shift + X Ctrl + Shift + Y |
Ctrl + Shift + U |
|
|
回到上一次編輯的位置 |
Ctrl + Q |
Ctrl + Shift + Backspace |
|
|
視圖顯示與隱藏 |
|
Alt + 數字 |
|
|
關閉文件 |
|
Shift + 點擊
|
| 自動修正 | |
| Command + N | 自動生成代碼(Getter Setter) |
| Command + Alt + L | 格式化代碼 |
| Contral + Shift + F | 格式化代碼(定制) |
| Command + Alt + T | 把選中的代碼放在 try{} 、if{} 、 else{} 里 |
| Command + / | 注釋 // |
| Command + Shift + / | 注釋 /* */ |
| Command + Shift + Up/Down | 語句上下移動 |
| Option + Shift + Up/Down | 內容上下移動 |
| Option + Command + M | 將選中代碼塊封裝成一個方法 |
| Command + D | 復制當前一行(或選擇區域),並粘貼到下面 |
| Command + Z | 后退 |
| Command + Shift + Z | 前進 |
| Control + Alt + O | 優化導入的包 |
| Ctrl(Command)+ - / + | 折疊/展開代碼 |
| Ctrl(Command)+Shift+ - / + | 折疊/展開全部代碼 |
| Ctrl(Command)+Shift+. | 折疊/展開當前花括號中的代碼 |
| Command + Y | 快速查看代碼實現 |
| Contral + H | 查看繼承關系 |
| Contral + Alt + H | 查看調用關系 |
| Command + [ | 返回上一次查看的位置 |
| Command + ] | 前進到返回之前查看的位置 |
| Command + J | 自動生成代碼 |
| Command + E | 查看最近打開的文件 |
http://www.cnblogs.com/dubo-/
建議調整的快捷鍵:
(1)刪除: ctrl + y,一只手能輕易的按下這兩個鍵嗎?建議修改為eclipse的ctrl+D
(2)復制選中的多行:
默認居然沒有快捷鍵,可以在keymap中的duplicute lines設置為eclipse的ctrl + alt + 向上
調試
進入調試的兩種方式
-
以調試模式運行
-
運行后調試
需要注意 運行的程序的代碼應該與所看到的是同一份,不然點擊提示會錯位
如何打斷點
-
代碼左側單擊
-
代碼左側單擊時按着shift鍵
斷點類型
| 斷點類型 | 什么時候會停下來 | 注意 |
|---|---|---|
| 行斷點 | 執行到此行 | 無 |
| 成員變量斷點 | 被賦值 或 訪問 | art虛擬機提供,需安卓5以上設備才有此功能 |
| 方法斷點 | 進入方法或退出方法 | 會影響代碼執行的效率,慎用 |
| 異常斷點 | 出現了未捕獲異常 及 捕獲的異常 | 默認不開啟 |
導入module
導入Eclipse項目
File –> New –> Import Module
導入AndroidStudio項目
File –> New –> Import Module
導入AAR
File –> New –>New Module –> Import .jar/.aar package
刪除導入的Module
當文件夾上顯示了手機或柱狀圖 圖標,說明此文件夾是受保護的,無法被刪除
- 取消保護
打開Project Struecture。 選中要刪除的module,點上面的減號。 然后點確定

- 刪除文件
在原來是module的文件夾上點擊鼠標右鍵,選中delete,在彈出的對話框上點確定。

導入依賴

導入Library


導入文件jar包

導入Module依賴

對應關系

插件管理

安裝插件的兩種方式
- 本地安裝
- 網絡安裝
ButterKnife Zelezny的使用

打包APK

混淆
作用及意義
- 減小apk大小,刪除無用的類和方法
- 避免被反編譯后重要的程序邏輯暴露
配置
app/build.gradle
buildTypes {release {// false ,關閉混淆// true , 開啟混淆minifyEnabled false// proguard-android.txt 是通用的混淆配置文件,放在sdk中 (sdk\tools\proguard\)// proguard-rules.pro 是項目都有的混淆配置文件 ,在項目的根目錄中proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}
通用混淆文件說明
# 以#開頭的都是注釋,下同# This is a configuration file for ProGuard.# http://proguard.sourceforge.net/index.html#manual/usage.html# 不使用大小寫混合的類名# 比如說 a.java 和 A.java。因為在windows下文件名是不區分大小寫的,會導致文件的覆蓋-dontusemixedcaseclassnames# 混淆第三方jar-dontskipnonpubliclibraryclasses# 打印更多日志-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).# 不做做優化(有時會弄巧成拙)-dontoptimize# 不做預校驗-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-android-optimize.txt" file instead of this one from your# project.properties file.# 保留注解上的屬性-keepattributes *Annotation*# 保留此類(com.google.vending.licensing.ILicensingService)不被混淆,google需要用到-keep public class com.google.vending.licensing.ILicensingService# 保留此類( com.android.vending.licensing.ILicensingService)不被混淆,google需要用到-keep public class com.android.vending.licensing.ILicensingService# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native# 保持 native 方法不被混淆,混淆后不能正確調用底層方法了-keepclasseswithmembernames class * {native <methods>;}# keep setters in Views so that animations can still work.# see http://proguard.sourceforge.net/manual/examples.html#beans# 保留任何直接或間接繼承與View的類的set和get開頭的方法,不被混淆-keepclassmembers public class * extends android.view.View {void set*(***);*** get*();}# We want to keep methods in Activity that could be used in the XML attribute onClick# 保留直接或間接繼承於Activity的類的 點擊事件方法不被混淆,因為混淆后布局文件寫的點擊事件方法就會找不到-keepclassmembers class * extends android.app.Activity {public void *(android.view.View);}# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations# 保留枚舉類的如下 values 和valueOf方法-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);}# 保留實現了Parcelable 接口的類的靜態CREATOR常量-keepclassmembers class * implements android.os.Parcelable {public static final android.os.Parcelable$Creator CREATOR;}# 保留R.java中的及內部類的的所有靜態字段-keepclassmembers class **.R$* {public static <fields>;}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version. We know about them, and they are safe.# 告訴ProGuard不要警告找不到android.support開頭的包名.-dontwarn android.support.**
項目特有的常用的混淆語法
- 特定的類不被混淆
-keep class package.name.Klass {*;} - 某個包下的類不被混淆
-keep class package.name.** {*;} - 繼承與某類的類不被混淆
-keep class * extends java.lang.annotation.Annotation { *; }
使用第三方jar包在混淆后出錯
一般,都可以在網站上找到相應的混淆配置
比如
-
butterknife
http://jakewharton.github.io/butterknife/ 查找 PROGUARD -
baidu map sdk
http://lbsyun.baidu.com/index.php?title=androidsdk/qa 查找 混淆 -
xutils
https://github.com/wyouflf/xUtils 查找 混淆
多APK打包
意義
- 國內現狀: 多個電子市場可提供apk的下載,用於統計市場的作用
- 同一個應用程序,給不同的客戶,需要連接不同的服務器
步驟
1 在清單文件中添加metadata
<application...... ><!-- market 表示鍵 ${MARKET}表示值 ,用${}表示會變......--><meta-data android:name="market" android:value="${MARKET}"/><!-- ......--></application>
2 在程序中獲得metadata並使用
//TODO 從sp中獲取是否是第一運行boolean isFirstRun= true;if(isFirstRun){// 通過PackageManager拿到在清單文件中記錄的metadata信息PackageManager packageManager = getPackageManager();String packageName = getPackageName();int flag = PackageManager.GET_META_DATA;// 表示我們獲取當前應用程序的application下的metadata數據ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, flag);// 傳入鍵名,拿到鍵值String market = applicationInfo.metaData.getString("market");//TODO 獲取imeiString imei = "123456";// TODO 自己實現代碼sentToServer(market, imei);//TODO 寫入sp,下次啟動程序就不發送了}
3 添加flavor動態修改metadata
android{//......productFlavors {_360 {manifestPlaceholders = [MARKET: "_360"]}wandoujia {manifestPlaceholders = [MARKET: "wandoujia"]}anzhi {manifestPlaceholders = [MARKET: "anzhi"]}}}
版本控制
SVN環境
- 安裝TortoiseSVN
!!! 注意勾選 command line client tools

- 在as中,設置svn的命令行工具
settings –> Version Control –> Subversion –>General –> use command line client
選中TortoiseSVN的安裝目錄中的bin文件夾中的svn.exe

上傳本地代碼
- 設置同步
settings –> Version Control
把project后面加上版本控制的類型

- 設置忽略文件
settings –> Version Control –> Ignored Files
3種方式:特定文件、指定目錄下的文件、特定規則文件

- 提交目錄
project 右鍵 –> Subversion –> share directory
這一步只提交了目錄,文件並沒有上傳到服務器




- 上傳文件
project 右鍵 –> Subversion –> submit directory


下載服務器的代碼
在Welcome to Android Studio界面,點擊第三個Check out project from Version Control


提交代碼,編輯沖突
project 右鍵 –> Subversion –> submit directory
好習慣:先update,再submit
- 沖突的解決
3種 接受服務器的,接受自己的,合並

| 英文 | 含義 |
|---|---|
| Accept Theirs | 用服務器的覆蓋本地的 |
| Accept Youts | 用本地的覆蓋服務器的 |
| Merge | 查看服務器和本地的,最終決定提交的內容 |

!!! 注意,在合並后,還需要submit
斷開連接
- 斷開連接
- 先刪除配置
在settings –> version control -掉同步文件夾
- 先刪除配置

2. 再刪除文件
刪除.svn文件夾

- 忘記記錄的用戶名和密碼
settings –> version control –> subversion –>clear auth cache

http://www.cnblogs.com/dubo-/
