关于grade基本配置,前面已经有四篇文章了,
1. Android 项目实例config.gradle配置
2.使用gradle的productFlavors实现Android项目多渠道打包
3.使用gradle实现Android项目debug版与release版共存
完整Android项目grade配置:
- 项目根目录config.gradle(新建)
ext {
//这里的ext是必须的
android = [
compileSdkVersion : 25,
buildToolsVersion : '25.0.0',
applicationId : 'com.alpha.alphaapp',
minSdkVersion : 17,
targetSdkVersion : 25,
versionCode : 1,
versionName : 'v 1.1.0',
//这两个可以不用
defaultPublishConfig: 'release',
publishNonDefault : true
]
dependencies = [
"appcompat-v7" : 'com.android.support:appcompat-v7:25.1.0',
"support-design" : 'com.android.support:design:+',
......
"rxandroid" : 'io.reactivex:rxandroid:1.2.1',
"rxjava" : 'io.reactivex:rxjava:1.3.0'
]
}
- 项目根目录build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
//注意:这里,一定要添加,这是将config.gradle中的配置添加到全局。
apply from : "config.gradle"
buildscript {
repositories {
jcenter()
//是一个类似于github的代码托管仓库,声明了此配置,
//可以轻松引用 jcenter上的开源项目
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
//gradle是一个强大的项目构建工具,不仅可以构建Android,还可以构建java,C++等
//此处引用android的插件
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
//tencent ugly use 这里是因为使用ugly来来管理app,如果不使用可以去掉
classpath 'com.tencent.bugly:symtabfileuploader:latest.release'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
- app目录下的build.gradle配置
import java.text.SimpleDateFormat
apply plugin: 'com.android.application'
//tencent bugly 使用
apply plugin: 'bugly'
bugly {
appId = '95a2a31773'
appKey = '8d8658e2-a74a-4d4d-8079-91e170b29e20'
upload = true
//这里默认为false,
debug = true
}
android {
aaptOptions {
cruncherEnabled = false
useNewCruncher = false
}
//在android 标签下,唯一的属性就是compileSdkVersion,buildToolsVersion
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion rootProject.ext.android["buildToolsVersion"]
defaultConfig {
applicationId rootProject.ext.android["applicationId"]
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//多渠道打包
productFlavors {
wandoujia {}
baidu {}
c360 {}
uc {}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
buildTypes {
release {
shrinkResources false
//混淆
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
manifestPlaceholders = [appName: "奥飞用户中心"]
buildConfigField "int", "buildTime", getDebugVersionNameSuffix()
//设置release版本只包含armeabi和armeabi-v7a的so包
ndk {
abiFilters "armeabi", "armeabi-v7a"
}
// 输出自定义的apkm名,与多道打包配合,名称如输出名为AppName_vv 1.1.0_2017-08-08_productA.apk的apk,,
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出名为AppName_vv 1.1.0_2017-08-08_wandoujia.apk
def apkFile = "AlphaApp_${defaultConfig.versionName}_${buildTime()}" +
"_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, apkFile)
}
}
}
}
debug {
debuggable true
//生成的apk名字添加-debug,如 BuildConfig.VERSION_NAME=="v 1.1.0-debg"
versionNameSuffix "-debug"
//为debug版本的包名添加.debug后缀
applicationIdSuffix ".debug"
//manifest中的占位符
manifestPlaceholders = [appName: "奥飞用户中心-dev"]
//这里会在BuildConfig中生成一个buildTime参数, BuildConfig.buildTime
// 注:buildConfigField 配置格式为: "type","name","value" 形式,
// 如果参数是String类型,"value"外部需加单引号申明内部是String类型的,或者使用转移符 \ ,
// 如: buildConfigField "String", "CustomValue",'"buildType"'("\"buildType\"")
buildConfigField "int", "buildTime",buildTime()
//设置debug版本包含x86的so文件,为了在模拟器上进行测试
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86"
}
}
}
}
//版本编译时间
def buildTime() {
def date = new Date()
def formattedDate = date.format('yyyy-MM-dd', TimeZone.getTimeZone("UTC"))
return formattedDate
}
dependencies {
//当有很多包时,使用这个就是将所有libs下添加为依赖
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile rootProject.ext.dependencies["junit"]
compile rootProject.ext.dependencies["appcompat-v7"]
.....
compile rootProject.ext.dependencies["okhttp"]
//腾讯bugly日志
compile rootProject.ext.dependencies["crashreport"];
compile rootProject.ext.dependencies["crashreport-native"]
//使用library
releaseCompile project(path: ':lib_sdk', configuration: 'release')
releaseCompile project(path: ':lib_stub', configuration: 'release')
debugCompile project(path: ':lib_sdk', configuration: 'debug')
debugCompile project(path: ':lib_stub', configuration: 'debug')
}
我这里没有使用在android标签下添加
signingConfigs {
release {
storeFile file('../yourapp.keystore')
keyAlias 'your password'
keyPassword 'your alias'
storePassword 'your password'
}
}
这是因为通常我是使用generate sign apk-->
生成对应的apk