[TOC]
# 1. 說明
在運行`gradlew assemble`的時候,出現了`gradle`的官網:[Gradle User Manual](https://docs.gradle.org/current/userguide/userguide.html)
下面就簡單來學習一下。簡介:
* `Gradle`是一個開源自動構建工具,關注于靈活性和性能,通常使用`Groovy`或者`Kotlin`編寫;
* 特點有:高定制性,更快,更有效。
`Gradle`支持很多`IDE`,包括:**Android Studio, Eclipse, IntelliJ IDEA, Visual Studio 2019, and XCode**。甚至可以直接使用命令行模式來執行。因為這里所需要的是`Android Studio`中的相關運用,所以這里可以參考文檔:[Building Android Apps Sample](https://docs.gradle.org/current/samples/sample_building_android_apps.html)。
## 1.1 本地安裝Gradle
為了方便之后的使用,這里本地在環境變量中配置一個`Gradle`,版本為`7.2`:

下載地址:[Gradle | Releases](https://gradle.org/releases/)
解壓到任意目錄:

然后配置環境變量即可,添加目錄:`D:\softwares\Android\gradle-7.2-bin\gradle-7.2\bin`到用戶`Path`即可。
## 1.2 構建本地倉庫
在應用的`build.gradle`文件中默認配置為:
~~~
allprojects {
repositories {
google()
jcenter()
}
}
~~~
而,`google`和`jcenter`均位于國外,且`jcenter`倉庫自去年起就不再提供服務了。在我的博客:[# 上傳Android library到JitPack](https://blog.csdn.net/qq_26460841/article/details/121478497)一文中也提到了我們可以將自己的工具發布到第三方庫,然后方便自己的使用。但總體來說比較麻煩,而且有些庫因為還沒有開發穩定,也不想發布到公開平臺。所以處于如下原因我們可能需要自己構建一個倉庫:
* 速度!因為`google`位于國外,即使使用了阿里的鏡像,但是還是每次需要下載,就略慢;
* 方便!方便本地自己引入一個自己所需要的庫,而不需要增大項目的額外成本;
### 1.2.1 常見鏡像地址
```
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://repo.huaweicloud.com/repository/maven' }
maven { url 'https://jitpack.io' }
mavenCentral()
google()
jcenter()
}
}
```
### 1.2.2 使用Artifactory構建本地倉庫
構建本地倉庫可選:`nexus`或者`Artifactory`。這里使用`Artifactory`來完成。下載地址:[Downloads](https://releases.jfrog.io/artifactory/bintray-artifactory/org/artifactory/oss/jfrog-artifactory-oss/)
解壓下載好的安裝包,打開解壓后文件夾下的`bin`文件夾,運行`artifactory.bat`,然后等待安裝完成。

訪問地址:[http://localhost:8082/ui/login/](http://localhost:8082/ui/login/)
登錄:

然后,就可以設置一下遠程倉庫地址,這里我使用阿里云提供的鏡像地址:[倉庫服務 (aliyun.com)](https://developer.aliyun.com/mvn/guide)。常見對應關系:
| 倉庫名稱 | 阿里云倉庫地址 | 阿里云倉庫地址(老版) | 源地址 |
| --- | --- | --- | --- |
| centra | https://maven.aliyun.com/repository/centra | https://maven.aliyun.com/nexus/content/repositories/centra | https://repo1.maven.org/maven2/ |
|jcenter|https://maven.aliyun.com/repository/public | https://maven.aliyun.com/nexus/content/repositories/jcenter | http://jcenter.bintray.com/|
|public|https://maven.aliyun.com/repository/public|https://maven.aliyun.com/nexus/content/groups/public|central倉和jcenter倉的聚合倉|
|google| https://maven.aliyun.com/repository/google | https://maven.aliyun.com/nexus/content/repositories/google | https://maven.google.com/|
然后在后天添加遠程倉庫:

也就是添加上面的四個即可,當然在選擇的時候選擇`Maven`。然后就可以創建一個本地倉庫,供我們項目中直接使用。還是在`Repositories`選項卡,選擇`local`,創建一個`android_local`的倉庫:

提交后,就可以看見剛剛創建的`android_local`倉庫:

然后創建一個虛擬倉庫,還是選擇`Maven`,然后指定名字為`android_group`,并將所有可用的倉庫移動到`selected repositories`中,如下圖:

然后我們就可以在我們的應用中只使用這個虛擬倉庫,在控制臺可以找到其映射地址:

也就是:
```
http://localhost:8082/artifactory/android_group/
```
但是很不幸,通過瀏覽器訪問發現需要用戶名和密碼:

當然,我們通過瀏覽器可以輸入前面的用戶名和密碼來訪問,但是一般在作為倉庫使用的時候,我們都需要配置匿名才行。故而這里還需要繼續進行配置。也就是允許匿名訪問:

正如上圖所示,默認是不支持的,這里需要勾選,然后保存即可。
然后在`gradle-wrapper.properties`文件中配置`gradle`文件,因為在前面已經下載過`gradle-7.2`,所以這里本地倉庫中直接使用這個,在控制臺進行上傳:

選擇帶上傳圖標的`Deploy`進行上傳。當然,首先設置一下上傳文件大小,因為在`General->settings`中:

所默認的上傳大小為100MB這里修改為1024MB,即:

然后再次回到`android_local`倉庫,進行上傳文件:

點擊剛上傳的這個文件,就可以看到文件的URL地址:

也就是:
```
http://localhost:8082/artifactory/android_local/gradle-7.2-bin.zip
```
所以,我們在`gradle-wrapper.properties`文件中配置的為:
~~~
distributionUrl=http\://localhost:8082/artifactory/android_local/gradle-7.2-bin.zip
~~~
對應的:

注意到上圖中`http`有黃色警告,也就是最好使用`https`的鏈接,這里我們忽略。對應的配置`repositories`地址,如下。找到項目的`build.gradle`文件,原配置文件為:
~~~
buildscript {
ext.kotlin_version = "1.4.32"
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
~~~
修改后:
~~~
buildscript {
ext.kotlin_version = "1.4.32"
repositories {
maven {
url 'http://localhost:8082/artifactory/android_group/'
}
// google()
// jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30"
}
}
allprojects {
repositories {
maven {
url 'http://localhost:8082/artifactory/android_group/'
}
}
}
~~~
但是很不幸這里構建失敗。也就是其實不支持`Http`協議的,這里可以配置一個允許命令即:
~~~
maven {
allowInsecureProtocol true
url 'http://localhost:8082/artifactory/android_group/'
}
~~~
然后進行同步,可以看見:

然后第二次同步的時候,明顯看到時間上的提升:

- 介紹
- UI
- MaterialButton
- MaterialButtonToggleGroup
- 字體相關設置
- Material Design
- Toolbar
- 下拉刷新
- 可折疊式標題欄
- 懸浮按鈕
- 滑動菜單DrawerLayout
- NavigationView
- 可交互提示
- CoordinatorLayout
- 卡片式布局
- 搜索框SearchView
- 自定義View
- 簡單封裝單選
- RecyclerView
- xml設置點擊樣式
- adb
- 連接真機
- 小技巧
- 通過字符串ID獲取資源
- 自定義View組件
- 使用系統控件重新組合
- 旋轉菜單
- 輪播圖
- 下拉輸入框
- 自定義VIew
- 圖片組合的開關按鈕
- 自定義ViewPager
- 聯系人快速索引案例
- 使用ListView定義側滑菜單
- 下拉粘黏效果
- 滑動沖突
- 滑動沖突之非同向沖突
- onMeasure
- 繪制字體
- 設置畫筆Paint
- 貝賽爾曲線
- Invalidate和PostInvalidate
- super.onTouchEvent(event)?
- setShadowLayer與陰影效果
- Shader
- ImageView的scaleType屬性
- 漸變
- LinearGradient
- 圖像混合模式
- PorterDuffXfermode
- 橡皮擦效果
- Matrix
- 離屏繪制
- Canvas和圖層
- Canvas簡介
- Canvas中常用操作總結
- Shape
- 圓角屬性
- Android常見動畫
- Android動畫簡介
- View動畫
- 自定義View動畫
- View動畫的特殊使用場景
- LayoutAnimation
- Activity的切換轉場效果
- 屬性動畫
- 幀動畫
- 屬性動畫監聽
- 插值器和估值器
- 工具
- dp和px的轉換
- 獲取屏幕寬高
- JNI
- javah命令
- C和Java相互調用
- WebView
- Android Studio快捷鍵
- Bitmap和Drawable圖像
- Bitmap簡要介紹
- 圖片縮放和裁剪效果
- 創建指定顏色的Bitmap圖像
- Gradle本地倉庫
- Gradle小技巧
- RxJava+Okhttp+Retrofit構建網絡模塊
- 服務器相關配置
- node環境配置
- 3D特效