前言
关系图
效果预览
全局设置 Gradle
def androidSupportVersion = '25.3.1' ext { //编译的 SDK 版本,如API20 compileSdkVersion = 25 //构建工具的版本,其中包括了打包工具aapt、dx等,如API20对应的build-tool的版本就是20.0.0 buildToolsVersion = "26.0.0" //兼容的最低 SDK 版本 minSdkVersion = 14 //向前兼容,保存新旧两种逻辑,并通过 if-else 方法来判断执行哪种逻辑 targetSdkVersion = 22 appcompatV7 = "com.android.support:appcompat-v7:$androidSupportVersion" constraintLayout = 'com.android.support.constraint:constraint-layout:1.0.2' }
android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion //…… }
资源名重名
组件单独调试
application 与 library 切换
# 组件单独调试开关,true 可以,false 不可以,需要点击 "Sync Project"。 isDebug=false
if (isDebug.toBoolean()) { apply plugin: 'com.android.application' } else { apply plugin: 'com.android.library' } android { //…… }
applicationId
android { //…… defaultConfig { // 作为library时不能有applicationId,只有作为一个独立应用时才能够如下设置 if (isDebug.toBoolean()){ applicationId "com.wuxiaolong.module1" } //…… } }
入口类
android { //…… sourceSets { main { if (isDebug.toBoolean()) { manifest.srcFile 'src/main/debug/AndroidManifest.xml' } else { manifest.srcFile 'src/main/release/AndroidManifest.xml' java { //release 时 debug 目录下文件不需要合并到主工程 exclude 'debug/**' } } } } }
组件间通信
ARouter 使用
dependencies { //arouter compile rootProject.ext.arouterApi }
android { defaultConfig { //arouter javaCompileOptions { annotationProcessorOptions { arguments = [moduleName: project.getName()] } } } dependencies { //arouter annotationProcessor rootProject.ext.arouterCompiler }
library 重复依赖
ButterKnife
Attribute value must be constant
OnClick 方法
@OnClick({R2.id.module1_button, R2.id.module1_button2}) public void onViewClicked(View view) { int id = view.getId(); Log.d("wxl","id="+id); if (id == R.id.module1_button) { toastShow("module1_button"); } else if (id == R.id.module1_button2) { toastShow("module1_button2"); } }