Android開發基礎
Android的系統架構是Linux內核層,系統運行庫,應用框架層,應用層。
1、linux內核層提供瞭各種驅動,比如藍牙驅動,WiFi驅動,照相驅動等
2、系統運行庫通過一些c/c++庫為Android提供瞭一些主要的特性支持,還包含瞭虛擬機5.0之前Dalvik之後ART,,使每一個Android應用都能運行在獨立的進程之中。
3、應用框架層提供瞭一些構建應用是可能用到的各種API。
4、應用層所有安裝在手機上的應用程序都屬於這一層。
活動(Activity),服務(service),內容提供者(content provider),廣播接收器(broadcast Receiver)
1、活動是顯示在前面的界面,
2、服務是在後臺運行的,
3、內容提供者應用程序之間共享數據,
4、廣播接收器應用接收廣播消息電話短信等。
我的電腦上安裝的是Android Studio 2.3版本,不過我好像在哪裡看到說Android Studio已經更新到3.0版本瞭,功能更加好用瞭。想安裝3.0版本呢,看著圖標不好看不安瞭。
開始第一個Anroid程序helloworld
AppCompatActivity是Activity的子類,為瞭實現兼容。onCreat方法創建時必須被執行的方法。setContentView引入瞭佈局文件activity_hello_world。
package com.example.gxx.helloword; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class HelloWorldActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hello_world); } }
自動生成的代碼,xml代碼
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools" android:id="@+id/activity_hello_world" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.gxx.helloword.HelloWorldActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!"/> </RelativeLayout>
可直接運行到模擬器上或者手機上,我的模擬器很慢,我就直接運行到手機上瞭。很簡單的就是隻有一個Hello World
分析項目結構時間
1、.gradle 和.idea是系統自動生成的不用管的代碼不用動。
2、app自己主要在這個地方寫代碼,
3、build包含在編譯時自動生成的文件。
4、.gitignore指定的目錄或文件排除在版本控制之外的。
5、build.gradle項目全局的構建gradle腳本。
6、gradle.propperties是gradle的配置文件,將影響gradle的編譯。
7、gradlew和gradlew.bat是在命令行中執行gradle命令。
8、MyApplication.impl文件自動生成,無需修改。
9、local.properties指定本機中的sdk路徑。
10、settings.gradle指定項目中的引入模塊。
app結構下是我們寫代碼的重點,
build目錄和外層build目錄相似自動生成,無需多管。
libs放第三方jar包,自動添加到構建路徑裡面。
Android Test自動化測試用例,對項目進行自動化測試。
java放置java代碼的地方。
res放置放置圖片佈局和字符串的地方。
AndroidMainfest.xml放置Android項目的配置文件,四大組件都需要在這裡註冊。
test自動化測試的另一種方式。
.gitignore作用和外層的.gitignore一樣,將指定的文件和目錄排除在版本控制之外。
app.impl自動生成,無需關心和修改。
build.gradle指定項目中相關的構建配置。
proguard-rules.pro代碼混淆規則。
分析AndroidMainfest.xml文件
下面這段代碼是activity這個活動進行註冊沒有註冊的活動時不能使用的。
<activity android:name=".HelloWorldActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/>//表示是HelloWorldActivity是該項目的主活動,點擊圖標啟動的首先展示的是該活動。 <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>
分析res文件夾
1、drawable文件夾放圖片。
2、mipmap放圖標
3、values用來放字符串,樣式,顏色配置等。
例子res/values/string.xml文件夾下的
<resources> <string name="app_name">Hello_Word</string> </resources>
可以有兩種方式使用在代碼中R.String.helloworld,在xml文件中 @String/hello_world
解讀build.gradle
gradle是一個非常先進的項目構建工具,在helloworld項目中有兩個gradle文件,先看外部的
buildscript { repositories { jcenter()//開源代碼管理倉庫,聲明這行配置之後,項目中就可以使用任何jcenter上的項目瞭 } dependencies { classpath 'com.android.tools.build:gradle:2.2.0'//聲明使用的gradle插件版本號我的是2.2.0 // NOTE: Do not place your application dependencies here; they belong // in the inpidual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
通常不需要修改以上內容,除非添加一些全局的項目構建配置
內部的build.gradle文件
apply plugin: 'com.android.application'//或者library應用程序模塊和庫模塊的最大區別就是前者是直接運行的後者是依賴別的應用程序運行的 android { compileSdkVersion 25 //指定項目的編譯版本 buildToolsVersion "25.0.2"//項目構建工具的版本 defaultConfig { applicationId "com.example.gxx.helloword"//項目的包名 minSdkVersion 15//最低兼容版本 targetSdkVersion 25//主要版本 versionCode 1//項目版本號 versionName "1.0"//項目版本名 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes {//指定生成相關安裝文件的配置 debug和release兩種 生成測試版本和正式版本的安裝文件的配置debug可以忽略不寫 release { minifyEnabled false//不對代碼進行混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆規則 } } } dependencies {//指定當前項目的依賴關系庫依賴本地依賴遠程依賴 本地依賴對於本地jar包添加依賴關系 庫依賴對於項目中的庫添加依賴關系 遠程依賴 對於jcenter上的開源庫添加依賴 compile fileTree(dir: 'libs', include: ['*.jar'])//本地依賴libs下的所有.jar文件都添加到構建路徑當中 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.2.0'//遠程依賴 testCompile 'junit:junit:4.12' }
gradle在項目構建時,會先檢查本地是否有緩存,沒有的話去聯網下載,然後添加到項目的構建路徑當中