一、初始配置:(新建项目自动配置好的):
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 26
buildToolsVersion “25.0.3”
defaultConfig {//此里边是默认配置,下边buildTypes里边可以根据平台不同修改
applicationId “wangjing.testandroid”
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName “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_VERSION
buildConfigField ‘String’, ‘GIT_VERSION’, ‘".’ + getGitRevision() + ‘"’ //当前git版本号
buildConfigField ‘String’, ‘TARGET_URL’, ‘“wangjing.com”’ //服务器
buildConfigField ‘String’, ‘ROOT_DIR’, ‘“WangJingDir”’ //根文件夹
buildConfigField ‘String’, ‘TARGET’, ‘“测试”’ //平台
buildConfigField ‘String’, ‘LOG_TAG’, ‘“WangJingDir”’ //日志Tag
buildConfigField ‘int’, ‘LOG_LEVEL’, ‘1’ //日志级别
buildConfigField ‘String’, ‘UMENG_APPKEY’, ‘“dssscfdeffder343534tefrfre”’ //友盟APPKEY
buildConfigField ‘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’, ‘“http://d.wangjing.com”’ //分享url
//文件系统参数
buildConfigField ‘String’, ‘SERVER_URL’, ‘“http://fs.wangjing.com”’
buildConfigField ‘String’, ‘APPKEY’, ‘“filewj”’
buildConfigField ‘String’, ‘SECRET’, ‘“fvbfdvbfdvbfgvbfer4t4t54tg”’
buildConfigField ‘String’, ‘BUTCKET1’, ‘“vfdvgrgrtgr4g4eg4r5g4g4eg4gg”’ // 作业活动问答
buildConfigField ‘String’, ‘BUTCKET2’, ‘“f4rtfgr4g4gt45y45ytygftrttfg”’ // 头像课程封面
buildConfigField ‘boolean’, ‘isPad’, ‘false’ // 是不是pad
buildConfigField ‘boolean’, ‘isTest’, ‘false’ // 是不是测试平台
buildConfigField ‘boolean’, ‘isHuaweiPad’, ‘false’ // 是不是定制华为pad
buildConfigField ‘String’, ‘DWONURLPRE’, ‘“http://dvdfvdfv.aliyuncs.com/”’ //阿里云上传默认前缀
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ //默认的混淆文件
// 重命名APK
applicationVariants.all { variant ->
variant.outputs.each { output ->
def targetName = variant.buildType.name;
targetName = targetName.replace(“debug”, “test”)
def apkName = “mobile-
t
a
r
g
e
t
N
a
m
e
−
v
{targetName}-v
targetName−v{variant.versionName}-
b
u
i
l
d
T
i
m
e
(
)
−
{buildTime()}-
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_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
}
//原本初始化时候的
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
}
}
//被替换为
buildTypes {
debug {
minifyEnabled false
shrinkResources false
debuggable true
signingConfig signingConfigs.release
buildConfigField ‘boolean’, ‘isTest’, ‘true’ // 是test/debug平台
buildConfigField ‘String’, ‘TARGET_URL’, ‘“wangjing.com”’ //服务器平台
buildConfigField ‘String’, ‘TARGET’, ‘" 测试"’ //在‘我’中显示平台
buildConfigField ‘int’, ‘LOG_LEVEL’, ‘1’ //日志级别
buildConfigField ‘String’, ‘SERVER_URL’, ‘“http://fs.wangjing.com”’ //文件服务器配置
ndk { abiFilters ‘armeabi-v7a’, ‘x86’ }
}
demo {
minifyEnabled false
shrinkResources false
debuggable true
signingConfig signingConfigs.release
buildConfigField ‘String’, ‘TARGET_URL’, ‘“wangjing.com”’
buildConfigField ‘String’, ‘TARGET’, ‘" DEMO"’
buildConfigField ‘int’, ‘LOG_LEVEL’, ‘1’
buildConfigField ‘String’, ‘UMENG_CHANNEL’, ‘“wangjingdemo”’
buildConfigField ‘String’, ‘SERVER_URL’, ‘“http://fs.wangingdemo.com”’ //文件服务器配置
ndk { abiFilters ‘armeabi-v7a’, ‘x86’ }
}
release {
minifyEnabled false
debuggable false
signingConfig signingConfigs.release
buildConfigField ‘String’, ‘TARGET_URL’, ‘“wangjing.com”’
buildConfigField ‘String’, ‘TARGET’, ‘""’
buildConfigField ‘int’, ‘LOG_LEVEL’, ‘5’
buildConfigField ‘String’, ‘UMENG_CHANNEL’, ‘“wangjing”’
buildConfigField ‘boolean’, ‘UMENG_ENCRYPT’, ‘true’ //友盟日志加密
buildConfigField ‘String’, ‘SERVER_URL’, ‘“http://fs.wangjing.cn”’ //文件服务器配置
}
local {
initWith release
minifyEnabled false
shrinkResources false
debuggable true
buildConfigField ‘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 demo
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_release {
initWith release
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
}
ruiyipad_release {
initWith release
buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD-RUIYI"'
buildConfigField ‘boolean’, ‘isPad’, ‘true’ // 是pad
}
huaweipad_test {
initWith pad_test
buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD-HUAWEI"'
buildConfigField ‘boolean’, ‘isHuaweiPad’, ‘true’ // 是不是华为pad
}
huaweipad_demo {
initWith pad_demo
buildConfigField 'String', 'APP_MODEL', '"WANGJING-PAD-HUAWEI"'
buildConfigField ‘boolean’, ‘isHuaweiPad’, ‘true’ // 是不是华为pad
}
huaweipad_release {
initWith pad_release
buildConfigField '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 false
javaMaxHeapSize “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-annotations
compile ‘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” }
//https://github.com/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 25
buildToolsVersion ‘25.0.2’
defaultConfig {
minSdkVersion 11
targetSdkVersion 25
versionCode 1
versionName “1.0”
}
buildTypes {
release {
minifyEnabled false
proguardFiles 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_Store
build
/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的第三方开源库
}