Android 入門 Gradle 安裝配置 Linux下安裝gradle 構建文件和創建任務 預設構建文件為 build.gradle, 構建是可使用 -b 替代 --build gradle -b <fileName> .gradle 文件夾存放的是 Gradle 的構建信息 Gradle 採用 ...
Android 入門
Gradle
安裝配置
構建文件和創建任務
- 預設構建文件為
build.gradle
, 構建是可使用-b
替代--build
gradle -b <fileName>
-
.gradle 文件夾存放的是
Gradle
的構建信息 -
Gradle
採用領域對象模型,每個Project
維護一個TaskContain
類的task
屬性,Taskl
代表需要執行的任務,允許指定依賴的任務、任務類型,可通過configure()
方法配置任務,提供了doFirst()
、doLast()
方法來添加Action
,Action
和Closure
對象都可代表Closure
對象都可以是Action
。 -
為
Gradle
構建文件創建Task
的常用方法- 調用
project.task()
- 調用
TaskContainer.crate()
無論使用哪種方式創建
Task
,通常都可為Task
指定以下3種屬性:-
dependsOn:指定
Task
所依賴的其它Task
-
type:指定該
Task
的類型 -
通過傳入的代碼塊參數配置
- 調用
-
Gradle
構建過程- 配置階段
- 按依賴關係執行指定
Task
-
Gradle
編譯過程
//應用名為java的插件,主要是為了引入JavaCompile、JavaExec兩個任務
apply plugin: 'java'
task compile(type:javaCompile){
source = filetree('src/main/java')
classpath = sourceSets.main.compileClassPath
destinationDir = file('build/classes/main')
options.fork = true
options.incremental = true
}
//指定任務類型為JavaExec
task run(type:JavaExec,dependsOn:'compile'){
classPath = sourceSets.main.runtimeClassPath
//指定主類為lee.HelloWorld
main = 'lee.HelloWorld'
}
編譯運行
gradle run
Gradle的屬性定義
1. 為屬性指定屬性值
//為Project內置屬性指定屬性值
version = 1.0.0
task showProps{
description = 'task'
}
Project 常用的屬性
- name:項目名稱
- path:項目絕對路徑
- description:項目描述路徑
- buildDir:項目的構建結果的存放路徑
- version: 項目版本號
2. 通過 ext 添加屬性
//使用ext方法傳入代碼來設置屬性
ext{
prop1 = 'prop1'
prop2 = 'prop2'
}
task showAddPros{
ext{
prop3 = 'prop3'
prop4 = 'prop4'
}
}
3. 通過-P選項添加屬性
gradle -P prop='prop-value' <task-name>
4. 通過JVM參數添加屬性
gradle -D org.gradle.project.prop= 'prop-value' <task-name>
增量式構建
Gradle
通過任務的輸入、輸出部分是否發生改變來判斷該任務是否需要重新執行,Task
使用TaskInputs
類型inputs
屬性來代表輸入,使用TaskOutputs
類型outPuts
屬性來代表輸出。
task fileContentCopy{
//定義代表source目錄的文件集
def sourceTxt = fileTree("source")
def dest = file('dest.txt')
//定義任務的輸入和輸出
inputs.dir sourceTxt //指定輸出目錄為sourceTxt
outputs.file dest //指定輸出目錄為dest
}
Gradle 插件機制
應用插件相當於引入了該插件包含的所有任務類型、任務、屬性等,這樣Gradle
就可以執行插件種預定義的任務。
apply plugin: <plugin-name>
#查看構建文件支持的所有任務
apply tasks --all
通過resource
項目添加第三方或額外的依賴源碼
//配置被依賴的源代碼路徑
sourceSets{
fkframework
}
Gradle
自動為為每個新建的sourceSets
創建相應的Task
,包括compilexxxJava
,processxxxResource
和xxxClasses
這三個Task
。
//配置compileJava任務依賴compilexxxJava任務
compileJava.dependsOn compilexxxJava
//將第三方項目位元組碼的存儲路徑添加到系統編譯時、運行時的類路徑中
sourceSets{
main{
compileClassPath = compileClassPath + files(xxx.output.classesDir)
}
test{
//將xxx生成的位元組碼文件的存儲路徑添加到運行時的類路徑中
runtimeClassPath = runtimeClassPath + files(xxx.output.classDir)
}
}
依賴管理
Gradle 配置依賴步驟:
- 為
Gradle
配置倉庫
//定義倉庫
reposities{
//使用Maven預設的中央倉庫
mavenCentral()
//使用遠程倉庫
url "http://repo2.maven.org/maven2"
//顯示指定本地磁碟路徑作為maven倉庫url
url "g:/abc"
}
- 為不同組配置依賴的
jar
包
//使用configurations配置組
configrations{
//配置名為xxx的依賴組
xxx
}
dependencies {
//配置依賴的jar包
//為xxx依賴組添加了commons-logging 1.2的jar包
xxx group: 'commons-logging',name:'commons-logging',version:'1.2'
//簡寫
xxx 'commons-logging:commons-logging:1.2'
}
ADB
常用命令:
#查看當前運行的模擬器
abd devices
#電腦與手機之間文件的相互複製
abd push <file-path> <targer-path>
#啟動模擬器的shell視窗
adb shell
#安裝、卸載APK程式
adb install [-r] [-s] <file>
#卸載APK程式
adb uninstatll [-k] <file>
開發Android應用
開發流程
- 創建項目
- 編寫佈局文件
- 編寫
java
邏輯代碼
項目結構
AndroidMainfest.xml
文件主要內容:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.topwisesz.helloworldapp">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.HelloWorldApp"
tools:targetApi="31">
<!--定義一個Android應用的一個組件-->
<activity android:name=".MainActivity"
android:exported="true">
<intent-filter>
<!--制定該Activity是程式入口-->
<action android:name="android.intent.action.MAIN" />
<!--制定運行時載入該應用時運行該Activity-->
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Android基本組件
常用組件:VIew、Activity、Service、BroadcastReceiver、ContentProvider、Intent、IntentFilter
四大組件:Activity、Service、BroadcastReceiver、ContentProvider
View和Activity
View
是所有UI
控制項的基類,Activity
用於顯示View
//創建一個線性佈局管理器
LinearLayout linearLayout = new LinearLayout(this);
//設置該Activity顯示線性佈局
setContentView(linearLayout);
//設置該Activity顯示在main.xml定義的view
setContentView(R.layout.main);
BroadcastReceiver
BroadcastReceiver
類似於一個全局監聽器,用於接受廣播消息
使用BroadcastReceiver
接受消息步驟:
- 繼承BroadcastReceiver重寫OnReceive()方法
public class DefineBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("接受消息");
}
}
- 發送廣播消息
sendBroadcast();
sendstickBroadcast();
sendOrderedcast();
- 通過
Intentfilter
配置BroadcastReceiver
需接受的消息 - 註冊
BroadcastReceiver
- 通過代碼
Context.registReceiver()
方法註冊BroadcastReciver
- 在
AndroidMainfest.xml
文件中使用<receiver.../>
元素完成註冊
- 通過代碼
ContentProvider
ContentProvider
可以實現不同應用之間的數據交換
//插入數據
insert(url,contentValues)
//刪除指定數據
delete(url,contentValues)
//更新指定數據
update(url,contentValues,String,String[])
//查詢數據
query(url,String[],String,String[],String)
Intent和IntentFilter
Intent
作為Android
應用內不同之間通信的載體,Activity
、Service
、BroadcastReceiver
三種組件都是以Intent
作為通信主題;
//啟動Activity
context.startActivity(Intent intent);
context.startActivityForResult(Intent intent, int requestCode);
//啟動Service
context.startService(Intent intent);
bindService(Intent service,ServiceConnection conn,int flags);
//啟動BroadcastReceiver
sendBroadcast(Intent intent);
sendStickyBroadcast(Intent intent);
- 顯式
Intent
:明確指定需要啟動或觸發的組件應滿足的類名 - 隱式
Intent
:只是指定需要啟動或觸發的組件應滿足的條件
IntentFilter
用於聲明Intent
所滿足的條件。