1. 程式人生 > >Gradle快速構建(一)AS專案構建配置進階

Gradle快速構建(一)AS專案構建配置進階

用Gradle構建Android Studio專案,預設會有一個基礎配置,那麼在這個基礎上,我們通過將變數聚合在一起,既明瞭又簡潔。

文章目錄

一、配置原始碼編譯路徑

我們都知道,AS會有預設的原始碼編譯路徑,比如java的在main/java下,.so庫的引用在main/jniLibs下,如下修改它的引用地址:

配置資源目錄

學會配置資源編譯路徑,在jni的庫和src編譯路徑,馬甲包的編譯等非常實用

android {
    sourceSets.main {
        //預設是jniLibs,修改為libs目錄
        jniLibs.srcDir 'src/main/libs'
        //disable automatic ndk-build call
        //當手動編寫NDK編譯指令時設定
        jni.srcDirs = [] 
        manifest.srcFile 'src/main/AndroidManifest.xml'
        java.srcDirs = ['src/main/java']
        resources.srcDirs = ['src/main/resources']
        aidl.srcDirs = ['src/main/aidl']
        renderscript.srcDirs = ['src/main/renderscript']
        res.srcDirs = ['src/main/res']
        assets.srcDirs = ['src/main/assets']
    }
}

二、配置編譯版本和依賴版本為全域性變數

通常我們構建一個上線專案必定包含多個Modules和第三方庫的依賴,有時候依賴或者編譯版本衝突時,手動改,很麻煩,一個自動化的專案,必定需要統一配置,以下通過一個gradle全域性的配置來實現這個操作。

  • 我們在主工程目錄App: build.gradle中配置全域性的版本引數

      ext {
      	supportLibVersion = '27.0.1'  // variable that can be referenced to keep support libs consistent
      	versionBuildTool = '27.0.3'
      	versionCompiler = 27
      	versionTarget = 27
      	versionNameString = '1.0.0'
      	javaSourceCompatibility = JavaVersion.VERSION_1_8
      	javaTargetCompatibility = JavaVersion.VERSION_1_8
      }
    
  • 在Modules的build.gradle中使用

      android {
      	compileSdkVersion versionCompiler
      	buildToolsVersion versionBuildTool
      	//指定java版本和配置屬性
      	compileOptions {
      		sourceCompatibility javaSourceCompatibility
      		targetCompatibility javaTargetCompatibility
      	}
      
      	defaultConfig {
      		applicationId "com.xxx.xxx"
      		minSdkVersion 18
      		targetSdkVersion versionTarget
      		versionCode 1
      		versionName versionNameString
      		testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
      	}
      	//----------忽略部分
      }
      
      dependencies {
      	api fileTree(dir: 'libs', include: ['*.jar'])
      
      	implementation "com.android.support:support-v4:${supportLibVersion}"
      	implementation "com.android.support:support-annotations:${supportLibVersion}"
      }
    

三、打包相關的一些配置

  • 其中shrinkResources在我測試看來效果並不明顯,如果release工程釋出,可以用【Refactor】選項【Remove Unused Resources】,在編譯前移除

      buildTypes {
          release {{//打release包
      		shrinkResources true  // 檢查並移除無用res檔案,縮小apk
      		zipAlignEnabled true  // Zipalign優化,壓縮效率高一些
              minifyEnabled true   //是否混淆
      		//指定混淆檔案
              proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
      		debuggable false  //是否debug模式
      		jniDebuggable true //指定jni是否debug模式打包
          }
      	debug {//打debug包
      	}
      }
    

四、Gradle編譯相容性配置

1. lint檢查

通過新增lintOptons宣告,配置編譯時一些不重要報錯打斷編譯問題(個人不建議新增,因為欠債要還,不規範的地方總會有爆發的一天)

lintOptions {
	/** Whether lint should set the exit code of the process if errors are found */
    abortOnError false  //報錯打斷編譯選項
     /**
	 * Returns whether lint should check for fatal errors during release builds. Default is true.
	 * If issues with severity "fatal" are found, the release build is aborted.
	 */
    checkReleaseBuilds false   //release編譯時檢查
   
}

2. 依賴倉庫

通過gradle我們方便的使用依賴包,但如同一起eclipse使用maven倉庫時一樣,我們在配置gradle的時也要宣告Lib倉庫。

在project下的build.gradle中宣告:

buildscript {
    repositories {
        google()
        jcenter()
		//mavenCentral()  使用maven倉庫的話,各有各的庫,可能都有,看自己配置
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0-alpha13'       

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}