这是一门使用Java语言,从0开发一个Android平台,接近企业级的项目(我的云音乐),课程包含了基础内容,高级内容,项目封装,项目重构等知识;不会深入到源码讲解某个知识点,以及原理,但会粗略的讲解下基础原理;主要是讲解如何使用系统功能,流行的第三方框架,第三方服务,完成接近企业级商业级项目,目的是让大家,学到真正的企业级项目开发技术。
2022年5月开发完成的,所以全部都是最新的,平均每3年会重新制作,现在已经是第三版了。
JDK17
Android 12/13
最低兼容版本:Android 6.0
Android Studio 2021.1
大部分模块采用MVC,商城列表和商城详情采用MVVM,Jetpack官方组件。
├── MyCloudMusicAndroidJava
│ ├── LRecyclerview //第三方Recyclerview框架
│ ├── LetterIndexView //类似微信通讯录字母索引
│ ├── app //云音乐项目
│ ├── build.gradle
│ ├── common.gradle //通用项目配置文件
│ ├── config //配置目录,例如签名
│ ├── glidepalette //Glide画板,用来从网络图片提取颜色
│ ├── gradle
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── keystore.properties
│ ├── local.properties
│ ├── settings.gradle
│ ├── super-j //公用Java语言扩展
│ ├── super-player-tencent //腾讯开源的超级播放器
│ ├── super-speech-baidu //百度语音识别
├── courses
│ └── mymusic //主项目包
│ ├── AppContext.java
│ ├── MainActivity.java
│ ├── activity //通用界面
│ ├── adapter //通用适配器
│ ├── component //模块
│ │ ├── about //关于
│ │ ├── ad //广告
│ │ ├── ...
│ ├── config //配置目录
│ ├── exception //通用自定义异常
│ ├── fragment
│ ├── manager
│ ├── model
│ ├── repository //数据仓库
│ ├── service //服务
│ ├── util //常用工具类
│ ├── view //自定义View
├── selector //选择器
└── superui //通用UI框架
用最新AS打开MyCloudMusicAndroidJava目录,然后等待完全编译成功,因为是企业级项目,所以第三方依赖很多,同时代码量也很多,所以必须要确认完全编译成功,才能运行。
如果也有配套服务端源码,可以在Config.java中修改服务器API地址,资源地址;其他的第三方信息,QQ登陆,微信登陆/支付,支付宝支付,阿里云OSS等信息也可以修改为自己的。
内容太多,只列出部分。
//分页组件版本
//这里可以查看最新版本:https://developer.android.google.cn/jetpack/androidx/releases/paging
def paging_version = "3.1.1"
//添加所有libs目录里面的jar,aar
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
//官方兼容组件,像AppCompatActivity就是该依赖里面的
implementation 'androidx.appcompat:appcompat:1.4.1'
//Material Design组件,像FloatingActionButton就是该依赖里面的
implementation 'com.google.android.material:material:1.4.0'
//官方提供的约束布局,像ConstraintLayout就是该依赖里面的
implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
//UI框架,主要是用他的工具类,也可以单独拷贝出来
//https://qmuiteam.com/android/get-started
implementation 'com.qmuiteam:qmui:2.0.1'
//动态处理权限
//https://github.com/permissions-dispatcher/PermissionsDispatcher
implementation "com.github.permissions-dispatcher:permissionsdispatcher:4.8.0"
annotationProcessor "com.github.permissions-dispatcher:permissionsdispatcher-processor:4.8.0"
//api:依赖会传递到其他应用本模块的项目
implementation project(path: ':super-j')
...
//使用gson解析json
//https://github.com/google/gson
implementation 'com.google.code.gson:gson:2.9.0'
//适配retrofit使用gson解析
//版本要和retrofit一样
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
//适配retrofit支持rxjava
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
//使用了Android响应式编程
//RxJava和RxAndroid区别?
//简单来说:就是RxAndroid在RxJava的基础上
//优化了一些功能
//增强了Android特有的功能
//https://github.com/ReactiveX/RxAndroid
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
//endregion
//apache common lang3工具包
//提供了StringUtils等这样的类
//http://commons.apache.org/proper/commons-lang/
implementation 'org.apache.commons:commons-lang3:3.8'
//集合工具类
// https://mvnrepository.com/artifact/org.apache.commons/commons-collections4
implementation 'org.apache.commons:commons-collections4:+'
//通用IO相关工具类
//http://commons.apache.org/proper/commons-io/
implementation 'commons-io:commons-io:2.0'
//通过OkHttp的拦截器机制
//实现在应用通知栏显示网络请求功能
//https://github.com/ChuckerTeam/chucker
debugImplementation "com.github.chuckerteam.chucker:library:3.5.2"
releaseImplementation "com.github.chuckerteam.chucker:library-no-op:3.5.2"
//类似TabLayout的控件
//https://github.com/H07000223/FlycoTabLayout
implementation 'io.github.h07000223:flycoTabLayout:3.0.0'
//封装了RecyclerView
//提供更高层次的接口
//https://github.com/CymChad/BaseRecyclerViewAdapterHelper
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:+'
//自动释放RxJava相关资源
//https://github.com/uber/AutoDispose
implementation "com.uber.autodispose2:autodispose-androidx-lifecycle:2.1.1"
//banner轮播图框架
//https://github.com/youth5201314/banner
implementation 'io.github.youth5201314:banner:2.2.2'
//图片加载框架,还引用他目的是,coil有些功能不好实现
//https://github.com/bumptech/glide
implementation 'com.github.bumptech.glide:glide:+'
annotationProcessor 'com.github.bumptech.glide:compiler:+'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
//给控件添加未读消息数红点
//https://github.com/bingoogolapple/BGABadgeView-Android
implementation 'com.github.bingoogolapple.BGABadgeView-Android:api:1.2.0'
annotationProcessor 'com.github.bingoogolapple.BGABadgeView-Android:compiler:1.2.0'
//webview进度条
//https://github.com/youlookwhat/WebProgress
implementation 'com.github.youlookwhat:WebProgress:1.2.0'
//日志框架
//https://github.com/JakeWharton/timber
implementation 'com.jakewharton.timber:timber:5.0.1'
//跨界面通信框架
//https://github.com/greenrobot/EventBus
implementation 'org.greenrobot:eventbus:3.3.1'
//输入框右侧有清空按钮,类似iOS
//https://github.com/Cielsk/clearable-edittext
implementation 'com.github.Cielsk:clearable-edittext:0.0.8'
//类似滴滴出行验证码输入框控件
//https://github.com/jenly1314/SplitEditText
// implementation 'com.king.view:splitedittext:+'
//给任意控件添加闪光效果
//这里主要用到广告界面,打开广告按钮
//https://github.com/facebook/shimmer-android
implementation 'com.facebook.shimmer:shimmer:0.5.0'
//腾讯官方播放器,可以播放其他地址视频,不是说一定要播放腾讯点播服务的视频
//com.tencent.liteav:LiteAVSDK_Player:播放器核心
//super-player-tencent:更上层的接口和功能,例如:弹幕,滑动进度,滑动调整音量
//https://cloud.tencent.com/document/product/881/20213
implementation project(path: ':super-player-tencent')
//更方便的使用glide和palette
//https://github.com/florent37/GlidePalette
// implementation 'com.github.florent37:glidepalette:+'
implementation project(path: ':glidepalette')
implementation "androidx.media:media:+"
//和Glide配合处理图片
//可以实现很多效果
//模糊;圆角;圆
//我们这里是用它实现模糊效果
//https://github.com/wasabeef/glide-transformations
implementation 'jp.wasabeef:glide-transformations:+'
//圆形图片控件
//https://github.com/hdodenhof/CircleImageView
implementation 'de.hdodenhof:circleimageview:+'
//下载框架
//https://github.com/ixuea/android-downloader
implementation 'com.ixuea:android-downloader:3.0.0'
//更方便的日期时间,运算,解析格式化框架
//https://www.joda.org/joda-time/index.html
implementation 'joda-time:joda-time:+'
//emoji支持库,Android官方提供的Emoji兼容库,用来兼容低版本,高版本不需要使用该兼容库也可以
//官方提供的Eemoji组件是基于Unicode,也就是字体,所以在不同系统版本,以及不同平台显示的样式可能不一样
//如果要想实现类似微信,QQ,钉钉等主流软件的Emoji实现可以学习我们【商业级微聊项目】课程(http://www.ixuea.com/courses/19)
//其实就是使用图片实现emoji,就是图文混排效果,类似商品详情描述那样实现
implementation 'androidx.emoji:emoji-appcompat:+'
//emoji控件
implementation 'androidx.emoji:emoji-bundled:+'
//region 下拉刷新,上来加载更多
//下拉刷新框架
//https://github.com/scwang90/SmartRefreshLayout
implementation 'io.github.scwang90:refresh-layout-kernel:2.0.5'
implementation 'io.github.scwang90:refresh-header-classics:2.0.5' //经典刷新头
implementation 'io.github.scwang90:refresh-footer-classics:2.0.5' //经典加载头
//endregion
//视频播放框架
//https://github.com/CarGuo/GSYVideoPlayer
//完整版引入
implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer:v8.2.0-release-jitpack'
//对Recyclerview进行了,使用更方便
//https://github.com/jdsjlzx/LRecyclerView
implementation project(path: ':LRecyclerview')
//官方设置组件
implementation 'androidx.preference:preference:1.1.1'
//类似微信图片预览框架
//https://github.com/wanglu1209/PhotoViewer
implementation 'com.github.wanglu1209:PhotoViewer:0.50'
//Google实现的Java核心工具类
//相对于Apache的工具包来说
//Apache更多的用在Java Web项目
//而Guava在Android中用的更多
//具体的性能这里就不比较了
//大家感兴趣可以搜索下
//https://github.com/google/guava
implementation 'com.google.guava:guava:31.1-android'
//图片选择
//https://github.com/LuckSiege/PictureSelector
implementation 'io.github.lucksiege:pictureselector:v3.0.9'
implementation 'io.github.lucksiege:compress:v3.0.9'
implementation 'io.github.lucksiege:ucrop:v3.0.9'
//阿里云oss
//官方文档:https://help.aliyun.com/document_detail/32043.html
//sdk地址:https://github.com/aliyun/aliyun-oss-android-sdk
implementation 'com.aliyun.dpa:oss-android-sdk:+'
//高德地图,这里引用的是3d
//https://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project#gradle_sdk
implementation 'com.amap.api:3dmap:+'
//定位功能
implementation 'com.amap.api:location:+'
//搜索
implementation 'com.amap.api:search:latest.integration'
//RecyclerView 下拉刷新/加载更多、item点击/长按、头布局/尾布局/状态布局、万能分割线、Skeleton骨架图、极简adapter、嵌套滑动置顶
//使用该框架需要使用它提供的ByRecyclerView控件,所以依赖性比较强,但很多功能直接集成了,也更方便
//https://github.com/youlookwhat/ByRecyclerView
//骨架实现内部引用了:https://github.com/team-supercharge/ShimmerLayout
//对于普通view,可以按照该框架主页介绍的使用,在用户详情顶部就是用这种方式实现
implementation 'com.github.youlookwhat:ByRecyclerView:1.3.1'
//中文转拼音
//https://github.com/belerweb/pinyin4j
implementation 'com.belerweb:pinyin4j:+'
//类似微信联系人界面右侧字母索引
//https://github.com/lgdcoder/LetterIndexView
implementation project(path: ':LetterIndexView')
//二维码生成扫描框架
//https://github.com/jenly1314/ZXingLite
implementation 'com.github.jenly1314:ZXingLite:2.1.1'
//可以嵌套的RadioGroup
//https://github.com/fodroid/XRadioGroup
implementation 'com.github.fodroid:XRadioGroup:1.5'
//https://developer.android.google.cn/training/dependency-injection/hilt-android
implementation "com.google.dagger:hilt-android:2.38.1"
annotationProcessor "com.google.dagger:hilt-compiler:2.38.1"
//Jetpack中的分页组件
//https://developer.android.google.cn/topic/libraries/architecture/paging/v3-overview
implementation "androidx.paging:paging-runtime-ktx:$paging_version"
//Paging RxJava3支持,因为我们项目用的Java,所以无法使用Kotlin,所以就用RxJava
implementation "androidx.paging:paging-rxjava3:$paging_version"
//指示器
//https://github.com/hackware1993/MagicIndicator
implementation 'com.github.hackware1993:MagicIndicator:1.7.0'
//百度语音相关技术,目前主要用在收货地址编辑界面,语音输入收货地址
//https://ai.baidu.com/ai-doc/SPEECH/Pkgt4wwdx#%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97
implementation project(path: ':super-speech-baidu')
//TextView显示富文本,目前主要用在商品详情界面,显示富文本商品描述
//https://github.com/wangchenyan/html-text
implementation 'com.github.wangchenyan:html-text:+'
//Hutool是一个小而全的Java工具类库
// 通过静态方法封装,降低相关API的学习成本
// 提高工作效率,使Java拥有函数式语言般的优雅
//https://github.com/looly/hutool
implementation 'cn.hutool:hutool-all:5.7.14'
//支付宝支付
//https://opendocs.alipay.com/open/204/105296
implementation 'com.alipay.sdk:alipaysdk-android:+@aar'
//融云IM
//https://docs.rongcloud.cn/v4/5X/views/im/ui/guide/quick/include/android.html
implementation 'cn.rongcloud.sdk:im_lib:+'
//微信支付
//官方sdk下载文档:https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html
//官方集成文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:+'
//腾讯bugly
//https://bugly.qq.com/docs/user-guide/instruction-manual-android/?v=1.0.0#_3
//implementation 'com.tencent.bugly:crashreport:latest.release'
implementation 'com.tencent.bugly:crashreport_upgrade:latest.release'
implementation 'com.tencent.bugly:nativecrashreport:latest.release'
//内存泄漏检测工具
//https://github.com/square/leakcanary
//只有调试模式下才添加该依赖
debugImplementation 'com.squareup.leakcanary:leakcanary-android:+'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
启动界面,广告界面,引导界面等就不再贴图了。
主界面是在原版项目上精简实现的,但并不简单,顶部是Banner轮播图,可以放活动,广告等信息,点击可以打开网页,打开应用内页面,第三方应用;接下来是可以左右滚动到按钮,采用水平ScrollView实现;然后就是九宫格歌单,点击进入歌单详情;然后是单曲,点击直接进入黑胶唱片播放界面;最后是底部布局,主要用来提供一些快捷功能。
服务端采用Java Spring Boot框架。
例如:用户详情,歌单详情。
{
"data": { //真实数据
"id": "152149019135997129",
"created_at": "2022-05-03T14:01:44.000Z",
"updated_at": "2022-05-08T15:42:22.000Z",
"nickname": "ixuea82",
"icon": "42238b32f7e44820acf50d2a18942084dev.jpg",
"gender": 0,
"email": "[email protected]",
"phone": "3469271680"
},
"status": 0, //正常为0,其他值表示具体的错误信息
"message": null //错误信息,正常不会有改字段
}
例如:用户列表,歌单列表;所有列表接口都是如下分页格式:
{
"data": {
"total": 37, //总数量
"pages": 4, //分多少页
"size": 10, //每页多少条
"page": 1, //当前页数
"next": 2, //下一页
"data": [ //真实数据,是一个列表
{
"id": "1521490191359971329",
"created_at": "2022-05-03T14:01:44.000Z",
"updated_at": "2022-05-08T15:42:22.000Z",
"nickname": "爱学啊",
"icon": "42238b32f7e44820acf50d2a18942084dev.jpg",
"gender": 0,
"email": "[email protected]",
"phone": "3469271680",
"followings_count": 1,
"followers_count": 2
}
]
},
"status": 0
}
{
"data": "这是加密数据",
...
}