編輯:關於Android編程
目標:Android Studio新手–>下載安裝配置–>零基礎入門–>基本使用–>調試技能–>構建項目基礎–>使用AS應對常規應用開發
經過2年時間的研發,Google終於正式發布了面向Android開發者的集成開發環境Android Studio 1.2(穩定版)。Android Studio是Google開發的一款面向Android開發者的IDE,支持Windows、Mac、Linux等操作系統,基於流行的Java語言集成開發環境IntelliJ搭建而成。該IDE在2013年5月的Google I/O開發者大會上首次露面,當時的測試版各種莫名其妙的Bug,但是14年12月8日發布的版本是穩定版。Android Studio 1.0推出後,Google官方將逐步放棄對原來主要的Eclipse ADT的支持,並為Eclipse用戶提供了工程遷移的解決辦法。不過相信作為Developer的你上手AS 1.0以後你再也不願意使用原來苦逼的Eclipse+ADT了,你會被AS的各種強大所吸引。
下載AS前先說下,AS安裝包分為含SDK版本和不含SDK版本下載,如果你有SDK,那麼完全可以下載不含SDK版本;不過下載了含SDK版本也沒事,安裝時選擇自定義SDK也可以,安裝後重新指定SDK路徑也可以,總之看個人愛好喽。先吐槽下天朝的強大吧,不得不拜服天朝的牆。如果你有梯子請去 Android Developer下載最新版的AS安裝包,如果你沒有梯子那也有個辦法,就是去Android Studio中文社區官網下載你的平台需要的安裝包。
下載下來以後安裝的過程可以忽略了吧,能安裝的都是程序猿吧,所以安裝這點就不說了,注意已經正確安裝配置了JDK。
安裝好了以後首次運行AS可能一直停在Fetching Android SDK component information。如下界面:
這是因為天朝的牆真的太高太厚把首次運行更新SDK給牆了。解決辦法就是關閉安裝向導,如果無法關閉可以在任務管理器中手動關掉進程(Ctrl+Alt+Del啟動任務管理器),然後打開AS安裝目錄下的bin目錄裡面的idea.properties文件,添加一條禁用開始運行向導的配置項:
disable.android.first.run=true
然後再啟動程序就會打開項目向導界面,這個時候如果點擊Start a new Android Studio project是沒有反應的,並且在Configure下面的SDK Manager是灰色的,這是因為沒有安裝Android SDK的緣故。這時候一般有兩種做法:
然後再啟動程序就會打開項目向導界面,這個時候如果點擊Start a new Android Studio project是沒有反應的,並且在Configure下面的SDK Manager是灰色的,這是因為沒有安裝Android SDK的緣故。這時候一般有兩種做法:
自己沒有SDK,需要從網絡下載;打開向導的Configure-Settings,在查找框裡面輸入proxy,找到下面的HTTP Proxy,設置代理服務器,並且將Force https://… sources to be fetched using http://選中,然後退出將上面在idea.properties配置文件中添加的那條配置項注釋掉重新打開Android Studio等剛開始的向導把Android SDK下載安裝完成就可以了。
自己有SDK,重新指定SDK路徑;打開向導的Configure->Project Defaults->Project Structure,在此填入你已有的SDK路徑。
此時重啟AS就可以在向導裡新建Android工程喽。至此整個安裝過程結束。
首先新建工程,輸入工程名和主包名和存儲路徑;點擊next到如圖步驟:
上圖中首先你可選擇你的App要適配的設備是Wear還是Mobile還是TV。在你新建App選擇最低適配版本時,強大的AS會給你一些有用的統計提示,如圖描述了當前版本的用戶情況,點擊Help me choose後彈出如下更加形象的分布圖表描述:
愛不釋手的亮點就是這麼一步一步比Eclipse強大的,這只是一些不值得一提的小點而已,強大的功能還在後面。繼續點擊Next選擇形象友好的GUI模板,點擊完成進入工程初始化過程。
第一次安裝工程初始化時由於需要聯網下載gradle會比較慢,不過有時候不是第一也會慢,工程依賴的gradle版本不匹配時也會自動重新下載;我的初始化很快,原因是我本地的gradle-2.2-all.zip之前已經下載OK的。至於啥時gradle後文會有說明。這兒只是告訴你若果你看到卡一會兒時正常的。
接下來進入到了工程界面下:
這個創建過程可比Eclipse上長的多。主要是因為從gradle上下載。gradle也可以手動離線下載好放在對應目錄下。工程的結構和 Eclipse上的不同,src下分為java和res。AS是基於idea,而idea和eclipse有大的區別,有好處也有不好的地方,在一段時間裡,idea被認為是開發java最好用強大的ide工具,所以AS新建的時候有new application和new module開發。idea沒有工作空間這樣的說法。這就是Eclipse用戶切換過來第一個比較不適應的地方。
具體說就是:
有了如上三條概念自己手動創建摸索下,相信聰明的你自然就明白咋回事了吧。
接下來看一些工欲善其事必先利其器的基本高頻率實用設置:
中文亂碼—–在窗口中,找到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的基本情況相信你已經有個大致了解了。具體比Eclipse的優勢體現在如下幾點:
AS是Google專門為Android基於IntelliJ IDEA打造的利器。親生的永遠是最好的,只是現在還在成長中而已。
AS在速度上不管哪一個方面都比Eclipse快。
Darcula主題UI簡直就是極客范,帥爆了。
強大的智能提示補全功能在寫代碼時簡直比Eclipse高效率N倍。
智能保存,不需要Ctrl + S。效率會大大提升。
整合Gradle構建工具,Gradle集合了Ant和Maven的優點,不管是配置、編譯、打包都非常牛逼。
UI編輯器簡直比Eclipse高效N倍,自帶了多設備的實時預覽,簡直是神器。多語言適配點擊地球直接輸入,再也不用比較那個string沒有翻譯了。
內置終端直接替代cmd命令行,一個IDE全部搞定。
完善的插件系統,如Git、Markdown、Gradle等,直接搜索下載。
總之就一句話,相信我,若果你和我一樣是Eclipse用戶切換過來,那麼你絕對不會再切換回去,你會愛上AS的。
新建工程項目後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構建腳本
Android Studio調試其實也非常方便,一般問題直接通過AS的DDMS的Logcat就可以搞定。AS支持類似Eclipse的DDMS的所有功能。這裡要說的是疑難問題的調試方式,即斷點調試。
首先先編譯好要調試的程序
如上圖2所示在行號處點擊設置斷點。然後如1所示點擊開啟調試會話。
如上圖所示,IDE下方出現Debug視圖,1指向的是現在調試程序停留的代碼行,2區域是程序的方法調用棧區。在這個區域中顯示了程序執行到斷點處所調用過的所用方法,越下面的方法被調用的越早。由此順序想必有些Android深入功底了解一點Android系統啟動流程的就知道這幾個方法咋回事,怎麼到Activity的onCreate的。哈哈,說到系統了。不扯了。3是一些調試按鈕,快捷鍵放在上面直接會顯示。4和5是一些變量觀察區。
上圖中:
點擊1指向的按鈕,程序向下執行一行,如果當前行有方法調用,這個方法將被執行完畢返回,然後到下一行。
點擊2指向的按鈕,程序向下執行一行。如果該行有自定義方法,則運行進入自定義方法(不會進入官方類庫的方法)。
點擊3鈕在調試的時候能進入任何方法。
點擊4的作用是如果在調試的時候你進入了一個方法(如debugFunc),並覺得該方法沒有問題,你就可以使用4跳出該方法,返回到該方法被調用處的下一行語句。值得注意的是,該方法已執行完畢。
點擊5指向的按鈕後,你將返回到當前方法的調用處重新執行,並且所有上下文變量的值也回到那個時候。只要調用鏈中還有上級方法,可以跳到其中的任何一個方法。
如上圖設置多個斷點,開啟調試。想跨斷點移動到下一個斷點,點擊如下圖1箭頭,程序將運行一個斷點到下一個斷點之間需要執行的代碼。如果後面代碼沒有斷點,再次點擊該按鈕將會執行完程序。點擊箭頭2指向的按鈕,可以查看你曾經設置過的斷點並可設置斷點的一些屬性,如下圖所示。調試開始後,在 Variables區域可以給指定的變量賦值(鼠標左鍵選擇變量,右鍵彈出菜單選擇setValue…)。這個功能可以更加快速的檢測你的條件語句和循環語句。點擊箭頭3加號或者在調試的代碼變量上右鍵添加watcher即可查看跟蹤變量值。
上圖箭頭1指向的是你曾經設置過的斷點,箭頭2可以設置條件斷點(滿足某個條件的時候,暫停程序的執行,如 index==5)。結束調試後,應該在箭頭1處把所設的斷點刪除(選擇要刪除的斷點後,點擊上方的紅色減號)。
以上便是AS的一些調試使用技巧。
基礎知識
項目創建成功後會自動下載Gradle,這個過程特別慢,建議翻牆。下載的Gradle在Windows平台會默認在 C:\Documents and Settings\<用戶名>.gradle\wrapper\dists目錄,這個目錄下有個gradle-x.xx-all的文件夾,。也可以自己手動到Gradle官網下載對應的版本,然後將下載的.zip文件(也可以解壓)復制到上述的gradle-x.xx-all 文件夾下。
每一個Module都需要有一個gradle配置文件,語法都是一樣,唯一不同的是開頭聲明的是apply plugin。注意區分不同位置的build.gradle文件。
AS的工程根目錄下的build.gradle文件:
buildscript { //設置腳本的運行環境 repositories { //支持java依賴庫管理(maven/ivy等),用於項目的依賴 //mavenCentral() //僅僅是不同的網絡倉庫而已 jcenter() //推薦使用這個倉庫 } //依賴包的定義。支持maven/ivy、遠程、本地庫、單文件,前面定義了repositories{}jcenter庫,使用jcenter的依賴只需要按照 //類似於com.android.tools.build:gradle:1.0.0-rc2,gradle就會自動的往遠程庫下載相應的依賴。 dependencies { classpath 'com.android.tools.build:gradle:1.0.0-rc2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } //多項目的集中配置,多數構建工具,對於子項目的配置,都是基於繼承的方式。Gradle除了提供繼承方式設置子項目,還提供這種配置 allprojects { repositories { jcenter() } }
AS的工程根目錄下的settings.gradle文件:
include ':app' //module include ':my_lib' //module(build as lib)
AS的工程根目錄下的Module的build.gradle文件(此處以一個簡單的Lib module的gradle為例):
//plugin在AS裡取值一般為'com.android.library'或者'com.android.application' apply plugin: 'com.android.library' //構建為lib android { compileSdkVersion 17 //編譯需要SDK版本 buildToolsVersion "19.1.0" //SDK Manager確定本地安裝該版本才可以 defaultConfig { minSdkVersion 8 //最小版本 targetSdkVersion 17 //目標版本 } buildTypes { //編譯項 release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { //依賴支持 compile 'com.android.support:support-v4:18.+' }
Gradle打包APP簽名
默認情況下,debug被配置成使用一個debug keystory。debug keystory使用了默認的密碼和默認key及默認的key密碼。debug構建類型會自動使用debug簽名配置。在你的Module的build.gradle文件中添加:
android { ...... signingConfigs { myConfig{ storeFile file("yanbober.keystore") storePassword "gradle" keyAlias "gradle" keyPassword "gradle" } } buildTypes{ release { runProguard true zipAlignEnabled true // 移除無用的resource文件 shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.myConfig } } }
雖然經常使用項目根目錄的相對路徑作為keystore的路徑,但是也可以使用絕對路徑,盡管這並不推薦(除了自動創建出來的debug keystore)。運行gradle clean gradle build即可生成簽名混淆對齊的app。
Gradle構建Android應用多渠道包(批量打包)
Android應用的發布需要面對各種各樣的市場,我們稱之為渠道。通常作為開發者我們需要知道應用是從哪個渠道下載的。這種統計信息一般常用的是百度統計或者友盟統計。這裡舉例時使用友盟統計為例說明問題。原理是Gradle的Manifest Merger。
在AndroidManifest.xml裡配置所謂的PlaceHolder。
在模塊build.gradle文件的defaultConfig加上PlaceHolder,作用是聲明CHANNEL_VALUE是可替換值的PlaceHolder,同時為其設置yanbober默認值。
android { ...... defaultConfig { ...... manifestPlaceholders = [ CHANNEL_VALUE:"yanbober" ] } }
在模塊的build.gradle文件裡添加ProductFlavors配置。ProductFlavors其實就是可定義的product特性,與Manifest Merger使用就可以在一次編譯過程中產生多個具有自己特性配置的版本。下面這個配置的作用就是為每個渠道包產生不同的CHANNEL_VALUE的值。
android { ...... defaultConfig { ...... manifestPlaceholders = [ CHANNEL_VALUE:"yanbober" ] } productFlavors { yanbober{} wandoujia{} xiaomi{} baidu{} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [ CHANNEL_VALUE:name ] } }
批量生成多渠道包:進入工程目錄下運行gradlew assembleRelease。可以看到編譯一共產生了4個apk,分別對應在productFlavors段定義的4個渠道。反編譯打開 AndroidManifest.xml就會發現CHANNEL這一段的配置已經被修改。
生成單個渠道包:打開AS的Gradle Tasks面板模塊有很多任務,直接雙擊對應的耽擱渠道任務生成對應的apk。用命令行單獨生成xiaomi渠道使用gradlew assemblexiaomiRelease就好了。
好了,Gradle的基本情況就說到這,具體可以閱讀官網或者查閱其他資料,Gradle的使用需要經驗的積累。
Android Studio自帶的模擬器速度已經比Eclipse插件的快一點了,但是還不夠暴力,不夠爽。現在來說說最暴力的Genymotion模擬器如何結合AS 使用。首先上Genymotion官網下載安裝Genymotion,同時你需要在Genymotion官網官網上注冊一個賬號,這樣你才能正常的使用 Genymotion。
進入AS的Settings界面左側找到Plugins,點擊下圖箭頭Button(也就是在線安裝):
順便說下上圖界面也就是AS安裝插件的通用方法,可以看見當前已經安裝了的插件,選擇在線安裝或者從硬盤安裝,即針對你已經下載好了的插件,可通過這項選擇到你下好的插件,進行安裝。
如下圖所示在1區輸入插件名字,2區選中,3區下載安裝,然後返回後在AS工具欄上可以看見Genymotion小圖標,也就是箭頭4指的那個玩意,說明安裝OK。
接下來就是設置下Genymotion,新建一個虛擬機設備,這是Genymotion的東西,至於怎麼弄Step by Step就行,沒啥難度。完事點擊AS上模擬器圖標就可以啟動使用了,運行AS程序選擇模擬器就可以在模擬器看見自己程序了,下圖就是 Genymotion啟動起來的界面。
至此快速模擬器Genymotion已經搞定,提升你的速度。其他的插件安裝也就觸類旁通了。
1.什麼是Zygote?在Android中所有的應用程序進程,以及用來運行系統關鍵服務的System進程都是有Zygote進程負責創建的,因此我們就叫他受精卵,畢竟它真的
主要介紹除了常規的kernel的printk和android的DDMS, logcat外的幾個調試手段. 包括bugreport, oprofile, traceview
大致分是這幾步: (1)新建Android工程: HelloJni.java代碼 package com.panpass.main; public c
適配器模式從名字上就可以看出適配器是為了針對接口不匹配的情況,而做出的兼容方法,假設我們有一個已經存在的類Adaptee,其中有一些已經存在並實現好的方法methodA。