代码拉取完成,页面将自动刷新
///////////////////////////////////////////////////////////////////////////////////////////////
//
// 注意: 本文件从2.0.0版本开始已废弃
//
// 1.1.0版及以前使用此cc-settings.gradle文件
// 2.0.0版及以后使用新版cc-settings-2.gradle文件
// 此文件保留是为了不影响以前通过apply github上的此文件使用CC的用户
// 2.0.0版本以后,不推荐使用github上的文件,建议复制或下载cc-settings-2.gradle的内容到工程根目录使用
//
//
///////////////////////////////////////////////////////////////////////////////////////////////
import java.util.regex.Pattern
//先加载local.properties文件
Properties localProperties = new Properties()
try {
def localFile = project.rootProject.file('local.properties')
if (localFile != null && localFile.exists()) {
localProperties.load(localFile.newDataInputStream())
}
} catch (Exception ignored) {
println("local.properties not found")
}
//读取build.gradle中的设置
// 2018-04-06修改:
// 为了更利于理解,将ext.runAsApp 改名为 ext.mainApp
// ext.mainApp的将仅代表是否作为主app,为true时以application方式编译,为false或未配置时以local.properties中的配置为准
// 兼容以前的runAsApp设置,ext.runAsApp的功能保持不变,runAsApp优先级高于local.properties
def runAsApp = ext.has('runAsApp')
if (runAsApp) {
runAsApp = ext.runAsApp
} else if(ext.has('mainApp') && ext.mainApp) { //ext.mainApp为true时,代表以app方式运行
runAsApp = true
} else {
//build.gradle中没有配置runAsApp,且ext.mainApp=false或未配置
//再从local.properties中读取配置,例如: demo_component_a=true
//注:如果采用local.properties读取配置,每次修改需要重新同步(Sync Project)一下
runAsApp = 'true' == localProperties.getProperty(project.name)
}
//设置到ext中,供module的build.gradle使用(例如用于设置sourceSets配置)
ext.runAsApp = runAsApp
if (runAsApp) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
//对组件库的依赖格式: addComponent dependencyName [, realDependency]
// 使用示例见demo/build.gradle
// dependencyName: 组件库的名称,推荐直接使用使用module的名称
// realDependency(可选): 组件库对应的实际依赖,可以是module依赖,也可以是maven依赖
// 如果未配置realDependency,将自动依赖 project(":$dependencyName")
// realDependency可以为如下2种中的一种:
// module依赖 : project(':demo_component_b') //如果module名称跟dependencyName相同,可省略(推荐)
// maven依赖 : 'com.billy.demo:demoB:1.1.0' //如果使用了maven私服,请使用此方式
ext.addComponent = { dependencyName, realDependency = null ->
def curModuleIsBuildingApk = false //当前task是否为给本module打apk包
def taskNames = project.gradle.startParameter.taskNames
def regex = "((.*:)?${project.name.toUpperCase()}:)?((ASSEMBLE)|(INSTALL)|((BUILD)?TINKER)|(RESGUARD)).*"
def taskBuildApkPattern = Pattern.compile(regex)
for (String task : taskNames) {
if (taskBuildApkPattern.matcher(task.toUpperCase()).matches()) {
curModuleIsBuildingApk = true
break
}
}
//不是在为本app module打apk包,不添加对组件的依赖
if (!curModuleIsBuildingApk)
return
def componentProject = rootProject.subprojects.find { it.name == dependencyName }
def app //dependencyName指定的module是否为配置为以application方式编译
if (componentProject && componentProject.ext.has('runAsApp')) {
//兼容以前的ext.runAsApp=true的配置方式,runAsApp的优先级高
app = componentProject.ext.runAsApp
} else if (componentProject && componentProject.ext.has('mainApp') && componentProject.ext.mainApp) {
//仅ext.mainApp为true时,确定为application方式编译,若为false,则读取local.properties中的配置
app = true
} else {
//local.properties中配置为true代表该module以application方式编译
app = 'true' == localProperties.getProperty(dependencyName)
}
if (!app) {
def dependencyMode = (project.gradle.gradleVersion as float) >= 4.1F ? 'api' : 'compile'
if (realDependency) {
//通过参数传递的依赖方式,如:
// project(':moduleName')
// 或
// 'com.billy.demo:demoA:1.1.0'
project.dependencies.add(dependencyMode, realDependency)
println "CC >>>> add $realDependency to ${project.name}'s dependencies"
} else if (componentProject) {
//第二个参数未传,默认为按照module来进行依赖
project.dependencies.add(dependencyMode, project(":$dependencyName"))
println "CC >>>> add project(\":$dependencyName\") to ${project.name}'s dependencies"
} else {
throw new RuntimeException(
"CC >>>> add dependency by [ addComponent '$dependencyName' ] occurred an error:" +
"\n'$dependencyName' is not a module in current project" +
" and the 2nd param is not specified for realDependency" +
"\nPlease make sure the module name is '$dependencyName'" +
"\nelse" +
"\nyou can specify the real dependency via add the 2nd param, for example: " +
"addComponent '$dependencyName', 'com.billy.demo:demoB:1.1.0'")
}
}
}
repositories {
maven { url rootProject.file("repo-local") }
jcenter()
}
//默认配置了AndroidManifest.xml在library模式和application模式下的文件路径
android {
sourceSets {
main {
//默认的作为application运行时Manifest文件路径
def debugManifest = 'src/main/debug/AndroidManifest.xml'
if (runAsApp && project.file(debugManifest).exists()) {
manifest.srcFile debugManifest
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
//集成开发模式下自动排除debug文件夹中的所有Java文件
// 可以将debug代码放在这个包内,例如:Application子类
java {
exclude 'debug/**'
}
}
// 注:2018-03-12推荐:将组件单独以app运行时的测试代码及资源放到src/main/debug/目录下
if (runAsApp) {
//debug模式下,如果存在src/main/debug/assets,则自动将其添加到assets源码目录
if (project.file('src/main/debug/assets').exists()) {
assets.srcDirs = ['src/main/assets', 'src/main/debug/assets']
}
//debug模式下,如果存在src/main/debug/java,则自动将其添加到java源码目录
if (project.file('src/main/debug/java').exists()) {
java.srcDirs = ['src/main/java', 'src/main/debug/java']
}
//debug模式下,如果存在src/main/debug/res,则自动将其添加到资源目录
if (project.file('src/main/debug/res').exists()) {
res.srcDirs = ['src/main/res', 'src/main/debug/res']
}
}
}
}
}
def dependencyMode = GradleVersion.version(project.gradle.gradleVersion) >= GradleVersion.version('4.1') ? 'api' : 'compile'
//project.dependencies.add(dependencyMode, project(":cc"))
project.dependencies.add(dependencyMode, "com.billy.android:cc:1.1.0")
//auto register extension:
// 源码地址:https://github.com/luckybilly/AutoRegister
// 功能介绍:
// 在编译期扫描将打到apk包中的所有类
// 将 scanInterface的实现类 或 scanSuperClasses的子类
// 并在 codeInsertToClassName 类的 codeInsertToMethodName 方法中生成如下代码:
// codeInsertToClassName.registerMethodName(scanInterface)
// 要点:
// 1. codeInsertToMethodName 若未指定,则默认为static块
// 2. codeInsertToMethodName 与 registerMethodName 需要同为static或非static
// 自动生成的代码示例:
/*
在com.billy.app_lib_interface.CategoryManager.class文件中
static
{
register(new CategoryA()); //scanInterface的实现类
register(new CategoryB()); //scanSuperClass的子类
}
*/
project.apply plugin: 'auto-register'
project.ext.registerInfoList = [
[ //自动注册组件
'scanInterface' : 'com.billy.cc.core.component.IComponent'
, 'codeInsertToClassName' : 'com.billy.cc.core.component.ComponentManager'
, 'registerMethodName' : 'registerComponent'
, 'exclude' : [//排除的类,支持正则表达式(包分隔符需要用/表示,不能用.)
'com.billy.cc.core.component.'.replaceAll("\\.", "/") + ".*"
]
],[//自动注册全局拦截器
'scanInterface' : 'com.billy.cc.core.component.IGlobalCCInterceptor'
, 'codeInsertToClassName' : 'com.billy.cc.core.component.GlobalCCInterceptorManager'
, 'registerMethodName' : 'registerGlobalInterceptor'
, 'exclude' : [//排除的类,支持正则表达式(包分隔符需要用/表示,不能用.)
'com.billy.cc.core.component.'.replaceAll("\\.", "/") + ".*"
]
],[//自动注册跨进程通信时自定义类型的json转换器,可以用Gson、FastJson等工具来实现
// 参考: demo_base/src/main/java/com.billy.cc.demo.base.GsonParamConverter
'scanInterface' : 'com.billy.cc.core.component.IParamJsonConverter'
, 'codeInsertToClassName' : 'com.billy.cc.core.component.RemoteParamUtil'
, 'registerMethodName' : 'initRemoteCCParamJsonConverter'
, 'exclude' : [//排除的类,支持正则表达式(包分隔符需要用/表示,不能用.)
'com.billy.cc.core.component.'.replaceAll("\\.", "/") + ".*"
]
]
]
autoregister {
registerInfo = registerInfoList
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。