一、初始配置:(新建项目自动配置好的):
1.build.gradle(app)
apply plugin: ‘com.android.application’
//下边apk重命名使用
static def buildTime() {def date = new Date()def formattedDate = date.format('yyyyMMdd-HHmm')def iml = new File('app/app.iml')if (iml.exists()) {return 'time'} else {return formattedDate}}static def getGitRevision() {def iml = new File('app/app.iml')if (iml.exists()) {return 'git_xxxx'} else {return 'git rev-parse --short HEAD'.execute().text.trim()}}
//配置
android {compileSdkVersion 26buildToolsVersion "25.0.3"defaultConfig {//此里边是默认配置,下边buildTypes里边可以根据平台不同修改applicationId "wangjing.testandroid"minSdkVersion 15targetSdkVersion 26versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//后期加入
// 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置
ndk {abiFilters 'armeabi-v7a' } //'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'//使用manifestPlaceholders替换变量,主要替换AndroidManifest.xml中的值:<meta-data android:name="UMENG_APPKEY"// android:value="${umeng_app_key}"/>manifestPlaceholders = [GETUI_APP_ID : "P5rfdfytdftghgujghi6", //推送GETUI_APP_KEY : "xcftdctyfytfyt687ty8",GETUI_APP_SECRET: "dte654r6r65trrftftgf",PACKAGE_NAME : applicationId,APPLICATION_ID : applicationId,INTENT_HOME: 'intent.Placeholders1',INTENT_DEFAULT : 'intent.Placeholders2',SHARED_USER_ID : '']//buildConfigField代码中值的应用:BuildConfig.GIT_VERSIONbuildConfigField 'String', 'GIT_VERSION', '".' + getGitRevision() + '"' //当前git版本号buildConfigField 'String', 'TARGET_URL', '""' //服务器buildConfigField 'String', 'ROOT_DIR', '"WangJingDir"' //根文件夹buildConfigField 'String', 'TARGET', '"测试"' //平台 buildConfigField 'String', 'LOG_TAG', '"WangJingDir"' //日志Tag buildConfigField 'int', 'LOG_LEVEL', '1' //日志级别buildConfigField 'String', 'UMENG_APPKEY', '"dssscfdeffder343534tefrfre"' //友盟APPKEYbuildConfigField 'String', 'UMENG_CHANNEL', '"wangjing"' //友盟渠道buildConfigField 'boolean', 'UMENG_ENCRYPT', 'false'//友盟日志加密buildConfigField 'String', 'APP_MODEL', '"WANGJING"'buildConfigField 'String', 'INVITATIONCODE', '"fdvedrfg"' //默认班级码buildConfigField 'int', 'MESSAGE_REFRESH_TIME', '180' //消息中心刷新时间间隔(秒)buildConfigField 'String', 'SHARE_URL', '""'//分享url//文件系统参数buildConfigField 'String', 'SERVER_URL', '""'buildConfigField 'String', 'APPKEY', '"filewj"'buildConfigField 'String', 'SECRET', '"fvbfdvbfdvbfgvbfer4t4t54tg"'buildConfigField 'String', 'BUTCKET1', '"vfdvgrgrtgr4g4eg4r5g4g4eg4gg"' // 作业活动问答buildConfigField 'String', 'BUTCKET2', '"f4rtfgr4g4gt45y45ytygftrttfg"' // 头像课程封面buildConfigField 'boolean', 'isPad', 'false' // 是不是padbuildConfigField 'boolean', 'isTest', 'false' // 是不是测试平台buildConfigField 'boolean', 'isHuaweiPad', 'false'// 是不是定制华为padbuildConfigField 'String', 'DWONURLPRE', '"/"' //阿里云上传默认前缀 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //默认的混淆文件// 重命名APKapplicationVariants.all {variant ->variant.outputs.each {output ->def targetName = variant.buildType.name;targetName = targetName.replace("debug", "test")def apkName = "mobile-${targetName}-v${variant.versionName}-${buildTime()}-${getGitRevision()}.apk"def dir = output.outputFile.getParent()def apkFile = new File(dir, apkName)output.outputFile = apkFile}}}
//签名配置
signingConfigs {release {//其中的RELEASE_STOREFILE值可以定义在gradle.propertises中调用storeFile file(RELEASE_STOREFILE)storePassword RELEASE_STORE_PASSWORDkeyAlias RELEASE_KEY_ALIASkeyPassword RELEASE_KEY_PASSWORD}}
//原本初始化时候的
buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}
//被替换为
buildTypes {debug {minifyEnabled falseshrinkResources falsedebuggable truesigningConfig signingConfigs.releasebuildConfigField 'boolean', 'isTest', 'true' // 是test/debug平台buildConfigField 'String', 'TARGET_URL', '""' //服务器平台buildConfigField 'String', 'TARGET', '" 测试"' //在‘我’中显示平台buildConfigField 'int', 'LOG_LEVEL', '1' //日志级别buildConfigField 'String', 'SERVER_URL', '""'
//文件服务器配置
ndk {abiFilters 'armeabi-v7a', 'x86' }}demo {minifyEnabled falseshrinkResources falsedebuggable truesigningConfig signingConfigs.releasebuildConfigField 'String', 'TARGET_URL', '""'buildConfigField 'String', 'TARGET', '" DEMO"'buildConfigField 'int', 'LOG_LEVEL', '1'buildConfigField 'String', 'UMENG_CHANNEL', '"wangjingdemo"'buildConfigField 'String', 'SERVER_URL', '""' //文件服务器配置ndk {abiFilters 'armeabi-v7a', 'x86' }}
release {minifyEnabled falsedebuggable falsesigningConfig signingConfigs.releasebuildConfigField 'String', 'TARGET_URL', '""'buildConfigField 'String', 'TARGET', '""'buildConfigField 'int', 'LOG_LEVEL', '5'buildConfigField 'String', 'UMENG_CHANNEL', '"wangjing"'buildConfigField 'boolean', 'UMENG_ENCRYPT', 'true' //友盟日志加密buildConfigField 'String', 'SERVER_URL', '""' //文件服务器配置}local {initWith releaseminifyEnabled falseshrinkResources falsedebuggable truebuildConfigField 'String', 'TARGET', '" 本地"'//在‘我’中显示平台buildConfigField 'int', 'LOG_LEVEL', '1' //日志级别ndk {abiFilters 'armeabi-v7a', 'x86' }}pad_test {initWith debug //用debug的配置manifestPlaceholders = [INTENT_HOME : 'android.intent.category.HOME', INTENT_DEFAULT: 'android.intent.category.DEFAULT',SHARED_USER_ID: '']buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD"'buildConfigField 'boolean', 'isPad', 'true'// 是pad}pad_demo {initWith demomanifestPlaceholders = [INTENT_HOME : 'android.intent.category.HOME',INTENT_DEFAULT: 'android.intent.category.DEFAULT', SHARED_USER_ID: '']buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD"'buildConfigField 'boolean', 'isPad', 'true' // 是pad}pad_release {initWith releasemanifestPlaceholders = [INTENT_HOME : 'android.intent.category.HOME', INTENT_DEFAULT: 'android.intent.category.DEFAULT',SHARED_USER_ID: '']buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD"'buildConfigField 'boolean', 'isPad', 'true'// 是pad}ruiyipad_release {initWith releasebuildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD-RUIYI"'buildConfigField 'boolean', 'isPad', 'true'// 是pad}huaweipad_test {initWith pad_testbuildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD-HUAWEI"'buildConfigField 'boolean', 'isHuaweiPad', 'true'// 是不是华为pad}huaweipad_demo {initWith pad_demobuildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD-HUAWEI"'buildConfigField 'boolean', 'isHuaweiPad', 'true' // 是不是华为pad}huaweipad_release {initWith pad_releasebuildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD-HUAWEI"'buildConfigField 'boolean', 'isHuaweiPad', 'true' // 是不是华为pad}}packagingOptions {//打包的时候提示哪个出错了,exclude排除一下exclude 'META-INF/DEPENDENCIES'exclude 'META-INF/NOTICE'exclude 'META-INF/LICENSE'exclude 'META-INF/LICENSE.txt'exclude 'META-INF/NOTICE.txt'}dexOptions {//将运行内存设置大一些,运行变快preDexLibraries falsejavaMaxHeapSize "4g"}}dependencies {//依赖,引用compile project(':logic')//引入本地lib项目,记得settings.gradle里边加入引用:include ':app',':logic'compile fileTree(dir: 'libs', include: ['*.jar'])//引入本地jar包androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {exclude group: 'com.android.support', module: 'support-annotations'})//两个项目中都包含support-annotations,去除掉espresso-core里边的group:'com.android.support'中的support-annotations,用本项目app下边的support-annotationscompile 'com.android.support:appcompat-v7:26.+'compile 'com.android.support.constraint:constraint-layout:1.0.2'testCompile 'junit:junit:4.12' //这个没有什么用,出错可以去除掉}repositories {maven {//导入外部的东西时,需要加入自己的maven外部的库url "http://hjghujhniknukhnh/releases/"maven {url "https://ffvytfgytgyu/maven" }///PhilJay/MPAndroidChart图表依赖maven {url "https://jitpack.io" }}flatDir {//将aar文件复制到app module目录下的libs文件夹中,然后打开app module目录下的build.gradle配置文件dirs 'libs'}}2.build.gradle(Project:wangjing)//自动生成buildscript {repositories {jcenter()//如果有maven库的引入,加入 //mavenCentral()}dependencies {classpath 'com.android.tools.build:gradle:2.3.3'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}}allprojects {repositories {jcenter()//如果有maven库的引入,加入 //mavenCentral()}}// 运行gradle clean时,执行此处定义的task // 该任务继承自Delete,删除根目录中的build目录 // 相当于执行Delete.delete(rootProject.buildDir) // gradle使用groovy语言,调用method时可以不用加()task clean(type: Delete) {delete rootProject.buildDir}3.build.gradle(Module:logic)apply plugin: 'com.android.library'android {compileSdkVersion 25buildToolsVersion '25.0.2'defaultConfig {minSdkVersion 11targetSdkVersion 25versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}}repositories {flatDir {dirs 'libs'}}dependencies {compile project(':pay')compile fileTree(include: ['*.jar'], dir: 'libs')testCompile 'junit:junit:4.12'// 友盟统计compile 'com.umeng.analytics:analytics:latest.integration'}注:首次上传项目到git上需要配置gitignore文件1.(app最外部项目)*.iml.gradle/local.properties/.idea/workspace.xml/.idea/libraries.DS_Storebuild/captures.svn/.idea/2.(内部)只需要去除build基本配置完成!二、配置讲解apply plugin: 'com.android.application'//说明module的类型,com.android.application为程序,com.android.library为库 android {compileSdkVersion 22//编译的SDK版本 buildToolsVersion "22.0.1"//编译的Tools版本 defaultConfig {//默认配置 applicationId "com.nd.famlink"//应用程序的包名 minSdkVersion 8//支持的最低版本 targetSdkVersion 19//支持的目标版本 versionCode 52//版本号 versionName "3.0.1"//版本名 manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"hsq" ]//声明友盟渠道名是可变的 } sourceSets {//目录指向配置 main {manifest.srcFile 'AndroidManifest.xml'//指定AndroidManifest文件 java.srcDirs = ['src']//指定source目录 resources.srcDirs = ['src']//指定source目录 aidl.srcDirs = ['src']//指定source目录 renderscript.srcDirs = ['src']//指定source目录 res.srcDirs = ['res']//指定资源目录 assets.srcDirs = ['assets']//指定assets目录 jniLibs.srcDirs = ['libs']//指定lib库目录 } debug.setRoot('build-types/debug')//指定debug模式的路径 release.setRoot('build-types/release')//指定release模式的路径 } signingConfigs {//签名配置 release {//发布版签名配置 storeFile file("fk.keystore")//密钥文件路径 storePassword "123"//密钥文件密码 keyAlias "fk"//key别名 keyPassword "123"//key密码 } debug {//debug版签名配置 storeFile file("fk.keystore") storePassword "123" keyAlias "fk" keyPassword "123" } } buildTypes {//build类型 release {//发布 minifyEnabled true//混淆开启 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'//指定混淆规则文件 signingConfig signingConfigs.release//设置签名信息 } debug {//调试 signingConfig signingConfigs.release } } packagingOptions {exclude 'META-INF/ASL2.0' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' exclude 'META-INF/MANIFEST.MF' } lintOptions {abortOnError false//lint时候终止错误上报,防止编译的时候莫名的失败 } //打包-渠道 productFlavors {hsq{} hsq_dx{} hsq_wx{} baidu{} yingyongbao{} ppzhushou{} anzhi{} zhushou360{} huawei{} lenovomm{} wandoujia{} mumayi{} meizu{} youyi{} sougou{} } //打包-防渠道代码重复处理 productFlavors.all {flavor -> flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ] } } dependencies {//依赖 compile fileTree(dir: 'libs', exclude: ['android-support*.jar'], include: ['*.jar']) //编译lib目录下的.jar文件 compile project(':Easylink')//编译附加的项目 compile project(':ImageLibrary') compile project(':ImageResLibrary') compile project(':Ofdmtransport') compile project(':PullToRefreshLibrary') compile project(':RecorderLibrary') compile project(':WebSocket') compile project(':WidgetLibrary') compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'//编译来自Jcenter的第三方开源库 }