
app的目錄結(jié)構(gòu)- 一些零碎的知識(shí)
- 詳解
build.gradle文件Android的日志工具- 過(guò)濾器的使用
4. app的目錄結(jié)構(gòu)
1.build
這個(gè)目錄和外層的
build目錄類(lèi)似,主要也是包含了一些在編譯時(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文件類(lèi)似。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)基類(lèi),我們項(xiàng)目中所有的活動(dòng)都必須繼承它或者它的子類(lèi)才能擁有活動(dòng)的特性(AppCompatActivity是Activity的子類(lèi))。
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)用的名稱(chē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或者更高的話(huà),系統(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)目所有的依賴(lài)關(guān)系,通常Android Studio項(xiàng)目一共有三種依賴(lài)方式:本地依賴(lài),庫(kù)依賴(lài)和遠(yuǎn)程依賴(lài)。本地依賴(lài)可以對(duì)本地的jar包或目錄添加依賴(lài)關(guān)系,庫(kù)依賴(lài)可以對(duì)項(xiàng)目中的庫(kù)模塊添加依賴(lài)關(guān)系,遠(yuǎn)程依賴(lài)則可以對(duì)jcenter庫(kù)上的開(kāi)源項(xiàng)目添加依賴(lài)關(guān)系,觀察一下dependencies閉包中的配置:
compile fileTree就是一個(gè)本地依賴(lài)聲明,他表示將libs目錄下所有.jar后綴的文件都添加到項(xiàng)目的構(gòu)建路徑當(dāng)中。
implementation 'com.android.support:appcompat-v7:23.4.0'是遠(yuǎn)程依賴(lài)聲明,其中com.android.support是域名部分,用于和其他公司的庫(kù)作區(qū)分,appcompat-v7是組名稱(chēng),用于和同一個(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à)則會(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)前的類(lèi)名就好,主要用于對(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)前的類(lèi)名作為值自動(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ò)濾。