Android Studio 簡單介紹和使用問題小結

隨着android 5.0 的發佈,android 開發已經進入了一個全新的時代,eclipse開發安卓已經有點不合時宜了,在github上80%的android項目都採用android studio開發,並且android studio的中文教程愈來愈多,還有什麼理由不固守這eclipse 呢。php

下面這篇文章對了解android studio 頗有幫助,原文以下:html

Google在2013的I/O開發者大會上引入的該開發工具。如今已經更新到了0.5.8版本。java

如今github的不少項目都使用了Android Studio開發,因此若是你還用Eclipse,就須要把整個項目拆分,android

而後在工程中include依賴包,是很是費事的,有時候弄了半天還不必定能成功導入。並且Android開發者工具的將來的趨勢必定也是轉向Android Studio。git

介於種種緣由,不得不學習使用Android Studio,Android Studio的項目管理使用了Gradle,因此你須要對Gradle進行簡單的理解,能夠到官網去看下。github

Gradle官網web

http://www.gradle.orgshell

由於Android 是在IntelliJ IDEA的基礎上開發的,因此能夠參考api

IntelliJ IDEA 的官方幫助地址android-studio

http://www.jetbrains.com/idea/webhelp/getting-help.html

簡單引入一些概念:(有些是來自我的的官方翻譯有些是copy過來的)

Android Studio

創建系統工具包你用來生成,測試,運行您的應用程序和軟件包。構建系統是獨立於Android的工做室,因此你能夠調用它的Android的工做室或從命令行。在你寫你的應用程序,你可使用編譯系統的特色:定製,配置,和擴展的創建過程。

爲您的應用程序使用同一項目的不一樣特色,建立多個應用程序。重用代碼和資源。

AndroidStudio構建系統由Gradle構成。Gradle是一種高級的構建工具,用於管理依賴性,容許你定義自定義構建邏輯。Android插件工具並不依賴於Android Studio,雖然Android Studio由它徹底集成。

Gradle的配置包含如下方面

構建變量

構建系統能夠根據不一樣的配置爲同一個項目生成多個APK。當你想創建不一樣版本的應用程序,而沒必要爲每一個人單獨的項目,這是頗有用的。

依賴關係

構建系統管理項目的依賴,並從本地文件系統和遠程存儲庫支持的依賴。這能夠防止你沒必要搜索,下載和複製二進制包爲你的依賴到你的項目目錄。

清單條目

構建系統使您能夠指定的值在生成配置清單文件中的某些元素。這些新的值將覆蓋在manifest文件中的現有值。若是你想生成多個的

APK爲您的項目中,他們每一個人都有不一樣的包名,最小的SDK版本,或目標SDK版本,這是頗有用的。

簽名

構建系統使您能夠指定生成配置簽名設置,它能夠在生成過程當中簽署您的APK。

ProGuard

構建系統使您能夠指定一個不一樣的 ProGuard的規則文件的每一個版本變量。構建系統能夠運行ProGuard的生成過程來混淆你的類。

測試

構建系統生成的項目中的測試源測試APK,因此你沒必要建立一個單獨的測試項目。構建系統能夠在生成過程當中運行測試

Gradle構建文件使用Groovy的語法。Groovy是一種動態語言,你能夠用它來 定義自定義生成邏輯,並與Android的插件Gradle提供了Android特有的元素進行交互。

按照慣例創建

Android Studio生成系統假定合理的默認值的項目結構和其餘編譯選項。

若是您的項目符合這些約定,你的Gradle構建文件是很簡單的。當一些這些公約並不適用於你的項目,使您能夠配置生成過程的幾乎每個方面。

例如,若是您的項目的源位於比默認值不一樣的目錄,你能夠在構建文件中指定此位置。

項目和模塊

一個項目表明一個完整的Android應用程序。Android Studio項目包含一個或多個module 。一個module 是您的應用程序的獨立組件,你能夠構建,測試或調試。module 包含您的應用程序的源代碼和資源。Android的Studio項目包含三種模塊:

Java庫模塊

包含可重用的代碼。構建系統生成一個JAR包的Java庫模塊。 Android庫模塊

包含可重複使用的Android特有的代碼和資源。構建系統產生AAR(安卓歸檔)包庫模塊。

Android應用程序模塊

包含應用程序代碼,並可能依賴於庫模塊,雖然不少Android應用程序只包含一個應用程序的模塊。構建系統生成APK包,爲應用模塊。

Dependencies 依賴關係

Android Studio生成系統管理項目的依賴和支持模塊依賴關係,局部二進制依賴,以及遠程二進制依賴。 

模塊依賴關係一個項目模塊能夠在構建文件中包括的其它模塊的列表它依賴於。當你創建這個模塊,構建系統組裝,包括所須要的模塊。

本地依賴性若是你有二進制存檔在你的本地文件系統中的一個模塊依賴於,例如JAR文件,你能夠在構建文件中該模塊聲明這些依賴關係。

遠程依賴性

當你的一些依賴關係均可以在一個遠程存儲庫,您沒必要下載它們,並將它們複製到您的項目。而Android工做室打造的系統支持遠程的Maven的依賴關係。的Maven是一個受歡迎的軟件項目管理工具,可幫助使用庫組織項目的依賴關係。 

多流行的軟件庫和工具均可以在公共Maven倉庫。對於這些依賴項,您只須要指定本身的Maven座標,它惟一標識一個遠程存儲庫中的每一個元素。在構建系

統中使用的Maven座標的格式是組:名稱:版本。例如,Maven的座標爲谷歌番石榴庫16.0.1版本是

com.google.guava:番石榴:16.0.1。

在Maven的中央存儲庫,普遍用於分發不少庫和工具。

Build Tasks

Android Studio生成系統定義了一系列分層的構建任務:

頂級任務:用於產生必要的結果的任務。

構建系統提供項目任務:構建您的應用程序和模塊的任務,以創建獨立的模塊。

Gradle Wrapper

Android Studio項目包含的Gradle Wrapper由如下構成:

A JAR file

A properties file

A shell script for Windows platforms

A shell script for Mac and Linux platforms

Note: 你應該提交以上全部的文件到資源控制系統。

使用Gradle wrapper(而不是本地Gradle安裝),確保您始終運行的Gradle在屬性文件中定義的版本。要配置您的項目使用Gradle較新版本,

編輯屬性文件並指定新的版本。

Android Studio 會從Gradle Wrapper目錄下讀取你的配置文件,而後運行改wrapper,所以你能夠根據不一樣版本的Gradle無縫的處理多個項目Android Studio 不支持Shell腳本,所以你應該在Gradle文件中定義自定義的邏輯來替代。

下面簡單的總結構建工程時遇到的問題

問題1. 如何引入第三方lib ?

http://stackoverflow.com/questions/20744692/android-studio-0-4-0-absherlock-gradle-without-import-module

a copy lib 工程到項目下,setting.gradle配置include ‘: yourlib’ ,不然會提示在你的項目下找不到該lib工程。

b 到整個項目下的build.gradle配置include ‘:actionbarsherlock’

c 在你的Moudle下,而不是整個Project的build.gradle中添加

dependencies {

compile project(‘:yourlib’)

}

在網上查的資料,右鍵,選擇add as library,個人是0.5.8的,沒有發現。若是沒有做爲lib引入,在Sync project with gradle files的時候 .

就會發現,default config 不支持.這是由於你的lib工程沒有build.gradle文件,能夠拷貝一個簡單的build.gradle,到你添加的lib project 目錄下。

這樣就能夠正常編譯了。固然若是你的lib 項目還引用了一些三方jar包,你須要在dependencies中進行配置。

文件以下

apply plugin: 'android-library' dependencies {  compile fileTree(dir: 'libs', include: '*.jar') } android {  compileSdkVersion 17  buildToolsVersion "19.0.3"  sourceSets {  main {   manifest.srcFile 'AndroidManifest.xml'   java.srcDirs = ['src']   resources.srcDirs = ['src']   aidl.srcDirs = ['src']   renderscript.srcDirs = ['src']   res.srcDirs = ['res']   assets.srcDirs = ['assets']  }  // Move the tests to tests/java, tests/res, etc...  instrumentTest.setRoot('tests')  // Move the build types to build-types/<type>  // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...  // This moves them out of them default location under src/<type>/... which would  // conflict with src/ being used by the main source set.  // Adding new build types or product flavors should be accompanied  // by a similar customization.  debug.setRoot('build-types/debug')  release.setRoot('build-types/release')  } }

問題2 gradle的配置

 

在第一次的時候,因爲下載比較慢,你能夠到gradle官方下載最新版本,解壓到android studio 的gradle的路徑下。這個不固定,跟SDK配置同樣,只要在gradle setting中指定好路徑便可。而後配置gradle到path,gradle -v 驗證是否成功配置

注意:gradle的配置是在整個Project項目下面的build.gradle文件中。

編譯器報錯:僅支持0.9+的gradle版本。解決方案:能夠在build.gradle 裏面配置 0.9+,或者在點擊提示,gradle setting中選擇如下選項之一

use default gradle wrapper (官方推薦,不多出問題)

會自動下載gradle,確保你的項目使用精確的gradle版本

另外,若是該選項不可選,灰色,請從其餘項目中copy一個gradle文件夾到你的工程中

 

Use customizable gradle warpper (1.7版本以上支持)

這選項老是覈對更新你指定的gradle版本,你只須要改變gradle的版本號便可。 

Use local gradle distribution (不建議使用,常常出各類問題,可能我的還不夠熟悉)

會使用本地的gradle去build項目,可是請確保你已經安裝並在path中正確配置了該gradle。在命令行中,gradle -v能夠驗證。

題3:sync project時長時間停留在 resolve dependencies ‘:classpath’狀態 或者 Error:(1,

0) Cause: org/gradle/api/artifacts/result/ResolvedComponentResult 

緣由 :可能gradle配置不正確或者沒有鏈接代理,沒法訪問到服務器。

請確保你的其它lib project中也擁有build.gradle

請檢查gradle/wrapper/gradle-wrapper.properties:

gradle wrapper distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-bin.zip或者更高,當時我下載的工程比較早,因此指向了gradle-0.9

因此這裏建議從github上clone項目,或者下載最新的。防止舊的配置出問題。

以下:

1
2

distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-bin.zip

http: //stackoverflow.com/questions/22989638/android-studio-gradle-could-not-create-plugin-of-type-libraryplugin

 

建議:從github上clone項目,或者下載最新的。防止之前的工程配置出問題。

一般但願使用offline的狀態,不去鏈接外網,因此使用local gradle的配置,可是常常會出現各類問題,好比:

Error:No

cached version of com.android.tools.build:gradle:0.9.+ available for

offline mode.Disable Gradle ‘offline mode’ and sync project

特別是剛開始對gradle比較模糊的時候,你也不清楚它啥時候須要一些依賴lib,啥時候須要去網站下載。

建議:

選擇 use default gradle wrapper 該配置,也不多出現問題(請確保代理成功鏈接,能夠在Http Proxy中check connection),之後慢慢的積累了多了,

使用起來比較熟了,能夠再試試。

問題4 work offline 模式

若是你使用了該模式,可是其dependency 的lib project 沒有在本地,那麼仍是須要聯網的,不然會報錯。

http://stackoverflow.com/questions/20746071/failed-to-build-android-hello-world-application-in-offline-mode

次啓動都會有聯網檢測依賴的各類文件是不是最新版本,致使每次都至關慢。若是肯定了你的工程中的jar包或者依賴工程都齊全,也不想去更新最新的,就能夠

在gradle setting中勾選offline,這樣就不會去更新了。可是提一下,若是這種狀況下出問題,也不要驚訝,請鏈接代理。從新sync

project,由於不少狀況你可能並不清楚build工程所依賴的一些插件等是否已經有了。

另外提一下,若是你使用了0.9+這樣的配置方式(帶+號),那麼不管你是否選擇了offline,都會去檢測,並且,若是你沒有網絡鏈接的話,編譯會報錯的。

0.9+,這種配置方式必須聯網。

因此若是你選擇了offline,那麼請檢測本身的gradle的版本配置,能夠直接寫成你的gradle的版本,好比我下載並配置好的gradle1.2.

在有可鏈接到服務器的網絡鏈接的狀況下下面的配置,仍是比較建議的。

dependencies {

classpath ‘com.android.tools.build:gradle:0.9.+’

}

問題5. com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice

 

緣由:support v4包屢次導入,或者是在不一樣的build.gradle文件中的dependencies 中無心compile了兩次,好比在你的actionbarsherlock中使用了

dependencies {

compile fileTree(dir: ‘libs’, include: ‘*.jar’)}

代表編譯全部的libs目錄下的jar包,已經編譯了support v4.jar包,而在項目下的build.gradle中又進行了編譯:

dependencies {

compile ‘com.android.support:support-v4:18.0.+’

}

因此應把項目下的compile ‘com.android.support:support-v4:18.0.+’ 給幹掉另外提一點,不只是support v4包,各類lib甚至各類佈局的屬性,style,color,都不容許在不用的文件中重複定義,在sync project 的時候會報錯,你只需保留一份便可

 

問題6.  AndroidMainfest.xml問題

 

前提:當時個人activity的label中使用的是中文,activity的label中使用的是中文,

情景1

Fatal error when parsing: AndroidManifest.xml . Failed to parse XML

file: org.xml.sax.SAXParseException: Element type 「activity」 must be

followed by either attribute specifications, 「>」 or 「/>」.

情景2 unexpected end of block data 

以上兩種情景的解決方案:

把中文label Extr 爲String便可

不過我在編譯的時候有一些activity的label是中文的,一個一個activity的排錯是比較噁心的。仍是建議全部的label都抽取到String.xml文件中。

我是這麼修改的,你們能夠試試。

還有一種狀況出現:unexpected end of block data

在Sync project with gradle files 的時候

解決方案:

http://stackoverflow.com/questions/23045022/unexpected-end-of-block-data-in-gradle-sync

若是你使用的是 buildToolsVersion 「19.0.0」,那麼改爲 buildToolsVersion 「19.0.3」,從新Sync project便可

問題7  不一樣的lib 項目中的AndroidMainfest.xml文件中的targetSDK版本不一致

這個簡單,只須要所有改爲一致的便可。

問題8. plugin with id ‘android’ not found

http://stackoverflow.com/questions/18153739/android-studio-plugin-with-id-android-library-not-found

在Project的build.gradle中,添加下面代碼

buildscript {
   repositories {
mavenCentral()
   }
   dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
   }
}

問題9 使用NDK時,NDK not configured

http://stackoverflow.com/questions/20674650/how-to-configure-ndk-with-android-gradle-plugin-0-7 在NDK lib工程下的 build.gradle中添加

productFlavors {
 arm {   ndk {   abiFilters "armeabi", "armeabi-v7a"   }  }  x86 {   ndk {   abiFilter "x86"   }  }  }

或者

buildTypes {
     debug {
     ndk {
         abiFilters "armeabi", "armeabi-v7a"
     }
     }
 }

本人用的是第一種,在build photup項目的時候出現的問題

簡單總結下:

使用的時候最好有代理鏈接。不少時候須要下載一些插件或者依賴項目,除非你在本地徹底擁有全部的依賴工程。可是在剛開始使用的時候,仍是建議有代理,由於

在剛使用Android Studio,須要去下載一些東西,好比,maven repository等,

gradle配置要準確,保持都是最新的,儘可能clone並在使用的時候更新項目,或者下載最新的工程,因爲我的之前download 了不少的zip,跑demo用,後來直接導入,有些

插件已經更新了,可是配置文件尚未更新。因此可能致使resolve dependency classpath長時間停留。

offline work不可信,請儘可能保持gradle的代理鏈接,極可能須要去下載一些依賴工程,或者其它配置。也許是我的哪裏處理的不夠好。

請使用官方推薦的Gradle配置選項:use default gradle wrapper

Android Studio快捷鍵

提示

Ctrl+P

方法參數提示

Ctrl+空格

 

代碼提示

Ctrl+Shift+Space

 

在不少時候都可以給出Smart提示  

Ctrl+Alt+Space

類名或接口名提示

查看

Alt+1

快速打開或隱藏工程面板

Ctrl+H

查看類結構圖

Ctrl+F12

查看當前文件的結構

Ctrl+Q

查看註釋文檔

Ctrl+P

 

查看參數信息

Alt+Q

 

查看當前方法的聲明

Ctrl+Q

 

查看JavaDoc  

Ctrl+W

選中單詞繼而語句繼而行繼而函數 

查找

Alt + F1

查找代碼所在位置

Ctrl + F7

 

查找當前元素在當前文件中的引用,而後按F3能夠選擇

Alt + F3

快速查找

Ctrl + Shift + F7

 

能夠高亮當前元素在當前文件中的使用

Ctrl + Shift+N

查找文件

Ctrl + Shift+Alt+N

 

查找類中的方法或變量

Ctrl + B

查找打開光標處的類或方法

Ctrl + N

 

快速查找類

Ctrl + F

 

查找文本

Alt+F1

能夠將正在編輯的元素在各個面板中定位 Ctrl+Shift+Alt+N

能夠快速打開符號 快速打開類/文件/符號時,可使用通配符,也可使用縮寫

Ctrl+Alt+Up /Ctrl+Alt+Down

能夠快速跳轉搜索結果

修復

Shift+F6

重構-重命名

Ctrl+X

刪除行 Ctrl+D

複製行

Ctrl+/ 或 Ctrl+Shift+/  註釋(// 或者/*…*/ )

Alt+Insert

 

能夠生成構造器/Getter/Setter等  

Ctrl+Alt+L

 

格式化代碼

Ctrl+R

 

替換文本

Alt+Enter

 

導入包,自動修正

Ctrl+Alt+O

 

優化導入的類和包

Ctrl+J

 

自動代碼

Ctrl+Shift+Space

 

自動補全代碼

Ctrl+Alt+Space

 

類名自動完成

Ctrl+Shift+Insert

 

能夠選擇剪貼板內容並插入

Ctrl+Shift+J

 

能夠整合兩行

Ctrl+Alt+T

 

能夠把代碼包在一塊內,例如try/catch  

Ctrl+Alt+V

 

能夠引入變量。例如把括號內的SQL賦成一個變量

Alt+F8

計算變量值  

Ctrl+O

能夠選擇父類的方法進行重寫

最近相關

Ctrl+E

最近打開的文件 ———-

Ctrl+Shift+Backspace

 

能夠跳轉到上次編輯的地方

Ctrl+Alt+ left/right

返回至上次瀏覽的位置

Ctrl+E或者Alt+Shift+C   最近更改的代碼

Alt+Shift+C

對比最近修改的代碼

移動

Ctrl+Shift+Up/Down

代碼向上/下移動。 —————

F2 或Shift+F2

 

高亮錯誤或警告快速定位 ————

Ctrl+Up/Down

 

光標跳轉到第一行或最後一行下

Ctrl+[或]

 

能夠跳到大括號的開頭結尾

Ctrl+Shift+up/down

移動方法

Ctrl+P

方法參數提示

Ctrl+空格

 

代碼提示

Ctrl+Shift+Space

 

在不少時候都可以給出Smart提示  

Ctrl+Alt+Space

類名或接口名提示

轉自:

http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1108/1935.html

相關文章
相關標籤/搜索