** 安卓外層文件夾簡(jiǎn)介**
.gradle和.idea:如果用Android Studio編程,這兩個(gè)目錄為Android Studio自動(dòng)生成的文件,無(wú)需關(guān)心。
app:項(xiàng)目中代碼資源等內(nèi)容幾乎都放在這個(gè)目錄下。
build:主要包含了編譯時(shí)自動(dòng)生成的文件。無(wú)需關(guān)心。
gradle:這個(gè)目錄下包含了gradle wrapper的配置文件,使用geadle wrapper的方式不需要提前將agradle下載好,而是自動(dòng)根據(jù)本地緩存情況覺(jué)得是否需要聯(lián)網(wǎng)下載geadle。Android Studio默認(rèn)沒(méi)有啟用gradle wrapper的方式。
.gitignore:這個(gè)文件是用來(lái)將指定的目錄或文件排除在版本控制之外的。
build.gradle:這是項(xiàng)目全局的gradle構(gòu)建腳本,通常不需要修改。
.gradle.properties這個(gè)文件是全局的gradle配置文件,在這里配置的屬性將會(huì)影響到項(xiàng)目中所有g(shù)radle編譯腳本。
gradlew和gradlew.bat:這兩個(gè)文件夾是用來(lái)在命令行界面中執(zhí)行g(shù)radle命令的,其中g(shù)radlew是在linux和mac系統(tǒng)中使用的,gradlew.bat是在windows系統(tǒng)中使用。
HelloWorld.iml:無(wú)需修改的文件夾。
local.properties:指定本機(jī)中的Android SDK路徑,通常內(nèi)容自動(dòng)生成,無(wú)需修改。
settings.gradle:用于指定項(xiàng)目中所有引入的模塊。通常引入自動(dòng)完成,不需修改。
外層app內(nèi)目錄簡(jiǎn)介
build:編譯時(shí)自動(dòng)生成的文件,無(wú)需關(guān)心。
libs:如果項(xiàng)目中使用第三方j(luò)ar包,就需要把這些jar包放入libs目錄下,
放在這個(gè)目錄下的jar包都會(huì)被自動(dòng)添加到構(gòu)建路徑去。
androidTest:此處是用來(lái)編寫(xiě)androidTest測(cè)試用例的,可以對(duì)項(xiàng)目進(jìn)行一些自動(dòng)化測(cè)試。
java:放置java代碼的目錄。
res:項(xiàng)目中的圖片,布局,字符串等資源存放在這個(gè)目錄下。此目錄下子目錄
drawable存放圖片,layout存放布局,values存放字符串。
AndroidManifest.xml:這是整個(gè)android項(xiàng)目的配置文件,程序中定義的四大組件都需要在這個(gè)文件里注冊(cè),另外還可以在這個(gè)文件里給應(yīng)用程序添加權(quán)限聲明。
test:用來(lái)編寫(xiě)Unit Test測(cè)試用例的,是對(duì)項(xiàng)目進(jìn)行自動(dòng)化測(cè)試的另一種方式。
.gitignore:這個(gè)文件用于將app模塊內(nèi)的指定目錄或文件夾排除在版本控制之外,和外層.gitignore文件類似。
app.iml:Intellij IDEA項(xiàng)目自動(dòng)生成的文件,無(wú)需修改。
build.gradle:這是app模塊的gradle構(gòu)建腳本,這個(gè)文件中會(huì)指定很多項(xiàng)目構(gòu)建相關(guān)的配置。
.proguard-rules.pro:這個(gè)文件用于指定項(xiàng)目代碼的混肴規(guī)則。
--
java文件內(nèi)代碼簡(jiǎn)介
activity是安卓系統(tǒng)提供的一個(gè)活動(dòng)基類,我們項(xiàng)目中所有活動(dòng)都必須繼承它或者他的子類才能擁有活動(dòng)的特性(AppCompatActivity是Activity的子類,onCreate()方法是一個(gè)活動(dòng)創(chuàng)建時(shí)必須執(zhí)行的方法。setContentView()方法是給當(dāng)前活動(dòng)引入一個(gè)布局
public class HelloWorldActivity extends AppCompatActivity { //表明HelloWorldActivity繼承自AppCompatActivity,這是一種向下兼容的activity
private static final String TAG = "HelloWorldActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_layout);
AndroidManifest.xml內(nèi)代碼解析
<activity android:name=".HelloWorldActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
這段代碼表示對(duì)HelloWorldActivity這個(gè)活動(dòng)進(jìn)行注冊(cè)。沒(méi)有在AndroidManifest里注冊(cè)的活動(dòng)是不能使用的。其中
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
這兩段代碼表示HelloWorldActivity是這個(gè)項(xiàng)目的主活動(dòng),在手機(jī)上點(diǎn)擊app圖標(biāo),首先加載這個(gè)活動(dòng)。
在代碼中通過(guò)R.String.Hello_World獲得字符串的引用
在xml中通過(guò)@String/HelloWorld獲得字符串的引用
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher" //設(shè)置應(yīng)用圖標(biāo)屬性
android:label="@string/app_name" //設(shè)置應(yīng)用名稱屬性
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".HelloWorldActivity">
</application>
日志Log
android中的日志類是Log,一般添加在src/java文件夾里,在活動(dòng)中的onCreate()方法內(nèi)添加。Log.d("活動(dòng)名","onCreate execute")有5個(gè)方法打印日志。
Log.v():打印最為瑣碎的,意義最小的日志信息。對(duì)應(yīng)級(jí)別是varbose。是android里面級(jí)別最低的。
Log.d():用于打印一些調(diào)試信息。這些信息對(duì)你調(diào)試程序和分析問(wèn)題是有幫助的。對(duì)應(yīng)級(jí)別debug。比varbose高一級(jí)。
Log.i():用于打印一些比較重要的數(shù)據(jù),可以幫你分析用戶行為的數(shù)據(jù)。對(duì)應(yīng)級(jí)別info。比debug高一級(jí)。
Log.w():用于打印一些警告信息,提示程序在這個(gè)地方可能存在潛在風(fēng)險(xiǎn),最好修復(fù)一下出現(xiàn)警告的地方。對(duì)應(yīng)級(jí)別warn。比info高一級(jí)。
Log.e():用于打印程序中的錯(cuò)誤信息。比如程序進(jìn)入到catch語(yǔ)句中,當(dāng)有錯(cuò)誤信息打印出來(lái)的時(shí)候,一般都代表你的程序出現(xiàn)嚴(yán)重問(wèn)題了,必須盡快修復(fù)。對(duì)應(yīng)級(jí)別error。比warn高一級(jí)。
app內(nèi)build.gradle文件夾內(nèi)代碼簡(jiǎn)介
apply plugin: 'com.android.application' //com.android.application表示這是一個(gè)應(yīng)用程序模塊,可以直接運(yùn)行。如果是com.android.library表示這是一個(gè)庫(kù)模塊,只能作為代碼庫(kù)依附于別的應(yīng)用程序運(yùn)行
android { //一個(gè)安卓閉包
compileSdkVersion 21 //用于指定項(xiàng)目的編譯版本,如果是24就表示android7.0系統(tǒng)的SDK編譯
buildToolsVersion "21.1.0" //用于指定項(xiàng)目構(gòu)建工具的版本,
defaultConfig { //閉包內(nèi)的閉包
applicationId "com.nian.hua" //包名
minSdkVersion 14 //用于指定項(xiàng)目兼容android最低版本 如果是15表示最低兼容android4.0系統(tǒng)
targetSdkVersion 21 //指定的值用來(lái)表示用來(lái)表示你在安卓系統(tǒng)做了充分測(cè)試,如果是23或更大,就會(huì)出現(xiàn)android6.0系統(tǒng)的運(yùn)行時(shí)權(quán)限功能,如果是22只會(huì)出現(xiàn)android5.1的功能,6.0的實(shí)時(shí)權(quán)限功能就沒(méi)有
versionCode 1 //用于指定項(xiàng)目的版本號(hào)(僅應(yīng)用市場(chǎng)可見(jiàn))
versionName "1.0" //用于指定項(xiàng)目的版本名(終端可見(jiàn))
}
buildTypes { //這個(gè)閉包用于指定生成安裝文件的相關(guān)配置,通常只會(huì)有兩個(gè)子閉包,debug(用于指定生成測(cè)試版安裝文件的配置,可忽略不寫(xiě))和release(用于指定生成正式版安裝文件的配置)
release { //用于指定生成正式版安裝文件的配置
minifyEnabled false //用于指定是否對(duì)項(xiàng)目的代碼進(jìn)行混肴,false表示不混肴
proguardFiles /* 用于指定混肴時(shí)的規(guī)則文件*/ getDefaultProguardFile('proguard-android.txt'/*android SDK目錄下,里面是所有項(xiàng)目通用的混肴規(guī)則*/), 'proguard-rules.pro'//當(dāng)前項(xiàng)目的根目錄下,可以編寫(xiě)當(dāng)前項(xiàng)目特有的混肴規(guī)則
}
}
}
dependencies { //指定當(dāng)前項(xiàng)目所有依定的關(guān)系A(chǔ)ndroid Studio中有三種依賴關(guān)系,本地依賴(對(duì)本地jar包或目錄添加依賴關(guān)系),庫(kù)依賴(可以對(duì)項(xiàng)目中的庫(kù)模塊添加依賴關(guān)系)和遠(yuǎn)程依賴(可以對(duì)jcenter庫(kù)上的開(kāi)源項(xiàng)目添加依賴關(guān)系)。
compile fileTree /*這是一個(gè)本地聲明*/(dir: 'libs', include: ['*.jar']) //將libs目錄下所有.jar后綴的文件都添加到項(xiàng)目的構(gòu)建路徑當(dāng)中
//compile(遠(yuǎn)程依賴聲明)'com.android.support:appcompat-v7:24.2.1' (com.android.support:appcompat-v7:24.2.1是一個(gè)標(biāo)準(zhǔn)的遠(yuǎn)程依賴庫(kù)格式,其中com.android.support是域名部分,用于和其他公司的庫(kù)做區(qū)分。24.2.1是版本號(hào),用于和同一個(gè)庫(kù)不同版本做區(qū)分。聲明這行代碼后gradle構(gòu)建項(xiàng)目時(shí)會(huì)自動(dòng)檢查本地是否有這個(gè)庫(kù)的緩存,沒(méi)有自動(dòng)聯(lián)網(wǎng)下載,在添加到構(gòu)建路徑當(dāng)中。
}
最外層buile.gradle文件內(nèi)代碼注釋
buildscript {
repositories {
jcenter() //jcenter是代碼托管倉(cāng)庫(kù),聲明這行代碼可以引用任何jcenter上的開(kāi)源項(xiàng)目
}
dependencies {
classpath 'com.android.tools.build:gradle:1.+' //使用classpath聲明了一個(gè)Gradle插件,最后面部分是版本號(hào)(最新版是2.2.0)
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}