Android Studio常用配置及使用技巧

近段時(shí)間有機(jī)會(huì)接觸到iOS開發(fā),但是光Xcode上配置證書,描述文件萧落,上真機(jī)調(diào)試等就費(fèi)了挺大勁。結(jié)合看到很多Android開發(fā)新手問的簡(jiǎn)單問題洗贰,忽然有了更多的理解找岖。

總需要有人引一下,別被開頭的困難束縛了前進(jìn)的步伐敛滋。另外也算是繼續(xù)未完成的《一個(gè)三年Android開發(fā)的總結(jié)》许布。

AndroidStudio常用配置及使用技巧分兩篇寫,將詳細(xì)講述從導(dǎo)入開源工程绎晃,配置gradle編譯蜜唾,到使用各種快捷鍵瀏覽分析源代碼,高效的編譯庶艾、開發(fā)袁余、調(diào)試程序,監(jiān)測(cè)應(yīng)用運(yùn)行狀態(tài)咱揍。

本篇先整體介紹一個(gè)android studio工程的基本配置文件和android應(yīng)用的編譯流程颖榜,再實(shí)際的導(dǎo)入一個(gè)開源工程,將可能遇到的問題一一分析煤裙,提供解決方法的同時(shí)掩完,也能了解如何更好的定位問題和搜索解決方案。

一积暖、Android Studio工程基本構(gòu)成

Google基于Intellij IDEA社區(qū)版提供了Android Studio藤为。IDEA工程結(jié)構(gòu)由工程(Project)、模塊(Module)夺刑、庫(Library)缅疟、SDK和方面配置(Facet,翻譯的不好遍愿,完整說明請(qǐng)看文末參考鏈接)構(gòu)成存淫。在Android Studio中我們主要理解工程、模塊沼填、庫和SDK桅咆,F(xiàn)acet則可以簡(jiǎn)化為Gradle配置。典型工程目錄如圖所示:


在一個(gè)工程中可以有多個(gè)模塊坞笙,這兩個(gè)概念只是將相關(guān)的文件聚合到一起岩饼,并不強(qiáng)制要求工程與模塊之間的關(guān)系荚虚。

模塊的生成會(huì)依賴于庫和SDK。從Android工程上說籍茧,就是模塊既可以生成APK文件版述,也可以作為庫模塊提供aar包供其他模塊使用。模塊中也依賴Android SDK和各種第三方庫寞冯,通過在build.gradle中的配置可見渴析。

這里先介紹自動(dòng)生成的.iml文件和.idea目錄下的配置文件,第二部分再詳細(xì)說明跟gradle工程相關(guān)的目錄吮龄。

到具體的工程目錄中俭茧,可以看到相關(guān)的配置文件,涉及根目錄的*.iml文件和.idea目錄漓帚。iml文件中定義了工程的相關(guān)配置信息母债,有Facet為Java-gradle,編譯路徑為build目錄等尝抖。

在.idea目錄下场斑,包括了compiler.xml,encodings.xml牵署,modules.xml,gradle.xml等等喧半,設(shè)置編譯哪些文件奴迅,文件編碼,包含哪些模塊挺据,gradle信息取具。但是這里的workspace.xml則記錄了你的個(gè)人設(shè)置,包括哪些窗口顯示哪些文件扁耐,工程顯示方式是Android還是Project形式等等暇检。

其實(shí)不必太關(guān)心這里的配置,當(dāng)你導(dǎo)入一個(gè)開源工程時(shí)婉称,Studio會(huì)從已有的gradle文件完成這些文件和目錄的創(chuàng)建块仆。

開篇講了大段的工程配置文件,其目的是了解工程目錄中和代碼不直接相關(guān)的目錄和文件王暗,平時(shí)也不要太在意悔据。而編譯生成APK安裝包最應(yīng)該關(guān)心的是使用Gradle編譯。

二俗壹、Gradle工程編譯

1. 工程結(jié)構(gòu)

Android最初是在Eclipse中配合ADT完成開發(fā)的科汗,而構(gòu)建工具(打包生成apk文件)是Ant。在切換到Android Studio后绷雏,構(gòu)建工具也換成了Gradle头滔。一般的Android應(yīng)用工程都是Android Gradle(Gradle的Android插件)目錄結(jié)構(gòu)怖亭,如上圖所示。

工程中的模塊都有自己?jiǎn)为?dú)的目錄坤检,目錄中都有build.gradle文件兴猩。

具體的模塊目錄中:

build:編譯中產(chǎn)生的臨時(shí)文件,最終生成的apk文件在build/outputs/apk目錄下

libs:模塊依賴的動(dòng)態(tài)庫(so文件)或者jar包文件等

src:源碼目錄缀蹄,包括Java源代碼峭跳、資源文件、AndroidManifest文件等

proguard-rules.pro:混淆配置文件

build.gradle:模塊配置文件缺前,描述模塊采用的SDK蛀醉,Build Tools版本,最終是庫文件還是生成apk文件等信息

*.iml:文件中定義了模塊的相關(guān)配置信息衅码,有Facet依然為java-gradle拯刁,編譯路徑為build目錄,源碼路徑逝段,依賴庫路徑信息

外層工程目錄中:

gradle:gradle版本信息垛玻,包括下載地址

gradle.properties:gradle運(yùn)行配置,包括代理設(shè)置奶躯,內(nèi)存大小設(shè)置等

gradlew和gradlew.bat:封裝好的gradle命令帚桩,指定用gradle目錄下的gradle版本

local.properties:Android SDK和NDK目錄配置信息

settings.gradle:gradle工程中包含哪些模塊

這樣的目錄結(jié)構(gòu)也是秉承于Gradle的build-by-convention特點(diǎn),做了大量的默認(rèn)設(shè)置的結(jié)果嘹黔。如果想改變可以在build.gradle中單獨(dú)設(shè)置源碼目錄账嚎,AndroidManifest.xml文件路徑等。

2.編譯流程

詳細(xì)的描述Gradle的編譯可以點(diǎn)擊原文鏈接儡蔓,查看《理解使用Gradle編譯打包Androidapk》《使用Ant打包Android應(yīng)用——apk生成過程》(雖然也沒有具體的一個(gè)個(gè)Task的運(yùn)行流程郭蕉,但是能對(duì)APK文件的構(gòu)成和Gradle編譯有一個(gè)初步理解。)

這里從工程配置的角度簡(jiǎn)單將用到的這些配置文件串聯(lián)起來喂江。

在Android Studio中打開一個(gè)工程的時(shí)候召锈,可以選擇最外層目錄的build.gradle,里面設(shè)置好了要用到的Android Gradle插件的版本和外部庫文件的下載地址(一般是jcenter)

(1)settings.gradle:搜索并讀取settings.gradle配置获询,將所有模塊都加載到當(dāng)前Studio的工程目錄中涨岁。

(2)模塊(Module)中的build.gradle:配置了使用的android gradle插件,指定生成aar還是apk吉嚣,

作為庫:apply plugin: ‘com.android.library’

生成apk:apply plugin: ‘com.android.application’

(3)local.properties:根據(jù)設(shè)置的使用的Build Tools和SDK版本卵惦,從local.properties指定的SDK目錄中查找是否有匹配的版本,沒有的話會(huì)報(bào)錯(cuò)瓦戚,提示安裝SDK等沮尿。

當(dāng)然,實(shí)際的加載順序是預(yù)先加載好了使用的gradle版本,SDK的目錄畜疾,這里方便理解流程而這樣說赴邻。

一般生成APK文件時(shí),首先是在加載好相關(guān)配置啡捶,生成主模塊與子模塊之間的Task依賴圖姥敛,然后依次執(zhí)行各個(gè)Task。一般生成調(diào)試APK文件都是assembleDebug的Task瞎暑,先是調(diào)用依賴庫Task依次執(zhí)行彤敛,其實(shí)都跑不了《使用Ant打包Android應(yīng)用——apk生成過程》提到的資源處理,class文件生成等了赌。

三墨榄、導(dǎo)入開源工程FlexboxLayout

FlexboxLayout時(shí)Google開源的一個(gè)簡(jiǎn)單靈活的布局庫,類似于CSSFlexibleBoxLayout勿她,這里不具體介紹FlexboxLayout的使用袄秩,只是從講述如何導(dǎo)入并使用開源工程。

0.測(cè)試環(huán)境

操作系統(tǒng):Mac OS X逢并、Ubuntu 14.04之剧、Windows 7

Android Studio 2.2 Build #AI-145.3276617, built on September 15, 2016

JRE: 1.8.0_76-release-b03 x86_64

JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o

1.下載代碼

Gitclonehttps://github.com/google/flexbox-layout.git

也可以直接下載ZIP包或者從android Studio中直接Check Out出來

2.打開工程前配置

如果你的網(wǎng)絡(luò)能夠非常快的下載到不同版本的Gradle和SDK等砍聊,請(qǐng)簡(jiǎn)單看下這里的配置即可背稼,不用實(shí)際操作。

對(duì)于網(wǎng)絡(luò)不好的同學(xué)玻蝌,我們可以先確定下自己的Gradle版本和已有的SDK信息雇庙,簡(jiǎn)單的方式是在Android Studio的歡迎頁面,點(diǎn)擊最下方的Configure->SDK Manager(或者先打開一個(gè)以前運(yùn)行良好的工程灶伊,在Studio的設(shè)置頁面查看),可以看到如圖所示頁面:


(1)SDK Platforms:顯示了從Android2.2到Android7.1.1寒跳,關(guān)心你installed的API Level就行(有些顯示Update available)聘萨,數(shù)字從8到25

(2)SDK Tool:切換到SDK Tools的Tab頁,查看Build-Tool和Android Support Library的Version信息童太,顯示不詳細(xì)的話米辐,勾選又下角的“Show Package Detail”

(3)Gradle插件:查看Android Gradle插件版本信息,在新建的測(cè)試工程中的build.gradle里书释,查看“ classpath ‘com.android.tools.build:gradle:xxx”翘贮,或者從Studio的設(shè)置搜索Gradle查看。記下自己的版本信息爆惧,我這里是2.14.1狸页。

(4)Support Library:需要此庫的在已打開的測(cè)試工程設(shè)置中查看,平時(shí)配置模塊工程也會(huì)用到,如圖所示:


3.打開FlexboxLayout工程

現(xiàn)在可以進(jìn)入下載下來的FlexboxLayout目錄中

(1)以文本文件方式查看最外層build.gradle文件

Gradle插件版本: classpath ‘com.android.tools.build:gradle:2.2.3’芍耘,改成和自己的一致版本

compileSdkVersion的數(shù)字是否在自己的已安裝的SDK Platforms里

buildToolsVersion和supportLibVersion也和compileSdkVersion一樣

(記住這樣做有時(shí)會(huì)有風(fēng)險(xiǎn)址遇,但是一般查看開源工程源碼和別人的Demo還行,真出現(xiàn)編譯運(yùn)行異常的話斋竞,那只能老老實(shí)實(shí)保留人家的版本配置)

有些工程不在此文件中倔约,而是在具體模塊的build.gradle文件中設(shè)置,名稱變?yōu)閏om.android.support:support-v4坝初,com.android.support:appcompat-v7等版本浸剩,他這里統(tǒng)一使用了supportLibVersion

(2)以文本文件方式查看模塊中的build.gradle文件,看是否還有不一致的

(3)打開工程:從已經(jīng)打開的工程中 File->Open選擇build.gradle 鳄袍,或者在歡迎頁面Open an existing Android Studio project

得等待一些時(shí)間來下載依賴的庫绢要。如果你不想等,那看錯(cuò)誤分析畦木,不下載這么多庫的也可以袖扛。

四、打開別人工程可能遇到的問題

如果沒有按照上述方法做類似修改十籍,可能會(huì)有些錯(cuò)誤

1.引入舊工程蛆封,導(dǎo)致Gradle版本和Android Gradle插件版本不一致

如error:Gradle version 2.2 is required. Current version is 2.14.1

當(dāng)classpath ‘com.android.tools.build:gradle:1.3.0’版本低時(shí),會(huì)有如是提示勾栗,如果不強(qiáng)制要求可改成自己Studio已有的版本

一般Android Studio是2.2惨篱,則插件版本也是2.2.0;Android Studio是2.3,插件版本也是2.3.0

gradle和插件對(duì)應(yīng)關(guān)系查看https://developer.android.com/studio/releases/gradle-plugin.html

2.Build Tools和依賴庫不一致围俘,又無法下載到

如Error:Failed to resolve: com.android.support:support-compat:25.3.0

其實(shí)就是修改build.gradle中的compile “com.android.support:appcompat-v7:版本信息

3.發(fā)現(xiàn)一直在不停的Gradle Sync砸讳, Gradle Build或者刷新等

其實(shí)很有可能上上面提到的Gradle版本,SDK等始終下載不下來界牡,可以強(qiáng)制停止簿寂,修改后重新打開。

4.做到幾乎不下載

因?yàn)橹皇强创a和測(cè)試功能宿亡,因此得想辦法減少大量下載的配置:

(1)其實(shí)也可以通過注釋外層工程build.gradle里的如下代碼常遂,使打開的更快,但是會(huì)有其他問題挽荠,這里還不建議新手直接如此修改克胳。

//classpath ‘com.github.dcendents:android-maven-gradle-plugin:1.5’

//classpath ‘com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6’

(2)出現(xiàn)Gradle Sync錯(cuò)誤

Error:Plugin with id ‘com.github.dcendents.android-maven’ not found.

搜索com.github.dcendents.android-maven哪里用到了,發(fā)現(xiàn)時(shí)在flexbox模塊中的maven.gradle使用了此插件

這些gradle文件的使用圈匆,都是在build.gradle中apply方式加入漠另,因此在該模塊的build.gradle中注釋如下

//apply from: ‘maven.gradle’

//apply from: ‘bintray.gradle’

(3)再嘗試編譯出現(xiàn)

Error:(29, 0) Could not get unknown property ‘mavenVersion’ for ProductFlavor_Decorated{name=main, dimension=null, minSdkVersion=DefaultApiVersion{mApiLevel=9, mCodename=’null’},

搜索mavenVersion,發(fā)現(xiàn)定義了一些常量在constants.gradle中跃赚,因此在build.gradle中apply此文件即可笆搓,修改后如下

apply plugin: ‘com.android.library’

apply from: ‘constants.gradle’

五、解決思路總結(jié)

打開、導(dǎo)入工程的常見問題如上述一般都能解決砚作,但是碰到一個(gè)具體問題時(shí)窘奏,該如何解決呢,在《一個(gè)三年Android開發(fā)的總結(jié)》里說過一些常用的網(wǎng)站葫录。另外一定要仔細(xì)看AndroidStudio報(bào)的錯(cuò)誤信息着裹,不要只看在MessageGradleBuild里顯示的最后錯(cuò)誤信息,還可以看看AndroidStudio界面右下角的GradleConsole信息米同,里面給出了Tasks運(yùn)行的信息骇扇,比如當(dāng)前運(yùn)行到哪個(gè)Task出現(xiàn)錯(cuò)誤,錯(cuò)誤的位置等面粮。如果可以看懂少孝,直接根據(jù)位置修改,看不懂熬苍,則可根據(jù)錯(cuò)誤的關(guān)鍵詞在工程中或者網(wǎng)上搜索稍走,一般都能找到解決方法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末柴底,一起剝皮案震驚了整個(gè)濱河市婿脸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柄驻,老刑警劉巖狐树,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鸿脓,居然都是意外死亡抑钟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門野哭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來在塔,“玉大人,你說我怎么就攤上這事拨黔』桌#” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蓉驹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我揪利,道長(zhǎng)态兴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任疟位,我火速辦了婚禮瞻润,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己绍撞,他們只是感情好正勒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著傻铣,像睡著了一般章贞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上非洲,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天鸭限,我揣著相機(jī)與錄音,去河邊找鬼两踏。 笑死败京,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梦染。 我是一名探鬼主播赡麦,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼帕识!你這毒婦竟也來了泛粹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤渡冻,失蹤者是張志新(化名)和其女友劉穎戚扳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體族吻,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帽借,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了超歌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砍艾。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖巍举,靈堂內(nèi)的尸體忽然破棺而出脆荷,到底是詐尸還是另有隱情,我是刑警寧澤懊悯,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布蜓谋,位于F島的核電站,受9級(jí)特大地震影響炭分,放射性物質(zhì)發(fā)生泄漏桃焕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一捧毛、第九天 我趴在偏房一處隱蔽的房頂上張望观堂。 院中可真熱鬧让网,春花似錦、人聲如沸师痕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胰坟。三九已至因篇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間腕铸,已是汗流浹背惜犀。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狠裹,地道東北人虽界。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像涛菠,于是被迫代替她去往敵國和親莉御。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容