用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
}