Gradle 學習 一
android的目錄結構裏面
項目下的 (1)gradle文件夾 其實是gradle這個工具的架包和它的版本號信息
項目下的(2)build.gradle 文件主要是用運用gradle語言來引入針對android的gradle的插件和一些android需要的依賴倉庫,gradle和android gradle 有區別
項目下app文件夾下的(3)build.gradle 是運用android的gradle的插件對工程的編譯配置和一些架包的依賴引用
app build.gradle
1) apply plugin 領域
apply plugin: 'com.android.application' //表示這是一個應用,同時應用的是這個編譯application的插件 apply plugin: 'com.android.library' //表示這是一個library,同時應用的是這個編譯library的插件
2) android 閉包領域
compileSdkVersion 編譯的sdk版本 buildToolsVersion 編譯工具版本 其實這兩個不衝突 還有其它 附表
3) dependencies 閉包領域
compile fileTree (dir: ‘libs’, include: *.jar)
把libs文件夾裏面的後綴.jar都依賴編譯了
當然如果你任性刪了,也可以的,你可以單獨的引用
compile files(‘libs/xxx.jar’)
當然這是比較任性的人
compile ‘com.android.support:appcompat-v7:25.2.0’
這是當年,忽悠我用as人說的,引用網絡jar方便,確實方便,就是這麼簡單的一句代碼\ androidTestCompile
測試的東西,我也不懂,沒用過,用過再裝逼.
testCompile
同上
local.properties
本地化適應的屬性 寫入ndk和sdk 的安裝路徑
ndk.dir=/usr/android-ndk-r10c sdk.dir=/home/caoyang/Android/Sdk
gradlew aR=assembleRelease
相見恨晚啊
直接使用gradle +一些任務名 沒有安裝gradle 使用gradlew+任務名
以前聽大神說的gradle編程多牛逼吶原來原理就這兩句啊
gradlew clean clean的功能
gradlew build build的功能
gradlew task 查看所有的任務
很多不再列舉 在android studio 右側邊欄(gradle projects)中 列舉也有
全局變量的引用
//根目錄下的gradle.build中第一層加如變量 ext { cs = 26 } //在app目錄下的gradle.build或者library目錄下的gradle.build中可以引用 compileSdkVersion rootProject.ext.cs
方法引用
可以動態配置一些參數
//方法定義 def getVc() { return 1; } //方法引用 versionCode getVc()
android gradle 官方網址 各個閉包領域解讀 不翻牆打不開
buildTypes 閉包領域 生成不同類型的apk的配置
release {//正常情況下就這一個 minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } ttt {//自定義 applicationIdSuffix ".ttt" //正常的包名後加後綴 可區分app minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } //或者 ttt.initWith(buildTypes.release) //繼承release的屬性 ttt { applicationIdSuffix ".ttt" } //通過gradlew build 命令行或者在as中選擇 頂部導航欄 Build->Build apk //可在app/build/output/apk/文件夾中查看生成的apk文件 不過都是未簽名的請注
一些其他感覺有用的屬性
applicationIdSuffix | 正常的包名後加後綴 |
---|---|
packageNameSuffix | 已經過時了和 applicationIdSuffix效果一致 |
signingConfig | 簽名配置,React Native 打包使用這種方式,配置打包信息 |
debuggable | 是否可以debug ??? |
Error:(24, 0) Could not find method packageNameSuffix() for arguments [aaa] on BuildType_Decorated{name=ttt, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscriptDebuggable=false, renderscriptOptimLevel=3, minifyEnabled=false, zipAlignEnabled=true, signingConfig=null, embedMicroApp=true, mBuildConfigFields={}, mResValues={}, mProguardFiles=[/home/caoyang/AndroidStudioProjects/CTest/build/intermediates/proguard-files/proguard-android.txt-2.3.3, /home/caoyang/AndroidStudioProjects/CTest/app/proguard-rules.pro], mConsumerProguardFiles=[], mManifestPlaceholders={}} of type com.android.build.gradle.internal.dsl.BuildType.
報的錯,裏面的屬性集合可以一看
signingConfig 閉包領域配置
以RN爲例
//定義一個signingConfigs集合 signingConfigs { release { storeFile file("key.jks") storePassword "123456" keyAlias "xys" keyPassword "123456" } //可在gradle.properties文件中定義 //MYAPP_RELEASE_STORE_FILE=key.jks //MYAPP_RELEASE_KEY_ALIAS=123456 //MYAPP_RELEASE_STORE_PASSWORD=xys //MYAPP_RELEASE_KEY_PASSWORD=123456 release2 { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } //在buildTypes中引用 buildTypes { release { minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" signingConfig signingConfigs.release } }
compileOptions
compileOptions{ sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } //有坑 感覺不用這樣就可以使用,雞肋
lintOptions
lintOptions{ //語法拼寫檢查配置 abortOnError false //在發生語法錯誤不拋出,編譯文件時 }