[TOC]
该项目只是简单的组件化开发的示例,搭建了组件化开发的雏形。 暂时没有实现内容的开发工作,目前实现功能有: 网络模块的封装、ARoute的使用方法、登陆功能的实现(UI未实现)。
-
阿里云云效仓库:https://maven.aliyun.com/mvn/guide maven { url 'https://maven.aliyun.com/repository/jcenter' } maven { url 'https://maven.aliyun.com/repository/google' }
-
华为开源镜像:https://mirrors.huaweicloud.com maven { url 'https://repo.huaweicloud.com/repository/maven' }
-
JitPack 远程仓库:https://jitpack.io maven { url 'https://jitpack.io' }
-
MavenCentral 远程仓库:https://mvnrepository.com mavenCentral()
- App 模块
- module_basis 基础模块
- module_login 登陆模块
- module_hilt hilt使用示例模块
- module_version 依赖版本管理模块
程序入口。 跳转到登陆模块 (ARoute 阿里路由开源框架)
- 在 App目录下的 gradle 每个模块都需导入该设置
apply plugin: 'kotlin-kapt'
defaultConfig {
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
dependencies {
// 路由框架
implementation 'com.alibaba:arouter-api:1.5.1'
kapt 'com.alibaba:arouter-compiler:1.5.1'
//导入其他模块
implementation project(path: ':module_basis')
implementation project(path: ':module_login')
implementation project(path: ':module_hilt')
}
- 在 application 中初始化
private fun initARouter() {
if (BuildConfig.DEBUG){
ARouter.openLog()
ARouter.openDebug()
}
ARouter.init(this)
}
- 定义 路由
object RoutePath{
// 最少两级目录
const val pageMain = "/app/mainActivity"
const val pageLogin = "/login/loginActivity"
const val pageHilt = "/hilt/HiltActivity"
}
- Activity中使用
// 注解当前 Activity ,用于跳转
@Route(path = RoutePath.pageMain)
class MainActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
jumpModuleLogin.setOnClickListener {
//跳转到目标页面
ARouter.getInstance().build(RoutePath.pageLogin).navigation()
}
}
}
// 注解当前 Activity ,用于跳转
@Route(path = RoutePath.pageLogin)
class LoginActivity : BaseActivity() {}
- 封装网络请求功能
- kotlin 扩展功能
- toast 常量定义类
实现登陆请求返回功能(UI 未实现)
参考文章: https://mp.weixin.qq.com/s/OEX1d2cU1zGG5BBM-nANBg
- 在 根项目的gradle中
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
- 在app 项目的gradle中
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
implementation :'com.google.dagger:hilt-android:2.30.1-alpha'
kapt: 'com.google.dagger:hilt-android-compiler:2.30.1-alpha'
implementation: 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02'
kapt: 'androidx.hilt:hilt-compiler:1.0.0-alpha02'
- 在Application中注解
@HiltAndroidApp
class MyApplication : Application(){
}
- 在Activity 中注解
@AndroidEntryPoint
class MainActivity : BaseActivity(){
//创建viewModel 常规方式
private val viewModel:HiltViewModel by lazy { ViewModelProvider(this).get(HiltViewModel::class.java) }
// 注入其他一般类
@Inject
lateinit var adapter: MyAdapter
}
// 定义并使用注解 @Inject
class MyAdapter @Inject constructor() : Adapter(){
}
- 创建 HiltViewModel 注解 @ViewModelInject
class HiltViewModel @ViewModelInject constructor( val repository: HiltRepository) : ViewModel() {}
- 创建 HiltRepository 注解 @Inject
class HiltRepository @Inject constructor(){}
- 注入Retrofit ( 在 HiltRepository 中使用 ,而在 HiltRetrofit 中告诉 hilt 怎么实例化)
@Inject
lateinit var apiService: ApiService
//此时就可以使用 apiService 了
- 创建 HiltRetrofit
@Module
@InstallIn(SingletonComponent::class) // 全局范围
object HiltRetrofit {
@Singleton // 单例
@Provides
fun provideApiService():ApiService {
return Retrofit.Builder()
.baseUrl("http://45.32.43.43")
.build()
.create(ApiService::class.java)
}
@Singleton
@Provides
fun provideRetrofit(): ApiService {
// RetrofitClient 自己封装的 Retrofit ;与上面效果相同
return RetrofitClient.instance.onCreateApiService(ApiService::class.java)
}
}
-
创建一个新 Module , 名为:module_version。 可以只保留 "包名" 下的文件 和 build.gradle, 其他文件可删除(如 res,lib)
-
修改 本模块下的build.gradle
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.10"
}
}
apply plugin: 'kotlin'
apply plugin: 'java-gradle-plugin'
repositories {
jcenter()
google()
}
dependencies {
implementation gradleApi()
implementation "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.10"
}
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
gradlePlugin {
plugins {
version {
// 包名
id = 'com.component.module_version'
//在根目录下创建类 DependencyVersionPlugin 继承 Plugin<Project>
implementationClass = 'com.component.module_version.DependencyVersionPlugin'
}
}
}
- 创建依赖库文件 BuildsVersion
object BuildsVersion {
val compileSdkVersion = 30
val buildToolsVersion = "30.0.2"
val minSdkVersion = 22
val targetSdkVersion = 30
val versionCode = 1
val versionName = "1.0"
}
其他依赖项, 可根据自己意愿分类引入, 如定义 http 依赖文件
object DepHttp {
val retrofit = "com.squareup.retrofit2:retrofit:2.9.0"
val converterGson = "com.squareup.retrofit2:converter-gson:2.9.0"
val gson = "com.google.code.gson:gson:2.8.6"
val loggingInterceptor = "com.squareup.okhttp3:logging-interceptor:4.0.0"
}
- 在根目录的 settings.gradle文件中添加
// 依赖版本模块
includeBuild("module_version")
- 在需要的 module build.gradle中 添加使用
// 在文件 build.gradle 的第一行添加
plugins{
// 包名
id "com.component.module_version"
}
// 定义的依赖地址
import com.component.module_version.*
- 添加依赖
// 版本依赖
compileSdkVersion BuildsVersion.compileSdkVersion
buildToolsVersion BuildsVersion.buildToolsVersion
// Retrofit 等依赖
implementation DepHttp.retrofit
implementation DepHttp.gson