| 1.如何查看Android studio的環境搭建是否成功 首先在Android studio中的sdk manager查看sdk存放位置,如何打開,同時按shirt+ctrl+滑鼠右鍵,如下圖:
然后點擊“在此處打開power shell視窗”,便得到下圖:
輸入cmd,進入該檔案夾的命令提示符,再輸入adb shell,如上圖顯示不報錯即安裝成功,以上為環境搭建成功檢測, | ||
| 2.新建專案與運行 點擊file→new→New Protect,如下圖,然后點擊Basic Activity,一直點擊next,
新建專案后,在運行前需要配置模擬機供其運行專案(一般配置一次模擬機可以運行所有專案),否則沒有載體,配置模擬機步驟如下: 點擊右上角的AVD manager按鈕然后點擊下圖的左下角處Create Virtual,
然后一直點擊next,最后模擬機創建成功,模擬機創建成功之后便是運行, 最基本的運行操作有兩種,一為run→Run app;二為直接點擊右上角綠色三角形按鈕
便會出現模擬機,顯示內容(如下圖)
運行完畢, 3.修改專案內容 由上圖可知,這為一個簡單的app,僅有text view,下面就來講解如何修改text view內容,首先點擊res→fragment_first.xml,如下圖:
然后在右邊視角便可以查看該內容,接著修改text view顯示有兩種方法,右邊視圖如下:
在右邊有三個選項,code對應代碼,design對應圖形(即顯示的結果),split包含以上兩者,
方法一:點擊code,找到代碼中的textview欄,然后找到Android:text=“里面即為顯示在模擬機的textview內容,” 方法二:直接修改textview內容
二:檔案夾及代碼詳解 如下圖從Android模式更改成Procjct模式
現在來決議外層目錄每一個檔案夾以及每一個檔案:
1..gradle檔案與.idea檔案 這兩個檔案夾放置的都是Android studio自動生成的檔案, 2.gradle檔案夾 Gradle是獨立于Android studio運行的,這個檔案夾里包含了gradle wrapper的組態檔,使用gradle wrapper的方式不需要提前將gradle下載好,會根據本地的快取情況決定是否需要聯網下載,Android studio默認沒有啟用gradle wrapper的方式,如果需要打開,可以點擊Android studio導航欄→File→Settings→Build,Execution,Deployment→Gradle,進行配置更改,Gradle是一種構建腳本,用Groovy語言實作,一種類似于java的語言,Gradle可以自動化構建、測驗、發布、部署以及更多的軟體包或者其他型別的專案,如生成的靜態網站、生成的檔案或其他任何東西, 3..gitignore檔案 這個檔案是用來將指定的檔案或目錄排除在版本之外的 4.build,gradle和settings.gradle檔案 build.gradle是專案全域的 構建物件,對應Project物件,而settings.gradle用于指定專案中引入的模塊,對應Setting物件,一個AS工程構建的整個程序如下:構建開始時首先會創建一個Setting物件,根據settings.gradle的內容來配置這個Setting物件,通過這個Setting物件來加載Project,include多少個Moudle就會創建多少個Project,根據build.gradle內容配置Project物件,build.gradle一般不需要修改,settings.gradle主要用于加載配置,里面有個”app”,如果改了模塊名字,則必須在settings.gradle中宣告, 5.gradle.properties 這個是全域的gradle組態檔,在這里配置的屬性將會影響到專案中所有的graddle編譯腳本, 6.gradlew和gradlew.bat 這兩個檔案是用來命令列界面中執行graddle命令的,其中gradlew是在Linux或mac系統的,gradlew.bet是window系統中使用的, 7.local.properties 這個檔案用于本機中的Android SDK路徑,通常內容都是自動生成的,不需要修改,當本機中的SDK位置發生了變化,就將這個檔案的路徑改成性的位置即可, 三.app檔案
1.build檔案 系統生成的檔案目錄,最后生成的apk檔案(apk-debug.apk)就在該檔案的outputs檔案里,里面會有相關檔案的大小占比,如下:
2.lib檔案 第三方jar包的存放地址,還有so包,如果專案中使用了第三方jar包,需放在這個目錄里,放在這個目錄的jar包都會被自動添加到構建路徑里去, 3..gitignore 這個檔案用于將APP板塊內的的制定的檔案或目錄排除在版本之外,作用與外層的.gitignmore相似 4.build.gradle 代碼如下圖:
第一行的id應用了一個插件,一般有兩種值可選:com.android.application表示這是一個應用程式模塊,com.android.library表示和是一個庫模塊,應用程式模塊和庫模塊的最大區別在于,一個可以直接運行,一個只能作為代碼庫依附于別的應用程式模塊來運行, 往下看是一個大的android閉包,在這個閉包中我們可以配置專案構建的各種屬性,Compilesdk是指專案的編譯版本,下圖為各個sdk對應版本
defaultConfig可以更細的進行配置,applicationId用于指定專案的包名,在創建時我們已經指定過包名了,如果需要修改,就是在這里修改的,Minsdk用于指定專案最低兼容的Android版本,這里的21由上圖可知為Android5.0.,targetsdk指定的值表示你在該目標版本上已經做過充分的測驗,系統將會為你的應用程式啟用一些最新的功能和特性,比如說Android 6.0 系統中引入了運行時權限這個功能,如果你將targetSdkVersion 指定成23或者更高,那么系統就會為你的程式啟用運行時權限功能,而如果你將targetSdkVersion指定成22,那么就說明你的程式最高只在 Android 5.1系統上做過充分的測驗,Android6.0系統中引人的新功能自然就不會啟用了,剩下的兩個屬性都比較簡單,versionCode 用于指定專案的版本號,versionName 用于指定專案的版本名,這兩個屬性在生成安裝檔案的時候非常重要,我們在后面都會學到, buildTypes 閉包中用于指定生成安裝檔案的相關配置,通常只會有兩個子閉包,一個是debug,一個是release,debug閉包用于指定生成測驗版安裝檔案的配置,release閉包用于指定生成正式版安裝檔案的配置,另外, debug 閉包是可以忽略不寫的,因此我們看到上面的代碼中就只有一個release閉包,下面來看一下release閉包中的具體內容吧,minifyEnabled用于指定是否對專案的代碼進行混淆,true表示混淆,false 表示不混淆,proguardFiles 用于指定混淆時使用的規則檔案,這里指定了兩個檔案,第一個proguard-android.txt 是在 Android SDK 目錄下的,里面是所有專案通用的混淆規則,第二個 proguard-rules.pro 是在當前專案的根目錄下的,里面可以撰寫當前專案特有的混淆規則, 5.proguard-rules.pro 這個問價可能用于指定專案代碼的混淆規則,當代碼開發完成后打包安裝包檔案,如果不希望代碼被別人破解,通常會將代碼進行混淆,從而讓破解者難于閱讀, 6.src目錄
Src目錄包含著三個檔案夾:Androidtest, main ,test 先來分析一下Android test和test包,這都是一個測驗包,androidTest是整合測驗,可以運行在設備或虛擬設備上,需要編譯打包為APK在設備上運行,可以實時查看細節 test 是單元測驗,運行在本地開發機上,可以脫離Android運行環境,速度快, 再講一下main包: 里面包含著Java和res和AndroidMainfest.xml, 來說一下AndroidMainfest.xml:
這段代碼表示對 HelloWorldActivity這個活動進行注冊,沒有在AndroidManifest.xml里注冊的活動是不能使用的,其中intent-filter里的兩行代碼非常重要,<action android:name="android.intent.action.MAIN”/>和<category android:name="android.intent.category LAUNCHER"/>表示 HelloWorldActivity是這個專案的主活動,在手機上點擊應用圖示,首先啟動的就是這個活動, AndroidManifext描述了package中暴露的組件像activity,serveice等,他們各自的實作類,各種能被處理的資料和啟動位置,此外還能宣告程式中的contentproviers,intentreceivers,還能指定permissions和instrumentation等等, xmlns:android:定義android的命名空間, package:指定本應用內java主程式的包名,這里就是com.example.jared.hello了, application:宣告了每一個應用程式的組件及其屬性, android:icon:顯而易見表示APP的圖示了, android:label:許可串列, android:supportsRtl:啟用各種RTLAPI來用RTL布局顯示應用,這個是android4.2的新特性, android:theme:android的主題, activity:android:name表示當前的activity的名字,因為工程為MainActivity,所以這個名字就為這個,之后有新的activity的話,也需要添加才可以使用, intent-filter:包含了action和 category兩種, action:只有android:name屬性,常見的是android.intent.action.MAIN,表示此activity是作為應用程式的入口, category:android:name屬性,常見的是android.intent.category.LAUNCHER,決定應用程式是否顯示在程式串列里, 再說一下java
由上圖可知,有兩個fragment,分別是first和second,那么fragment有什么用呢? Fragment是Android 3.0 (Honeycomb)被引入的,主要目的是為了給大螢屏(如平板電腦)上更加動態和靈活的UI設計提供支持,由于平板電腦的螢屏比手機的螢屏大很多,因此可用于組合和交換的UI組件的空間更大,利用Fragment實作此類設計的時,就無需管理對視圖層次結構的復雜更改,通過將 Activity 布局分成片段,您可以在運行時修改 Activity 的外觀,并在由 Activity 管理的回傳堆疊中保留這些更改,如果僅僅只有Activity布局,那是不夠的,不僅在手機上有一套布局,同時在平板上還需要設計一套布局,那樣維護起來也麻煩,代碼上也有一定的冗余,對于APP包的大小也有一定的壓力,Fragment的優勢是布局在不同設備上的適配, 使用Fragment還有這么幾個方面優勢: 代碼復用,特別適用于模塊化的開發,因為一個Fragment可以被多個Activity嵌套,有個共同的業務模塊就可以復用了,是模塊化UI的良好組件, Activity用來管理Fragment,Fragment的生命周期是寄托到Activity中,Fragment可以被Attach添加和Detach釋放, 可控性,Fragment可以像普通物件那樣自由的創建和控制,傳遞引數更加容易和方便,也不用處理系統相關的事情,顯示方式、替換、不管是整體還是部分,都可以做到相應的更改, Fragments是view controllers,它們包含可測驗的,解耦的業務邏輯塊,由于Fragments是構建在views之上的,而views很容易實作影片效果,因此Fragments在螢屏切換時具有更好的控制,、
再來說一下mainActivity:
由這段代碼可以看出,首先Mainactivity繼承了AppCompatActivity, 然后再看下onCreate方法,這個是android的一個設計模式ioc,android的架構基本上就是用了這個模式,用戶看不到onCreate之前干了什么,只要完成這個函式,并且在里面呼叫需要呼叫的東西即可,super.onCreate方法是呼叫父類的onCreate方法,然后setContentView方法就是為當前的activity引入了一個activity_main的布局, 在此附上查閱資料但與新版代碼不一樣的決議: 代碼如下 package jay.com.example.firstapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
最后再來講一下res檔案夾:
drawable:存盤一些xml檔案,-*dpi表示存盤解析度的圖片,用于適配不同的螢屏,
主要記錄這些背景的引數 Fillcolor是填充顏色 Pathdate是路徑資料 Strokewidth是筆劃寬度 Strokecolor是筆劃顏色 Drawable-v24為前景目錄
Width是寬度 height是高度 viewportwidth是視窗寬度 viewportheight是視窗高度 startX/Y,endX/Y是視窗的定位,x、y的開始結束坐標 type是型別(linear是線性布局) offset是偏移量 filltype是填充型別 剩下的和上面的一樣 以下是對該檔案里面的一些后綴的解釋(解析度) -mdpi:320x480 -hdpi:480x800、480x854 -xhdpi:至少960x720 -xxhdpi:1280x720 layout:存盤布局檔案 mipmap:存盤原聲圖片資源 values:存盤app參考的一些值 - colors.xml: 存盤了一些color的樣式 - dimens.xml:存盤了一些公用的dp值 - strings.xml: 存盤了參考的string值 - styles.xml: 存盤了app需要用到的一些樣式
還有上圖幾個檔案夾 Nav_graph.xml為碎片導航布局檔案 Colors.xml為色彩編輯檔案 Dimens.xml為尺寸編輯檔案 Strings.xml為字符檔案 Themes.xml為作主題檔案 然后land、night、w600dp、w1240dp中的每個xml檔案中的dp值斗魚values目錄里面的不一樣
然后我們再來詳細說一下layout里面的檔案:
Fragment first和second類似:
RelativeLayout:相對布局, xmlns:android定義:android命名空間, xmlns:tools:tools命名空間,用來預覽一些布局屬性的添加喝洗掉后的效果, android:layout_width:指定了控制元件的寬度,可選擇match_parent,fill_parent,wrap_content,其中match_parent和fill_parent的意思相同,官方更加推薦使用match_parent,match_parent表示讓當前控制元件的大小和父布局的大小一樣,也就是由父布局來決定當前控制元件的大小,wrap_content表示讓當前控制元件的大小能夠剛好包含住里面的內容,也就是由控制元件內容決定當前控制元件的大小, android:layout_height:同上, Tools:context為工具背景 TextView:android的控制元件, android:text:textview顯示的內容,這里就是hello world了, layout constraint Bottom toTop Of:這個為布局約束從下到上 layout constraint End toEnd Of:這個為布局約束端到端 layout_constraintStart_toStartOf:這個為布局約束從開始到開始 layout_constraintTop_toTopOf:這個為布局約束從點到點 <button>為按鈕的意思,即為app運行是中間的按鈕 決議同上 然后是activity-_main.xml: 大致與上面xml檔案類似:
RelativeLayout:相對布局, xmlns:android定義:android命名空間, xmlns:tools:tools命名空間,用來預覽一些布局屬性的添加喝洗掉后的效果, android:layout_width:指定了控制元件的寬度,可選擇match_parent,fill_parent,wrap_content,其中match_parent和fill_parent的意思相同,官方更加推薦使用match_parent,match_parent表示讓當前控制元件的大小和父布局的大小一樣,也就是由父布局來決定當前控制元件的大小,wrap_content表示讓當前控制元件的大小能夠剛好包含住里面的內容,也就是由控制元件內容決定當前控制元件的大小, android:layout_height:同上, android:paddingLeft,android:paddingRight,android:paddingTop,android:paddingBottom:站在父view的角度描述問題,它規定它里面的內容必須與這個父view邊界的距離,此外還有margin,它是站在自己的角度描述問題,規定自己喝其他的view之間的距離,如果同一級只有一個view,那么它的效果基本上就和padding一樣了,
Content.main.xml基本部分也和上面三個xml檔案一樣,就不一一具體說明了 多了幾個部分 app:navGraph:為導航圖部分 defaultNavHost:為你默認的導航主機 layout_behavior:為布局行為 以上內容為Android studio的決議 | ||
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/309546.html
標籤:其他


















android閉包里面還有很多小包: 












