Gradle 使用技巧(一)

傲寒遙發表於2018-08-22

前言

Gradle是使用Groovy語言構建,所以既然是語言,那麼就有他的語法,而不是簡單的配置項。關於Gradle有時間會出一系列的文章。

1. 自定義apk輸出名稱 (3.0)

本配置為Android studio3.0及以上的配置,3.0以下版本適用,下面的配置會將所有的Variants都輸出。

// 便利所有的Variants,all是迭代遍歷操作符,相當於for
applicationVariants.all { variant ->// 遍歷得出所有的variant
	variant.outputs.all {// 遍歷所有的輸出型別,一般是debug和replease
		// 定義apk的名字,拼接variant的版本號
		def apkName = "app_${variant.versionName}"
		// 判斷是否為空
		if (!variant.flavorName.isEmpty()) {
			apkName += "_${variant.flavorName}"
		}
		// 賦值屬性
		outputFileName = apkName + ".apk"
	}
}
複製程式碼

配置到buildTypes的release和debug下面

Gradle配置輸出APK名稱.png

2. 配置簽名

我們在使用百度地圖和微信相關的API的時候,是需要我們填入相關的的app簽名進行校驗後才能進行操作,而預設我們在除錯模式下使用的是AS為我們提供的android.keystore,所幸,Gradle為我們提供了相關的方法,我們可以為debug和release指定金鑰檔案和前面。我們需要先在app.gradle的android節點做做相關的配置。

2.1 配置簽名資訊

android{
	...
	signingConfigs {
		debug {
			try {
				storeFile file("../簽名檔案.jks")
				storePassword "密碼"
				keyAlias "別名"
				keyPassword "密碼"
				v1SigningEnabled true
				v2SigningEnabled false
			}
			catch (ex) {
				ex.printStackTrace()
				throw new InvalidUserDataException("祕鑰使用者名稱或密碼錯誤${ex.getMessage()}")
			}
		}
		release {
			try {
				storeFile file("../簽名檔案.jks")
				storePassword "密碼"
				keyAlias "別名"
				keyPassword "密碼"
				v1SigningEnabled true
				v2SigningEnabled false
			}
			catch (ex) {
				throw new InvalidUserDataException("祕鑰使用者名稱或密碼錯誤")
			}
		}
	}
	...
}
複製程式碼
  • signingConfigs 是處於android節點中
  • 這裡需要注意的是storeFile的路徑是指當前app.gradle的相對路徑。
  • 關於v1SigningEnabled和v2SigningEnabled
    • APK Signature Scheme v2是Android 7.0 引入一項新的應用簽名方案 APK Signature Scheme v2,它能提供更快的應用安裝時間和更多針對未授權 APK 檔案更改的保護。一般情況下都會選擇關閉。

2.2 在相應的buildTypes中指定簽名

buildTypes{
	release{
		signingConfig signingConfigs.release
		...
	}
	debug{
		signingConfig signingConfigs.debug
		...
	}
}
複製程式碼

雖然不指定這一步,我們依然能夠正常執行,但是為了出不必要的么蛾子,我們還是把它加上吧。

3. release和debug設定全域性變數

3.1 全域性debug開關

寫程式就會要有log,有log我們就需要在打release包的時候就需要手動的設定debug開關為false,但是在某些情況下我們可能會忘記關閉的。所以可以選擇在gradle中通過buildConfigField定義變數,然後再需要的時候直接進行引用。

buildTypes {
	release {
		...
		buildConfigField "boolean", "isDebug", "false"
		...
	}
	debug {
	...
		buildConfigField "boolean", "isDebug", "true"
	...
	}
}
複製程式碼

以上,我們在兩種模式中都建立了一個叫做isDebug的布林值的變數,根據型別不同設定值,然後需要重新編譯一下。 編譯完成後直接呼叫BuildConfig.isDebug作為開關設定即可

Debug開關.png

關於BuildConfig的內容,可以看下面的截圖

BuildCofig資訊.png

3.2 API地址的配置

既然有了全域性debug開關的設定,那麼就肯定有這麼一個需求:debug和release下使用不同的API請求地址,其實也就是和前面一個套路,直接通過buildConfigField定義變數。

buildTypes {
	release {
		...
		buildConfigField "boolean", "isDebug", "false"
		buildConfigField "String", "API", "http://192.168.1.1/release"
		...
	}
	debug {
	...
		buildConfigField "boolean", "isDebug", "true"
		buildConfigField "String", "API", "\"http://192.168.1.1/debug\""
	...
	}
}
複製程式碼

String型別一定要記得加雙引用轉義。 String型別一定要記得加雙引用轉義。 String型別一定要記得加雙引用轉義。

配置API地址.png

後續敬請期待! 免為其難的關注一下公眾號吧!!

生活實在是太苦啦

FullScreenDeveloper

相關文章