Gradle 是一個開源構(gòu)建自動化工具谢鹊,其設(shè)計(jì)足夠靈活,可以構(gòu)建幾乎任何類型的軟件 介紹
由于Android項(xiàng)目是諸多內(nèi)容的整合, 所以在編譯Android項(xiàng)目時(shí)也需要具備多種環(huán)境:
1双谆、JDK環(huán)境
因?yàn)镚radle 在 JVM 上運(yùn)行返干,您必須安裝 Java 開發(fā)工具包 (JDK) 才能使用它
下載jdk https://jdk.java.net/ 查看下載結(jié)果執(zhí)行 java -version 輸出jdk版本
build.gradle配置jdk環(huán)境
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
2兴枯、Gradle工具和插件環(huán)境
安裝Gradle 參考 https://docs.gradle.org/current/userguide/installation.html
build.gradle配置gradle插件
buildscript {
repositories {
maven { url 'http://sdk.pt.miui.com/miuisdk/maven2/' }
maven { url 'http://sdk.pt.miui.com/miuisdk/miuix/' }
maven { url 'http://artifactory.d.xiaomi.net/artifactory/artifactory-releases/' }
google()
mavenCentral()
}
dependencies {
classpath 'com.miui.tools.build:gradle:3.4.0'
}
}
Wrapper 是一個腳本,它調(diào)用已聲明的 Gradle 版本,可以快速啟動并運(yùn)行 Gradle 項(xiàng)目矩欠,而無需遵循手動安裝過程
使用wrapper好處:
- 在給定的 Gradle 版本上標(biāo)準(zhǔn)化項(xiàng)目财剖,從而產(chǎn)生更可靠和更健壯的構(gòu)建。
- 為不同的用戶和執(zhí)行環(huán)境(例如 IDE 或持續(xù)集成服務(wù)器)提供新的 Gradle 版本就像更改 Wrapper 定義一樣簡單癌淮。
添加 Gradle wrapper
執(zhí)行 gradle wrapper
// 升級 Wrapper 版本
執(zhí)行 ./gradlew wrapper --gradle-version 7.4.2
成功后形成如下結(jié)構(gòu)
├── a-subproject
│ └── build.gradle
├── settings.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat
gradle-wrapper.properties
1躺坟、distributionUrl是要使用版本的gradle的地址 官方倉庫
gradle的3種版本:
gradle-xx-all.zip是完整版,包含了各種二進(jìn)制文件该默,源代碼文件瞳氓,和離線的文檔。例如栓袖,https://services.gradle.org/distributions/gradle-3.1-all.zip
gradle-xx-bin.zip是二進(jìn)制版匣摘,只包含了二進(jìn)制文件(可執(zhí)行文件),沒有文檔和源代碼裹刮。例如音榜,https://services.gradle.org/distributions/gradle-3.1-bin.zip
gradle-xx-src.zip是源碼版,只包含了Gradle源代碼捧弃,不能用來編譯你的工程赠叼。例如擦囊,https://services.gradle.org/distributions/gradle-3.1-src.zip
2、zipStoreBase和zipStorePath組合在一起嘴办,是下載的gradle-3.1-bin.zip所存放的位置瞬场。
zipStorePath是zipStoreBase指定的目錄下的子目錄。
3涧郊、distributionBase和distributionPath組合在一起贯被,是解壓gradle.zip之后的文件的存放位置
distributionPath是distributionBase指定的目錄下的子目錄。
4妆艘、zipStoreBase和distributionBase有兩種取值:GRADLE_USER_HOME和PROJECT彤灶。
其中,GRADLE_USER_HOME表示用戶目錄批旺。
在windows下是%USERPROFILE%/.gradle幌陕,例如C:\Users<user_name>.gradle\。
在linux下是$HOME/.gradle汽煮,例如~/.gradle搏熄。
PROJECT表示工程的當(dāng)前目錄,即gradlew所在的目錄逗物。
gradlew搬卒、gradlew.bat
gradlew.bat 是bat 腳本,Windows 用戶可以通過它執(zhí)行 Gradle 任務(wù)翎卓,配合gradle文件夾使用。
gradlew是一個shell 腳本摆寄,Unix Linux通過它來執(zhí)行 Gradle 任務(wù)失暴。
更多指南 參考 wrapper
gradle api https://docs.gradle.org/current/javadoc/index.html?overview-summary.html
android gradle plugin api https://developer.android.com/reference/tools/gradle-api
3、Android環(huán)境
運(yùn)行android項(xiàng)目, 需要設(shè)定好Android SDK
local.properties用于配置本地Android SDK目錄, 即Android環(huán)境
sdk.dir="你本地的sdk目錄"
如果本地沒有Android SDK , 參考下面文檔進(jìn)行下載
下載Android IDE IDE指南 更新 IDE 和 SDK 工具 命令行更新sdk
4微饥、NDK環(huán)境
http://www.reibang.com/p/8930df7a82b2
5逗扒、Q&A
- 執(zhí)行./gradlew報(bào)錯 "沒有那個文件或目錄"
解決辦法: 執(zhí)行g(shù)radle init, 此時(shí)生成了gradle編譯所必須的成員
- 執(zhí)行./gradlew build報(bào)錯 "找不到或無法加載主類"
解決辦法: 執(zhí)行g(shù)radle wrapper
- JDK環(huán)境報(bào)錯 "java version"
修改編譯環(huán)境為jdk1.8
- 執(zhí)行完gradle wrapper后, 執(zhí)行命令可能報(bào)錯 "gradle version"
解決辦法: 修改gradle版本
distributionUrl=https://services.gradle.org/distributions/gradle-6.1.1-all.zip
- 沒有g(shù)radle-wrapper.properties報(bào)錯
Exception in thread "main" java.lang.RuntimeException: Wrapper properties file '/media/duchao/worK/packages/apps/MiRcs/project/gradle/wrapper/gradle-wrapper.properties' does not exist.
at org.gradle.wrapper.WrapperExecutor.forWrapperPropertiesFile(WrapperExecutor.java:45)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:60)
解決辦法: 下載成員壓縮包, 放入gradle目錄
- 未配置Android sdk報(bào)錯
* What went wrong:
> SDK location not found. Define location with an ANDROID_SDK_ROOT environment variable or by setting the sdk.dir path in your project's local properties file at '/media/duchao/worK/packages/apps/MiRcs/project/local.properties'.
解決辦法: 見local.properties