app
的目錄結(jié)構(gòu)- 一些零碎的知識(shí)
- 詳解
build.gradle
文件Android
的日志工具- 過(guò)濾器的使用
4. app的目錄結(jié)構(gòu)
1.build
這個(gè)目錄和外層的
build
目錄類似粹淋,主要也是包含了一些在編譯時(shí)自動(dòng)生成的文件柒莉,不過(guò)他里面的內(nèi)容更多更雜。2.libs
如果你的項(xiàng)目中使用到了第三方的
jar
包尽楔,就需要把這些jar
包都放在libs
文件夾下面驹尼,放在這個(gè)目錄下的jar
包都會(huì)自動(dòng)添加到構(gòu)建路徑里去丙者。3.androidTest
此處是用來(lái)編寫(xiě)
AndroidTest
測(cè)試用例的雳刺,可以對(duì)項(xiàng)目進(jìn)行一些自動(dòng)化測(cè)試盔性。4.java
java
目錄是放置我們所有Java
代碼的地方仲锄。5.res
你在項(xiàng)目中使用到的所有圖片劲妙,布局,字符串等資源都要放在這個(gè)目錄下儒喊,當(dāng)然這個(gè)目錄下還有很多的子目錄镣奋,圖片放到
drawable
目錄下,布局放到layout
目錄下怀愧,字符串放到values
目錄下侨颈。6.AndroidManifest.xml
這是你整個(gè)
Android
項(xiàng)目的配置文件余赢,你在程序中定義的四大組件都需要在這個(gè)文件中注冊(cè)。另外還可以在這個(gè)文件中給應(yīng)用程序添加權(quán)限聲明哈垢。7.test
此處是用來(lái)編寫(xiě)
Unit Test
測(cè)試用例的妻柒,是對(duì)項(xiàng)目進(jìn)行自動(dòng)化測(cè)試的另一種方式。8. .gitignore
這個(gè)文件用于將
app
模塊內(nèi)的指定的目錄或文件排除在版本控制之外温赔,作用和外層的.gitignore
文件類似蛤奢。9.app.iml
IntelliJ IDEA
項(xiàng)目自動(dòng)生成的文件,我們不需要關(guān)心和修改這個(gè)文件里面的內(nèi)容陶贼。10.build.gradle
這是
app
模塊的gradle
構(gòu)建腳本啤贩,這個(gè)文件中會(huì)指定很多項(xiàng)目構(gòu)建相關(guān)的配置。11.proguard-rules.pro
這個(gè)文件用于指定項(xiàng)目代碼的混淆規(guī)則拜秧。
一些零碎的知識(shí)點(diǎn):
1.
public class MainActivity extends AppCompatActivity
{
''''
}
MainActivity
是繼承自AppConpatActivity
的痹屹,這是一種向下兼容的Activity
,可以將Activity
在各個(gè)系統(tǒng)版本中增加的特性和功能最低兼容到Android2.1
系統(tǒng)。Activity
是Android
系統(tǒng)提供的一個(gè)活動(dòng)基類枉氮,我們項(xiàng)目中所有的活動(dòng)都必須繼承它或者它的子類才能擁有活動(dòng)的特性(AppCompatActivity
是Activity
的子類)志衍。
2.
所有以drawable
開(kāi)頭的文件夾都是用來(lái)放圖片的,所有以mipmap
開(kāi)頭的文件夾都是用來(lái)放應(yīng)用圖標(biāo)的聊替,所有以values
開(kāi)頭的文件夾都是用來(lái)放字符串楼肪,樣式,顏色等配置的惹悄,layout
文件夾是用來(lái)放布局文件的春叫。
3.
引用屬性的兩種方式。
1.在代碼中通過(guò)R.string.hello_world
可以獲得該字符串的引用泣港。
2.在XML
中通過(guò)@string/hello_world
可以獲得該字符串的引用暂殖。
4.
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
項(xiàng)目的應(yīng)用圖標(biāo)就是通過(guò)android:icon
屬性來(lái)指定的。
應(yīng)用的名稱則是通過(guò)android:label
屬性指定的当纱。
5.詳解build.gradle文件
1.外部的build.gradle文件
buildscript
{
repositories
{
jcenter()
}
dependencies
{
classpath 'com.android.tools.build:gradle:2.1.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects
{
repositories
{
jcenter()
}
}
兩處repositories
的閉包中都聲明了jcenter()
這行配置呛每,其實(shí)他是一個(gè)代碼托管倉(cāng)庫(kù),很多Android
開(kāi)源項(xiàng)目都會(huì)選擇將代碼托管到jcenter
上坡氯,聲明了這行配置之后晨横,我們就可以在項(xiàng)目中輕松引用任何jcenter
上的開(kāi)源項(xiàng)目了。 dependencies
閉包中使用classpath
聲明了一個(gè)Gradle
插件箫柳,我們用它來(lái)構(gòu)建Android
項(xiàng)目颓遏,后面是版本號(hào)。通常情況下你并不需要修改這個(gè)文件中的內(nèi)容滞时,除非你想添加一些全局的項(xiàng)目構(gòu)建配置。
2.app目錄下的build.gradle文件
apply plugin: 'com.android.application'
android
{
compileSdkVersion 23
buildToolsVersion "25.0.2"
defaultConfig
{
applicationId "com.example.myapplication"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes
{
release
{
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies
{
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
}
apply plugin: 'com.android.application
應(yīng)用了一個(gè)插件滤灯,一般有兩種值可選:com.android.application
表示這是一個(gè)應(yīng)用程序模塊坪稽,com.android.library
表示這是一個(gè)庫(kù)模塊曼玩。應(yīng)用程序模塊和庫(kù)模塊的最大區(qū)別在于,一個(gè)是可以直接運(yùn)行的窒百,一個(gè)只能作為代碼庫(kù)依附于別的應(yīng)用程序模塊來(lái)運(yùn)行黍判。
接下來(lái)是一個(gè)大的Android閉包,在這個(gè)閉包中我們可以配置項(xiàng)目構(gòu)建的各種屬性篙梢,其中compileSdkVersion
用于指定項(xiàng)目的編譯版本顷帖,24表示使用Android7.0系統(tǒng)的SDK編譯,buildToolsVersion
用于指定項(xiàng)目構(gòu)建工具的版本渤滞,目前的版本是25.0.2贬墩。
里面嵌套的的defaultConfig閉包
, applicationId
用于指定項(xiàng)目的包名妄呕,我們?cè)趧?chuàng)建項(xiàng)目的時(shí)候已經(jīng)指定過(guò)包名陶舞,如果你想在后面對(duì)其進(jìn)行修改,那么就是在這里修改的绪励, minSdkVersion
用于指定項(xiàng)目最低兼容的Android
系統(tǒng)版本肿孵,15
代表兼容到Android4.0
系統(tǒng),targetSdkVersion
指定的值表示你在該目標(biāo)版本上已經(jīng)做過(guò)了充分的測(cè)試疏魏,系統(tǒng)將會(huì)為你的應(yīng)用程序啟用一些最新的功能和特性停做,如果你將targetSdkVersion
指定成23
或者更高的話,系統(tǒng)就會(huì)為你的程序啟用運(yùn)行時(shí)權(quán)限功能,如果設(shè)置成22
大莫,22
代表Android5.1
系統(tǒng)蛉腌,運(yùn)行時(shí)權(quán)限就不會(huì)自然就不會(huì)啟用。versionCode
用于指定項(xiàng)目的版本號(hào)葵硕,versionName
用于指定項(xiàng)目的版本名眉抬。這兩個(gè)屬性在生成安裝文件的時(shí)候非常重要。
buildTypes閉包用于指定生成安裝文件的相關(guān)配置懈凹,通常只會(huì)有兩個(gè)子閉包蜀变,一個(gè)是debug,一個(gè)是release。debug閉包用于指定生成測(cè)試版安裝文件的配置介评,release閉包用于指定生成正式版安裝文件的配置库北,debug閉包是可以忽略不寫(xiě)的。
release閉包
minifyEnabled
用于指定是否對(duì)項(xiàng)目的代碼進(jìn)行混淆们陆,true
表示混淆寒瓦,false
表示不混淆。proguardFiles
用于指定混淆時(shí)使用的規(guī)則文件坪仇,這里指定了兩個(gè)文件杂腰,第一個(gè)proguard-android.txt
是在AndroidSDK目錄下的,里面是所有項(xiàng)目通用的混淆規(guī)則椅文,第二個(gè)proguard-rules.pro
是在當(dāng)前項(xiàng)目的根目錄下的喂很,里面可以編寫(xiě)當(dāng)前項(xiàng)目特有的混淆規(guī)則.需要注意的是惜颇,通過(guò)Android Studio
直接運(yùn)行項(xiàng)目,生成的都是測(cè)試版安裝文件。
dependencies閉包
這個(gè)閉包的功能非常強(qiáng)大,它可以指定當(dāng)前項(xiàng)目所有的依賴關(guān)系需频,通常Android Studio
項(xiàng)目一共有三種依賴方式:本地依賴,庫(kù)依賴和遠(yuǎn)程依賴锨亏。本地依賴可以對(duì)本地的jar
包或目錄添加依賴關(guān)系,庫(kù)依賴可以對(duì)項(xiàng)目中的庫(kù)模塊添加依賴關(guān)系忙干,遠(yuǎn)程依賴則可以對(duì)jcenter
庫(kù)上的開(kāi)源項(xiàng)目添加依賴關(guān)系器予,觀察一下dependencies
閉包中的配置:
compile fileTree
就是一個(gè)本地依賴聲明,他表示將libs
目錄下所有.jar
后綴的文件都添加到項(xiàng)目的構(gòu)建路徑當(dāng)中豪直。
implementation 'com.android.support:appcompat-v7:23.4.0'
是遠(yuǎn)程依賴聲明劣摇,其中com.android.support
是域名部分,用于和其他公司的庫(kù)作區(qū)分弓乙,appcompat-v7
是組名稱末融,用于和同一個(gè)公司中不同的庫(kù)作區(qū)分,24.2.1
是版本號(hào)暇韧,用于和同一個(gè)庫(kù)不同的版本做區(qū)分勾习。加上這句聲明后,Gradle
在構(gòu)建項(xiàng)目時(shí)會(huì)首先檢查一下本地是否已經(jīng)有這個(gè)庫(kù)的緩存懈玻,如果沒(méi)有的話則會(huì)去自動(dòng)聯(lián)網(wǎng)下載巧婶,然后再添加到項(xiàng)目的構(gòu)建路徑當(dāng)中。
6.Android的日志工具
log.d("MainActivity","onCreate: ");
Log.d()
方法中傳入了兩個(gè)參數(shù):第一個(gè)參數(shù)是tag
,一般傳入當(dāng)前的類名就好涂乌,主要用于對(duì)打印的信息進(jìn)行過(guò)濾艺栈。第二個(gè)參數(shù)是msg
,即想要打印的具體的內(nèi)容。
Shift+F10
: 運(yùn)行程序湾盒。
打印一條debug
級(jí)別的日志湿右,只需要輸入logd
,然后按下Tab
鍵罚勾,就會(huì)幫你自動(dòng)補(bǔ)全一條完整的打印語(yǔ)句毅人。
我們?cè)?code>onCreate()方法的外面輸入logt
,然后按下Tab
鍵尖殃,這時(shí)就會(huì)以當(dāng)前的類名作為值自動(dòng)生成一個(gè)TAG常量丈莺。
7.過(guò)濾器的使用
目前只有3個(gè)過(guò)濾器:
Show only selected application:
表示只顯示當(dāng)前選中程序的日志。
No Filters:
沒(méi)有過(guò)濾器送丰,會(huì)把所有的信息顯示出來(lái)缔俄。
Edit Filter Configuration:
自定義過(guò)濾器,給過(guò)濾器起名叫data
,并且讓他對(duì)名為data
的tag
進(jìn)行過(guò)濾。