项目地址在最后
快速搭建android基础项目
1、基于kotlin,采用android MVVM 架构处理
2、增加 config.gradle 针对项目所需要依赖进行配置
3、针对项目组件化分别创建对应module,并依赖commLib
4、app目录为项目主目录,这里尽量少的做一些操作,最好只拿到对应的主页面然后直接做个展示最好,剩下的逻辑操作都放到对应module里
5、baseLib里放的大部分是网络方面的东西,尽量不要做更改,除非必要,项目使用需要创建的一些东西尽量放到commLib里
├─app 主模块
│ ├─startapp 模块目录
│ │ ├─ui activity/fragment
│ │ └─ … 更多类库目录
│ │
│─baselibrary 基础
│ ├─com 模块目录
│ │ ├─qb 项目目录
│ │ │ ├─baselibrary
│ │ │ │ ├─basekotlin kotlin基础封装的基类(非必要不用动)
│ │ │ │ ├─util 通用Utils目录,非必要尽量不要baseLib目录处理,请加到commLib目录
│ │ │ │ └─ … 其他
│ │ │ └─ … 更多类库目录
│ │
├─commLib 公共Lib依赖baselibrary
│ ├─common 项目目录
│ │ ├─api 接口
│ │ │ ├─baselibrary
│ │ │ │ ├─one 这个可以随意 要不要都行。我当时想的多地址创建多个api,不要也行,也可以一个动态修改base地址的方式,就是那个麻烦些
│ │ │ │ └─ … 其他
│ │ ├─base 外部extends这里的
│ │ ├─bean 对象
│ │ ├─net 网络封装可以区分目录例如one/two多个base地址可以这么搞,也可以动态修改base地址这样麻烦些
│ │ ├─router ARouter路由管理
│ │ ├─ui 公共页面可以放这里
│ │ ├─update app更新相关,没测试有问题的话可以自己写一个
│ │ ├─url base环境,自行区分测试开发环境
│ │ ├─utils 公共utils
│ │ ├─widget 公共widget
│ │ └─ … 更多类库目录
│ │
├─login 登录模块
│ ├─startapp 模块目录
│ │ ├─ui activity/fragment
│ │ └─ … 更多类库目录
│ │
├─video 视频模块(这个测试用的不用管,现在不用了,直接删了就行)
│ ├─startapp 模块目录
│ │ ├─ui activity/fragment
│ │ └─ … 更多类库目录
│ │
└─ … 项目更多module以及依赖库
1、 请注意各个module layout 以及各个资源文件命名 (在对应module的build.gradle中配置了resourcePrefix资源前缀,这是为了防止各个module资源命名冲突,尽量保证)
2、 需要单独运行module的,请在config.gradle中将对应module的模块由false设置为true(同时对应module的相关配置需要看一看)
3、 注意新增的module要添加依赖,例如这里的我统一添加在app的build.gradle里
ext {
//登录
is_Login = false
//是否需要main module模块
is_Main = false
is_Video = false
is_Square = false
android = [
//APP名称
APP_NAME : "startApp",
//app唯一标识符
application_id : "com.qiao.startapp",
//编译SDK版本
compileSdkVersion: 29,
//编译SDK版本号
buildToolsVersion: "30.0.2",
minSdkVersion : 19,
//最大适配SDK
targetSdkVersion : 29,
//当前版本号
versionCode : 100,
//当前版本名称
versionName : "1.0.0",
]
key = [
storeFile : "../xx.jks",//签名文件位置
storePassword: "xx",//签名文件密码
keyAlias : "xx",//签名文件别名
keyPassword : "xx",//签名文件别名密码
JPUSH_APPKEY : "4917cc32596c65b5a8fb3452",
JPUSH_CHANNEL: "developer-default"
]
//依赖
version = [
androidx_appcompat : "1.1.0",
junit : "4.12",
androidx_junit : "1.1.1",
androidx_espresso_core : "3.2.0",
androidx_constraintlayout : "1.1.3",
rxandroid : "2.1.1",
rxjava : "2.2.15",
retrofit : "2.8.1",
okhttp : "3.1.2",
retrofit2_converter : "2.8.1",
retrofit2_converter_scalars: "2.8.1",
retrofit2_adapter_rxjava2 : "2.8.1",
logging_interceptor : "3.14.7",
butterknife : "10.2.1",
butterknife_compiler : "10.2.1",
rxlifecycle : "3.1.0",
rxlifecycle_android : "3.1.0",
rxlifecycle_components : "3.1.0",
immersionbar : "3.0.0",
immersionbar_components : "3.0.0",
immersionbar_ktx : "3.0.0",
multidex : "1.0.3",
arouter_api : "1.5.1",
arouter_compiler : "1.5.1",
flycoTabLayout_Lib : "2.1.2",
SmartRefreshLayout : "1.1.0",
SmartRefreshHeader : "1.1.0",
SmartRefreshLayout : "1.1.0",
recyclerview : "1.1.0",
MVCHelper_Library : "1.4.0",
MVCHelper_CoolRefresh : "1.4.0",
CoolRefreshView : "1.0.4",
support_v4 : "23.4.0",
core_ktx : "1.3.2",
jpush : "3.8.5",
jcore : "2.5.5",
kotlinx_coroutines_android : "1.3.9",
lifecycle_extensions : "2.2.0",
lifecycle_viewmodel_ktx : "2.2.0",
utilcodex : "1.31.0",
event_bus : "3.1.1",
kotlin_stdlib : "1.4.10",
kotlin_v : "1.4.10",
live_event_bus : "1.8.0",
agentweb : "4.1.9",
jzvd : "7.5.0",
material_v : "1.1.0",
autosize : "1.2.1",
hotfix : "3.3.0",
htextview : "0.1.6",
XXPermissions : "13.5",
XUpdate : "2.1.3",
okhttputils : "2.6.2",
alipay : "15.8.11",
]
dependencies = [
androidx_appcompat : "androidx.appcompat:appcompat:${version.androidx_appcompat}",
androidx_constraintlayout : "androidx.constraintlayout:constraintlayout:${version.androidx_constraintlayout}",
junit : "junit:junit:${version.junit}",
androidx_junit : "androidx.test.ext:junit:${version.androidx_junit}",
androidx_espresso_core : "androidx.test.espresso:espresso-core:${version.androidx_espresso_core}",
//分包
multidex : "com.android.support:multidex:${version.multidex}",
//net
rxandroid : "io.reactivex.rxjava2:rxandroid:${version.rxandroid}",
rxjava : "io.reactivex.rxjava2:rxjava:${version.rxandroid}",
retrofit : "com.squareup.retrofit2:retrofit:${version.retrofit}",
okhttp : "com.squareup.okhttp3:okhttp:${version.okhttp}",
retrofit2_converter : "com.squareup.retrofit2:converter-gson:${version.retrofit2_converter}",
retrofit2_converter_scalars: "com.squareup.retrofit2:converter-scalars:${version.retrofit2_converter_scalars}",
retrofit2_adapter_rxjava2 : "com.squareup.retrofit2:adapter-rxjava2:${version.retrofit2_adapter_rxjava2}",
logging_interceptor : "com.squareup.okhttp3:logging-interceptor:${version.logging_interceptor}",
// //黄油刀
// butterknife : "com.jakewharton:butterknife:${version.butterknife}",
// butterknife_compiler : "com.jakewharton:butterknife:${version.butterknife_compiler}",
rxlifecycle : "com.trello.rxlifecycle3:rxlifecycle:${version.rxlifecycle}",
rxlifecycle_android : "com.trello.rxlifecycle3:rxlifecycle-android:${version.rxlifecycle_android}",
rxlifecycle_components : "com.trello.rxlifecycle3:rxlifecycle-components:${version.rxlifecycle_components}",
//处理状态栏
immersionbar : "com.gyf.immersionbar:immersionbar:${version.immersionbar}",
immersionbar_components : "com.gyf.immersionbar:immersionbar-components:${version.immersionbar_components}",
immersionbar_ktx : "com.gyf.immersionbar:immersionbar-ktx:${version.immersionbar_ktx}",
//Arouter
arouter_api : "com.alibaba:arouter-api:${version.arouter_api}",
arouter_compiler : "com.alibaba:arouter-compiler:${version.arouter_compiler}",
flycoTabLayout_Lib : "com.flyco.tablayout:FlycoTabLayout_Lib:${version.flycoTabLayout_Lib}@aar",
SmartRefreshLayout : "com.scwang.smartrefresh:SmartRefreshLayout:${version.SmartRefreshLayout}", //1.0.5及以前版本的老用户升级需谨慎,API改动过大
SmartRefreshHeader : "com.scwang.smartrefresh:SmartRefreshHeader:${version.SmartRefreshHeader}", //没有使用特殊Header,可以不加这行
MVCHelper_Library : "com.shizhefei:MVCHelper-Library:${version.MVCHelper_Library}",
recyclerview : "androidx.recyclerview:recyclerview:${version.recyclerview}",
MVCHelper_CoolRefresh : "com.shizhefei:MVCHelper-CoolRefresh:${version.MVCHelper_CoolRefresh}",
CoolRefreshView : "com.shizhefei:CoolRefreshView:${version.CoolRefreshView}",
support_v4 : "com.android.support:support-v4:${version.support_v4}",
core_ktx : "androidx.core:core-ktx:${version.core_ktx}",
jpush : "cn.jiguang.sdk:jpush:${version.jpush}",
jcore : "cn.jiguang.sdk:jcore:${version.jcore}",
kotlinx_coroutines_android : "org.jetbrains.kotlinx:kotlinx-coroutines-android:${version.kotlinx_coroutines_android}",
lifecycle_extensions : "androidx.lifecycle:lifecycle-extensions:${version.lifecycle_extensions}",
lifecycle_viewmodel_ktx : "androidx.lifecycle:lifecycle-viewmodel-ktx:${version.lifecycle_viewmodel_ktx}",
utilcodex : "com.blankj:utilcodex:${version.utilcodex}",
event_bus : "org.greenrobot:eventbus:${version.event_bus}",
live_event_bus : "io.github.jeremyliao:live-event-bus-x:${version.live_event_bus}",
agentweb : "com.github.Justson.AgentWeb:agentweb-core:v${version.agentweb}-androidx",
jzvd : "cn.jzvd:jiaozivideoplayer:${version.jzvd}",
kotlin_stdlib : "org.jetbrains.kotlin:kotlin-stdlib:${version.kotlin_stdlib}",
material_v : "com.google.android.material:material:${version.material_v}",
autosize : "me.jessyan:autosize:${version.autosize}",
hotfix : "com.aliyun.ams:alicloud-android-hotfix:${version.hotfix}",
htextview_base : "com.hanks:htextview-base:${version.htextview}",
htextview_fade : "com.hanks:htextview-fade:${version.htextview}",
htextview_line : "com.hanks:htextview-line:${version.htextview}",
htextview_rainbow : "com.hanks:htextview-rainbow:${version.htextview}",
htextview_typer : "com.hanks:htextview-typer:${version.htextview}",
htextview_scale : "com.hanks:htextview-scale:${version.htextview}",
htextview_evaporate : "com.hanks:htextview-evaporate:${version.htextview}",
htextview_fall : "com.hanks:htextview-fall:${version.htextview}",
XXPermissions : "com.github.getActivity:XXPermissions:${version.XXPermissions}",
XUpdate : "com.github.xuexiangjys:XUpdate:${version.XUpdate}",
okhttputils : "com.zhy:okhttputils:${version.okhttputils}", //升级框架要用的,要是跟项目里的冲突就自己做下载
alipay : "com.alipay.sdk:alipaysdk-android:${version.alipay}" //升级框架要用的,要是跟项目里的冲突就自己做下载
]
}
startApp项目地址